diff --git a/tiddlers/$__.mr_colors b/tiddlers/$__.mr_colors new file mode 100644 index 0000000..b90a91d --- /dev/null +++ b/tiddlers/$__.mr_colors @@ -0,0 +1,6 @@ +AliceBlue:#F0F8FF +AntiqueWhite:#FAEBD7 +Aqua:Aqua +Aquamarine:#7FFFD4 +Azure:Azure +Beige:#F5F5DC \ No newline at end of file diff --git a/tiddlers/$__.mr_colors.tid b/tiddlers/$__.mr_colors.meta similarity index 51% rename from tiddlers/$__.mr_colors.tid rename to tiddlers/$__.mr_colors.meta index 732175c..2526b58 100644 --- a/tiddlers/$__.mr_colors.tid +++ b/tiddlers/$__.mr_colors.meta @@ -1,15 +1,8 @@ created: 20181028033327986 creator: Mohammad description: part of example 11, using color names from a data dictionary -modified: 20190216180307390 +modified: 20190704155012184 modifier: Mohammad tags: exmp11 title: $:/.mr/colors -type: application/x-tiddler-dictionary - -AliceBlue:#F0F8FF -AntiqueWhite:#FAEBD7 -Aqua:Aqua -Aquamarine:#7FFFD4 -Azure:Azure -Beige:#F5F5DC \ No newline at end of file +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/$__.mr_kookma_stylesheet_multilevel-list.css.meta b/tiddlers/$__.mr_kookma_stylesheet_multilevel-list.css.meta index 5e7d18f..2afe80f 100644 --- a/tiddlers/$__.mr_kookma_stylesheet_multilevel-list.css.meta +++ b/tiddlers/$__.mr_kookma_stylesheet_multilevel-list.css.meta @@ -1,7 +1,7 @@ created: 20181207163418302 creator: Mohammad -modified: 20190406122512361 +modified: 20190704155012179 modifier: Mohammad tags: numbering $:/tags/Stylesheet title: $:/.mr/kookma/stylesheet/multilevel-list -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__.mr_kookma_stylesheet_tw-version.tid b/tiddlers/$__.mr_kookma_stylesheet_tw-version.tid index 5933b62..f226c2a 100644 --- a/tiddlers/$__.mr_kookma_stylesheet_tw-version.tid +++ b/tiddlers/$__.mr_kookma_stylesheet_tw-version.tid @@ -1,11 +1,3 @@ -created: 20180906042308596 -creator: Mohammad -modified: 20190216180307384 -modifier: Mohammad -tags: kookma $:/tags/Stylesheet -title: $:/.mr/kookma/stylesheet/tw-version -type: application/x-tiddler -
/* TW-version added to site title */
 .tc-site-title:before {
   content:"TW <>";
diff --git a/tiddlers/$__.mr_kookma_stylesheet_tw-version.tid.meta b/tiddlers/$__.mr_kookma_stylesheet_tw-version.tid.meta
new file mode 100644
index 0000000..45d8a03
--- /dev/null
+++ b/tiddlers/$__.mr_kookma_stylesheet_tw-version.tid.meta
@@ -0,0 +1,7 @@
+created: 20180906042308596
+creator: Mohammad
+modified: 20190704155012174
+modifier: Mohammad
+tags: kookma $:/tags/Stylesheet
+title: $:/.mr/kookma/stylesheet/tw-version
+type: application/x-tiddler
\ No newline at end of file
diff --git a/tiddlers/$__.mr_macro_utility.tid b/tiddlers/$__.mr_macro_utility.tid
index 2d13077..b39d035 100644
--- a/tiddlers/$__.mr_macro_utility.tid
+++ b/tiddlers/$__.mr_macro_utility.tid
@@ -1,7 +1,7 @@
 created: 20190128161742986
 creator: Mohammad
 description: contains utility macros for TW-Scripts documentation
-modified: 20190216180307378
+modified: 20190704155012169
 modifier: Mohammad
 tags: $:/tags/Macro
 title: $:/.mr/macro/utility
diff --git a/tiddlers/$__.mr_toc.tid b/tiddlers/$__.mr_toc.tid
index a9aa6fb..3abbc80 100644
--- a/tiddlers/$__.mr_toc.tid
+++ b/tiddlers/$__.mr_toc.tid
@@ -1,9 +1,8 @@
 created: 20190206031926928
 creator: Mohammad
 list: syntax search datatiddler batch
-modified: 20190216180307371
+modified: 20190704155012163
 modifier: Mohammad
 tags: 
 title: $:/.mr/toc
-type: text/vnd.tiddlywiki
-
+type: text/vnd.tiddlywiki
\ No newline at end of file
diff --git a/tiddlers/$__.tb_styles_really-numbered.css.meta b/tiddlers/$__.tb_styles_really-numbered.css.meta
index bb7f869..1e40708 100644
--- a/tiddlers/$__.tb_styles_really-numbered.css.meta
+++ b/tiddlers/$__.tb_styles_really-numbered.css.meta
@@ -1,9 +1,9 @@
 created: 20141201201027548
 creator: Tobias Beer
-modified: 20190216180307362
+modified: 20190704155012158
 modifier: Mohammad
 responder: Tobis Beer
 tags: $:/tags/Stylesheet
 title: $:/.tb/styles/really-numbered
 type: text/css
-url: https://tobibeer.github.io/tb5/#Advanced%20Numbered%20Lists
+url: https://tobibeer.github.io/tb5/#Advanced%20Numbered%20Lists
\ No newline at end of file
diff --git a/tiddlers/$__.tb_ui_ViewTemplate_summary.tid b/tiddlers/$__.tb_ui_ViewTemplate_summary.tid
new file mode 100644
index 0000000..d88e907
--- /dev/null
+++ b/tiddlers/$__.tb_ui_ViewTemplate_summary.tid
@@ -0,0 +1,13 @@
+created: 20141119004109928
+creator: Tobias Beer
+list-after: $:/core/ui/ViewTemplate/tags
+modified: 20190704155012151
+modifier: Mohammad
+summary: shows a summary or link
+tags: $:/tags/ViewTemplate
+title: $:/.tb/ui/ViewTemplate/summary
+type: text/vnd.tiddlywiki
+
+<$list filter="[all[current]has[summary]]">
+@@color:grey; //<$transclude field="summary" mode="block"/> //@@
+
\ No newline at end of file
diff --git a/tiddlers/$__DefaultTiddlers.tid b/tiddlers/$__DefaultTiddlers.tid
index dfc1f5c..b462cab 100644
--- a/tiddlers/$__DefaultTiddlers.tid
+++ b/tiddlers/$__DefaultTiddlers.tid
@@ -1,6 +1,6 @@
 created: 20190107164140913
 creator: Mohammad
-modified: 20190216180307744
+modified: 20190704155012492
 modifier: Mohammad
 title: $:/DefaultTiddlers
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__ImageState_dipper.jpg.tid b/tiddlers/$__ImageState_dipper.jpg.tid
index bf0abf9..6db22bc 100644
--- a/tiddlers/$__ImageState_dipper.jpg.tid
+++ b/tiddlers/$__ImageState_dipper.jpg.tid
@@ -1,6 +1,6 @@
 created: 20190201133706194
 creator: Mohammad
-modified: 20190216180307711
+modified: 20190704155012477
 modifier: Mohammad
 title: $:/ImageState/dipper.jpg
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__Import!!popup-Mohammad.tid b/tiddlers/$__Import!!popup-Mohammad.tid
deleted file mode 100644
index fbcccc2..0000000
--- a/tiddlers/$__Import!!popup-Mohammad.tid
+++ /dev/null
@@ -1,6 +0,0 @@
-created: 20190224163822164
-modified: 20190224163824967
-title: $:/Import!!popup-Mohammad
-type: text/vnd.tiddlywiki
-
-no
\ No newline at end of file
diff --git a/tiddlers/$__Import!!popup-myWideClass.tid b/tiddlers/$__Import!!popup-myWideClass.tid
deleted file mode 100644
index c696974..0000000
--- a/tiddlers/$__Import!!popup-myWideClass.tid
+++ /dev/null
@@ -1,6 +0,0 @@
-created: 20190224163817956
-modified: 20190224163820576
-title: $:/Import!!popup-myWideClass
-type: text/vnd.tiddlywiki
-
-no
\ No newline at end of file
diff --git a/tiddlers/$__SiteSubtitle.tid b/tiddlers/$__SiteSubtitle.tid
index 4b49879..85da0c4 100644
--- a/tiddlers/$__SiteSubtitle.tid
+++ b/tiddlers/$__SiteSubtitle.tid
@@ -1,6 +1,6 @@
 created: 20180616053502124
 creator: Mohammad
-modified: 20190216180307460
+modified: 20190704155012233
 modifier: Mohammad
 title: $:/SiteSubtitle
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__SiteTitle.tid b/tiddlers/$__SiteTitle.tid
index 653ed0d..6b75e39 100644
--- a/tiddlers/$__SiteTitle.tid
+++ b/tiddlers/$__SiteTitle.tid
@@ -1,6 +1,6 @@
 created: 20180830143055675
 creator: Mohammad
-modified: 20190216180307455
+modified: 20190704155012228
 modifier: Mohammad
 title: $:/SiteTitle
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$___CustomPalette.tid b/tiddlers/$___CustomPalette
similarity index 94%
rename from tiddlers/$___CustomPalette.tid
rename to tiddlers/$___CustomPalette
index f9ac5c7..ea2280a 100644
--- a/tiddlers/$___CustomPalette.tid
+++ b/tiddlers/$___CustomPalette
@@ -1,11 +1,3 @@
-created: 20190406122512388
-description: For Federatial website
-modified: 20190406122512388
-name: Federatial Custom Palette
-tags: $:/tags/Palette
-title: $:/_CustomPalette
-type: application/x-tiddler-dictionary
-
 federatial-white: #F9F9EB
 federatial-black: #292929
 federatial-grey: #666661
diff --git a/tiddlers/$___CustomPalette.meta b/tiddlers/$___CustomPalette.meta
new file mode 100644
index 0000000..626efe1
--- /dev/null
+++ b/tiddlers/$___CustomPalette.meta
@@ -0,0 +1,7 @@
+created: 20190704155012194
+description: For Federatial website
+modified: 20190704155012194
+name: Federatial Custom Palette
+tags: $:/tags/Palette
+title: $:/_CustomPalette
+type: application/x-tiddler-dictionary
\ No newline at end of file
diff --git a/tiddlers/$___EditorPreview.tid b/tiddlers/$___EditorPreview.tid
index f08292c..040f375 100644
--- a/tiddlers/$___EditorPreview.tid
+++ b/tiddlers/$___EditorPreview.tid
@@ -1,6 +1,6 @@
 caption: Spell check
 created: 20181114185428659
-modified: 20190216180307397
+modified: 20190704155012189
 tags: $:/tags/EditPreview
 title: $:/_EditorPreview
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__commander_ui_fieldops_add-remove-fields.tid b/tiddlers/$__commander_ui_fieldops_add-remove-fields.tid
index 0ad6b39..e491e52 100644
--- a/tiddlers/$__commander_ui_fieldops_add-remove-fields.tid
+++ b/tiddlers/$__commander_ui_fieldops_add-remove-fields.tid
@@ -1,7 +1,7 @@
 caption: Add remove fields
 created: 20190212101014417
 creator: Mohammad
-modified: 20190224163830929
+modified: 20190704155012585
 modifier: Mohammad
 tags: $:/tags/Commander/FieldOps
 title: $:/commander/ui/fieldops/add-remove-fields
diff --git a/tiddlers/$__config_AutoSave.tid b/tiddlers/$__config_AutoSave.tid
index d9b3e66..d1ccdce 100644
--- a/tiddlers/$__config_AutoSave.tid
+++ b/tiddlers/$__config_AutoSave.tid
@@ -1,5 +1,7 @@
 created: 20190107165608978
-modified: 20190216180307350
+creator: Mohammad
+modified: 20190704155012580
+modifier: Mohammad
 title: $:/config/AutoSave
 type: text/vnd.tiddlywiki
 
diff --git a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_close-all.tid b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_close-all.tid
index fabfe86..1863303 100644
--- a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_close-all.tid
+++ b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_close-all.tid
@@ -1,5 +1,5 @@
 created: 20190107164147464
-modified: 20190216180307992
+modified: 20190704155012557
 title: $:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all
 type: text/vnd.tiddlywiki
 
diff --git a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_control-panel.tid b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_control-panel.tid
index 68a0c2b..d487480 100644
--- a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_control-panel.tid
+++ b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_control-panel.tid
@@ -1,6 +1,6 @@
 created: 20190207033550793
 creator: Mohammad
-modified: 20190216180307972
+modified: 20190704155012552
 modifier: Mohammad
 title: $:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/control-panel
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_home.tid b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_home.tid
index 7db2dad..1277b25 100644
--- a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_home.tid
+++ b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_home.tid
@@ -1,5 +1,5 @@
 created: 20190107164146728
-modified: 20190216180307954
+modified: 20190704155012548
 title: $:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home
 type: text/vnd.tiddlywiki
 
diff --git a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_refresh.tid b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_refresh.tid
index 41c2a65..39a4ae1 100644
--- a/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_refresh.tid
+++ b/tiddlers/$__config_PageControlButtons_Visibility_$__core_ui_Buttons_refresh.tid
@@ -1,5 +1,5 @@
 created: 20190107164149737
-modified: 20190216180307947
+modified: 20190704155012542
 title: $:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh
 type: text/vnd.tiddlywiki
 
diff --git a/tiddlers/$__config_RelinkOnRename.tid b/tiddlers/$__config_RelinkOnRename.tid
index 28586a7..c05c979 100644
--- a/tiddlers/$__config_RelinkOnRename.tid
+++ b/tiddlers/$__config_RelinkOnRename.tid
@@ -1,6 +1,6 @@
 created: 20190110060519264
 creator: Mohammad
-modified: 20190216180307928
+modified: 20190704155012537
 modifier: Mohammad
 title: $:/config/RelinkOnRename
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__config_SaveWikiButton_Filename.tid b/tiddlers/$__config_SaveWikiButton_Filename.tid
index a31f88b..aac894f 100644
--- a/tiddlers/$__config_SaveWikiButton_Filename.tid
+++ b/tiddlers/$__config_SaveWikiButton_Filename.tid
@@ -1,6 +1,6 @@
 created: 20190207035409451
 creator: Mohammad
-modified: 20190216180307917
+modified: 20190704155012532
 modifier: Mohammad
 title: $:/config/SaveWikiButton/Filename
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__config_Search_AutoFocus.tid b/tiddlers/$__config_Search_AutoFocus.tid
index 8d62235..496e260 100644
--- a/tiddlers/$__config_Search_AutoFocus.tid
+++ b/tiddlers/$__config_Search_AutoFocus.tid
@@ -1,6 +1,6 @@
 created: 20190226102210221
 creator: Mohammad
-modified: 20190316114911871
+modified: 20190704155012528
 modifier: Mohammad
 title: $:/config/Search/AutoFocus
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__config_TimestampDisable.tid b/tiddlers/$__config_TimestampDisable.tid
deleted file mode 100644
index 905258c..0000000
--- a/tiddlers/$__config_TimestampDisable.tid
+++ /dev/null
@@ -1,7 +0,0 @@
-created: 20190110100445496
-creator: Mohammad
-modified: 20190216180307906
-modifier: Mohammad
-title: $:/config/TimestampDisable
-type: text/vnd.tiddlywiki
-
diff --git a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_clone.tid b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_clone.tid
index 41c1616..19aaaf0 100644
--- a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_clone.tid
+++ b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_clone.tid
@@ -1,5 +1,5 @@
 created: 20190107170014632
-modified: 20190216180307896
+modified: 20190704155012518
 title: $:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone
 type: text/vnd.tiddlywiki
 
diff --git a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_close-others.tid b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_close-others.tid
index bb8370f..10af9bf 100644
--- a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_close-others.tid
+++ b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_close-others.tid
@@ -1,5 +1,5 @@
 created: 20190107170017351
-modified: 20190216180307884
+modified: 20190704155012512
 title: $:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others
 type: text/vnd.tiddlywiki
 
diff --git a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_delete.tid b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_delete.tid
index c0c7b1d..16dc0f1 100644
--- a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_delete.tid
+++ b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__core_ui_Buttons_delete.tid
@@ -1,6 +1,6 @@
 created: 20190121072618804
 creator: Mohammad
-modified: 20190216180307874
+modified: 20190704155012507
 modifier: Mohammad
 title: $:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__plugins_danielo_encryptTiddler_crypt-button.tid b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__plugins_danielo_encryptTiddler_crypt-button.tid
index 2f94b23..b9febd9 100644
--- a/tiddlers/$__config_ViewToolbarButtons_Visibility_$__plugins_danielo_encryptTiddler_crypt-button.tid
+++ b/tiddlers/$__config_ViewToolbarButtons_Visibility_$__plugins_danielo_encryptTiddler_crypt-button.tid
@@ -1,6 +1,6 @@
 created: 20190119035702680
 creator: Mohammad
-modified: 20190216180307863
+modified: 20190704155012503
 modifier: Mohammad
 title: $:/config/ViewToolbarButtons/Visibility/$:/plugins/danielo/encryptTiddler/crypt-button
 type: text/vnd.tiddlywiki
diff --git a/tiddlers/$__config_WikiParserRules_Inline_wikilink.tid b/tiddlers/$__config_WikiParserRules_Inline_wikilink.tid
index 2c6776d..c3a05e3 100644
--- a/tiddlers/$__config_WikiParserRules_Inline_wikilink.tid
+++ b/tiddlers/$__config_WikiParserRules_Inline_wikilink.tid
@@ -1,5 +1,5 @@
 created: 20190109055339741
-modified: 20190216180307852
+modified: 20190704155012498
 title: $:/config/WikiParserRules/Inline/wikilink
 type: text/vnd.tiddlywiki
 
diff --git a/tiddlers/$__config_codemirror_autoCloseTags b/tiddlers/$__config_codemirror_autoCloseTags
new file mode 100644
index 0000000..f32a580
--- /dev/null
+++ b/tiddlers/$__config_codemirror_autoCloseTags
@@ -0,0 +1 @@
+true
\ No newline at end of file
diff --git a/tiddlers/$__config_codemirror_autoCloseTags.tid b/tiddlers/$__config_codemirror_autoCloseTags.meta
similarity index 61%
rename from tiddlers/$__config_codemirror_autoCloseTags.tid
rename to tiddlers/$__config_codemirror_autoCloseTags.meta
index 24aed2c..0990093 100644
--- a/tiddlers/$__config_codemirror_autoCloseTags.tid
+++ b/tiddlers/$__config_codemirror_autoCloseTags.meta
@@ -1,6 +1,4 @@
 created: 20190107170544522
-modified: 20190216180307341
+modified: 20190704155012576
 title: $:/config/codemirror/autoCloseTags
-type: bool
-
-true
\ No newline at end of file
+type: bool
\ No newline at end of file
diff --git a/tiddlers/$__config_codemirror_lineNumbers b/tiddlers/$__config_codemirror_lineNumbers
new file mode 100644
index 0000000..f32a580
--- /dev/null
+++ b/tiddlers/$__config_codemirror_lineNumbers
@@ -0,0 +1 @@
+true
\ No newline at end of file
diff --git a/tiddlers/$__config_codemirror_lineNumbers.tid b/tiddlers/$__config_codemirror_lineNumbers.meta
similarity index 60%
rename from tiddlers/$__config_codemirror_lineNumbers.tid
rename to tiddlers/$__config_codemirror_lineNumbers.meta
index ef13621..624787b 100644
--- a/tiddlers/$__config_codemirror_lineNumbers.tid
+++ b/tiddlers/$__config_codemirror_lineNumbers.meta
@@ -1,6 +1,4 @@
 created: 20190107170556210
-modified: 20190216180308034
+modified: 20190704155012571
 title: $:/config/codemirror/lineNumbers
-type: bool
-
-true
\ No newline at end of file
+type: bool
\ No newline at end of file
diff --git a/tiddlers/$__config_codemirror_styleActiveLine b/tiddlers/$__config_codemirror_styleActiveLine
new file mode 100644
index 0000000..02e4a84
--- /dev/null
+++ b/tiddlers/$__config_codemirror_styleActiveLine
@@ -0,0 +1 @@
+false
\ No newline at end of file
diff --git a/tiddlers/$__config_codemirror_styleActiveLine.tid b/tiddlers/$__config_codemirror_styleActiveLine.meta
similarity index 61%
rename from tiddlers/$__config_codemirror_styleActiveLine.tid
rename to tiddlers/$__config_codemirror_styleActiveLine.meta
index ebbeccf..792341e 100644
--- a/tiddlers/$__config_codemirror_styleActiveLine.tid
+++ b/tiddlers/$__config_codemirror_styleActiveLine.meta
@@ -1,6 +1,4 @@
 created: 20190107170551106
-modified: 20190216180308022
+modified: 20190704155012566
 title: $:/config/codemirror/styleActiveLine
-type: bool
-
-false
\ No newline at end of file
+type: bool
\ No newline at end of file
diff --git a/tiddlers/$__config_codemirror_theme b/tiddlers/$__config_codemirror_theme
new file mode 100644
index 0000000..331d858
--- /dev/null
+++ b/tiddlers/$__config_codemirror_theme
@@ -0,0 +1 @@
+default
\ No newline at end of file
diff --git a/tiddlers/$__config_codemirror_theme.tid b/tiddlers/$__config_codemirror_theme.meta
similarity index 55%
rename from tiddlers/$__config_codemirror_theme.tid
rename to tiddlers/$__config_codemirror_theme.meta
index e14aa72..f0d6c53 100644
--- a/tiddlers/$__config_codemirror_theme.tid
+++ b/tiddlers/$__config_codemirror_theme.meta
@@ -1,6 +1,4 @@
 created: 20190107170548753
-modified: 20190216180308011
+modified: 20190704155012561
 title: $:/config/codemirror/theme
-type: string
-
-default
\ No newline at end of file
+type: string
\ No newline at end of file
diff --git a/tiddlers/$__core.tid b/tiddlers/$__core.tid
deleted file mode 100644
index b440f09..0000000
--- a/tiddlers/$__core.tid
+++ /dev/null
@@ -1,8922 +0,0 @@
-author: JeremyRuston
-core-version: >=5.0.0
-created: 20190224163830827
-dependents: 
-description: TiddlyWiki5 core
-list: readme
-modified: 20190224163830827
-plugin-priority: 0
-plugin-type: plugin
-title: $:/core
-type: application/json
-version: 5.1.20-prerelease
-
-{
-    "tiddlers": {
-        "$:/Acknowledgements": {
-            "title": "$:/Acknowledgements",
-            "text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
-        },
-        "$:/core/copyright.txt": {
-            "title": "$:/core/copyright.txt",
-            "type": "text/plain",
-            "text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2018, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-        },
-        "$:/core/icon": {
-            "title": "$:/core/icon",
-            "tags": "$:/tags/Image",
-            "text": ""
-        },
-        "$:/core/images/add-comment": {
-            "title": "$:/core/images/add-comment",
-            "tags": "$:/tags/Image",
-            "text": ""
-        },
-        "$:/core/images/advanced-search-button": {
-            "title": "$:/core/images/advanced-search-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/auto-height": {
-            "title": "$:/core/images/auto-height",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n"
-        },
-        "$:/core/images/blank": {
-            "title": "$:/core/images/blank",
-            "tags": "$:/tags/Image",
-            "text": ""
-        },
-        "$:/core/images/bold": {
-            "title": "$:/core/images/bold",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/cancel-button": {
-            "title": "$:/core/images/cancel-button",
-            "tags": "$:/tags/Image",
-            "text": "\n\t\n\t    \n    \n"
-        },
-        "$:/core/images/chevron-down": {
-            "title": "$:/core/images/chevron-down",
-            "tags": "$:/tags/Image",
-            "text": "\n\t\n        \n        \n\t\n"
-        },
-        "$:/core/images/chevron-left": {
-            "title": "$:/core/images/chevron-left",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/chevron-right": {
-            "title": "$:/core/images/chevron-right",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/chevron-up": {
-            "title": "$:/core/images/chevron-up",
-            "tags": "$:/tags/Image",
-            "text": "\n\t\n        \n        \n\t\n"
-        },
-        "$:/core/images/clone-button": {
-            "title": "$:/core/images/clone-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/close-all-button": {
-            "title": "$:/core/images/close-all-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/close-button": {
-            "title": "$:/core/images/close-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n\n"
-        },
-        "$:/core/images/close-others-button": {
-            "title": "$:/core/images/close-others-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/copy-clipboard": {
-            "title": "$:/core/images/copy-clipboard",
-            "tags": "$:/tags/Image",
-            "text": "\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n"
-        },
-        "$:/core/images/delete-button": {
-            "title": "$:/core/images/delete-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/done-button": {
-            "title": "$:/core/images/done-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/down-arrow": {
-            "title": "$:/core/images/down-arrow",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n"
-        },
-        "$:/core/images/download-button": {
-            "title": "$:/core/images/download-button",
-            "tags": "$:/tags/Image",
-            "text": ""
-        },
-        "$:/core/images/edit-button": {
-            "title": "$:/core/images/edit-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/erase": {
-            "title": "$:/core/images/erase",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/excise": {
-            "title": "$:/core/images/excise",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/export-button": {
-            "title": "$:/core/images/export-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/file": {
-            "title": "$:/core/images/file",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/fixed-height": {
-            "title": "$:/core/images/fixed-height",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/fold-all-button": {
-            "title": "$:/core/images/fold-all-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/fold-button": {
-            "title": "$:/core/images/fold-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/fold-others-button": {
-            "title": "$:/core/images/fold-others-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/folder": {
-            "title": "$:/core/images/folder",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/full-screen-button": {
-            "title": "$:/core/images/full-screen-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n            \n        \n        \n            \n        \n        \n            \n        \n        \n            \n        \n    \n"
-        },
-        "$:/core/images/github": {
-            "title": "$:/core/images/github",
-            "tags": "$:/tags/Image",
-            "text": "\n        \n            \n        \n    \n"
-        },
-        "$:/core/images/gitter": {
-            "title": "$:/core/images/gitter",
-            "tags": "$:/tags/Image",
-            "text": "\n  \n  \n  \n  \n\n"
-        },
-        "$:/core/images/globe": {
-            "title": "$:/core/images/globe",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/heading-1": {
-            "title": "$:/core/images/heading-1",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/heading-2": {
-            "title": "$:/core/images/heading-2",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/heading-3": {
-            "title": "$:/core/images/heading-3",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/heading-4": {
-            "title": "$:/core/images/heading-4",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/heading-5": {
-            "title": "$:/core/images/heading-5",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/heading-6": {
-            "title": "$:/core/images/heading-6",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/help": {
-            "title": "$:/core/images/help",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/home-button": {
-            "title": "$:/core/images/home-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/import-button": {
-            "title": "$:/core/images/import-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/info-button": {
-            "title": "$:/core/images/info-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n            \n            \n            \n        \n    \n"
-        },
-        "$:/core/images/italic": {
-            "title": "$:/core/images/italic",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n         \n    \n"
-        },
-        "$:/core/images/left-arrow": {
-            "title": "$:/core/images/left-arrow",
-            "created": "20150315234410875",
-            "modified": "20150315235324760",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n\n"
-        },
-        "$:/core/images/line-width": {
-            "title": "$:/core/images/line-width",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/link": {
-            "title": "$:/core/images/link",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/linkify": {
-            "title": "$:/core/images/linkify",
-            "tags": "$:/tags/Image",
-            "text": ""
-        },
-        "$:/core/images/list-bullet": {
-            "title": "$:/core/images/list-bullet",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/list-number": {
-            "title": "$:/core/images/list-number",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/list": {
-            "title": "$:/core/images/list",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/locked-padlock": {
-            "title": "$:/core/images/locked-padlock",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/mail": {
-            "title": "$:/core/images/mail",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/menu-button": {
-            "title": "$:/core/images/menu-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n    \n    \n"
-        },
-        "$:/core/images/mono-block": {
-            "title": "$:/core/images/mono-block",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/mono-line": {
-            "title": "$:/core/images/mono-line",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/new-button": {
-            "title": "$:/core/images/new-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/new-here-button": {
-            "title": "$:/core/images/new-here-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n    \t\n\t        \n\t        \n        \n        \n        \n    \n    \n"
-        },
-        "$:/core/images/new-image-button": {
-            "title": "$:/core/images/new-image-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/new-journal-button": {
-            "title": "$:/core/images/new-journal-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n            \n                \n                \n                    <>\n                \n            \n        \n    \n"
-        },
-        "$:/core/images/opacity": {
-            "title": "$:/core/images/opacity",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/open-window": {
-            "title": "$:/core/images/open-window",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/options-button": {
-            "title": "$:/core/images/options-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/paint": {
-            "title": "$:/core/images/paint",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/palette": {
-            "title": "$:/core/images/palette",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/permalink-button": {
-            "title": "$:/core/images/permalink-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/permaview-button": {
-            "title": "$:/core/images/permaview-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/picture": {
-            "title": "$:/core/images/picture",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/plugin-generic-language": {
-            "title": "$:/core/images/plugin-generic-language",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/plugin-generic-plugin": {
-            "title": "$:/core/images/plugin-generic-plugin",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/plugin-generic-theme": {
-            "title": "$:/core/images/plugin-generic-theme",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/preview-closed": {
-            "title": "$:/core/images/preview-closed",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/preview-open": {
-            "title": "$:/core/images/preview-open",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/print-button": {
-            "title": "$:/core/images/print-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/quote": {
-            "title": "$:/core/images/quote",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/refresh-button": {
-            "title": "$:/core/images/refresh-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/right-arrow": {
-            "title": "$:/core/images/right-arrow",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n"
-        },
-        "$:/core/images/rotate-left": {
-            "title": "$:/core/images/rotate-left",
-            "tags": "$:/tags/Image",
-            "text": ""
-        },
-        "$:/core/images/save-button": {
-            "title": "$:/core/images/save-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/size": {
-            "title": "$:/core/images/size",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n"
-        },
-        "$:/core/images/spiral": {
-            "title": "$:/core/images/spiral",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/stamp": {
-            "title": "$:/core/images/stamp",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/star-filled": {
-            "title": "$:/core/images/star-filled",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/storyview-classic": {
-            "title": "$:/core/images/storyview-classic",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/storyview-pop": {
-            "title": "$:/core/images/storyview-pop",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/storyview-zoomin": {
-            "title": "$:/core/images/storyview-zoomin",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/strikethrough": {
-            "title": "$:/core/images/strikethrough",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/subscript": {
-            "title": "$:/core/images/subscript",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/superscript": {
-            "title": "$:/core/images/superscript",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/tag-button": {
-            "title": "$:/core/images/tag-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/theme-button": {
-            "title": "$:/core/images/theme-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n    \n"
-        },
-        "$:/core/images/timestamp-off": {
-            "title": "$:/core/images/timestamp-off",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n\n"
-        },
-        "$:/core/images/timestamp-on": {
-            "title": "$:/core/images/timestamp-on",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n\n"
-        },
-        "$:/core/images/tip": {
-            "title": "$:/core/images/tip",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/transcludify": {
-            "title": "$:/core/images/transcludify",
-            "tags": "$:/tags/Image",
-            "text": "\n"
-        },
-        "$:/core/images/twitter": {
-            "title": "$:/core/images/twitter",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n\n"
-        },
-        "$:/core/images/underline": {
-            "title": "$:/core/images/underline",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/unfold-all-button": {
-            "title": "$:/core/images/unfold-all-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/unfold-button": {
-            "title": "$:/core/images/unfold-button",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n        \n        \n    \n"
-        },
-        "$:/core/images/unlocked-padlock": {
-            "title": "$:/core/images/unlocked-padlock",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/up-arrow": {
-            "title": "$:/core/images/up-arrow",
-            "created": "20150316000544368",
-            "modified": "20150316000831867",
-            "tags": "$:/tags/Image",
-            "text": "\n\n\n \n"
-        },
-        "$:/core/images/video": {
-            "title": "$:/core/images/video",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/core/images/warning": {
-            "title": "$:/core/images/warning",
-            "tags": "$:/tags/Image",
-            "text": "\n    \n        \n    \n"
-        },
-        "$:/language/Buttons/AdvancedSearch/Caption": {
-            "title": "$:/language/Buttons/AdvancedSearch/Caption",
-            "text": "advanced search"
-        },
-        "$:/language/Buttons/AdvancedSearch/Hint": {
-            "title": "$:/language/Buttons/AdvancedSearch/Hint",
-            "text": "Advanced search"
-        },
-        "$:/language/Buttons/Cancel/Caption": {
-            "title": "$:/language/Buttons/Cancel/Caption",
-            "text": "cancel"
-        },
-        "$:/language/Buttons/Cancel/Hint": {
-            "title": "$:/language/Buttons/Cancel/Hint",
-            "text": "Discard changes to this tiddler"
-        },
-        "$:/language/Buttons/Clone/Caption": {
-            "title": "$:/language/Buttons/Clone/Caption",
-            "text": "clone"
-        },
-        "$:/language/Buttons/Clone/Hint": {
-            "title": "$:/language/Buttons/Clone/Hint",
-            "text": "Clone this tiddler"
-        },
-        "$:/language/Buttons/Close/Caption": {
-            "title": "$:/language/Buttons/Close/Caption",
-            "text": "close"
-        },
-        "$:/language/Buttons/Close/Hint": {
-            "title": "$:/language/Buttons/Close/Hint",
-            "text": "Close this tiddler"
-        },
-        "$:/language/Buttons/CloseAll/Caption": {
-            "title": "$:/language/Buttons/CloseAll/Caption",
-            "text": "close all"
-        },
-        "$:/language/Buttons/CloseAll/Hint": {
-            "title": "$:/language/Buttons/CloseAll/Hint",
-            "text": "Close all tiddlers"
-        },
-        "$:/language/Buttons/CloseOthers/Caption": {
-            "title": "$:/language/Buttons/CloseOthers/Caption",
-            "text": "close others"
-        },
-        "$:/language/Buttons/CloseOthers/Hint": {
-            "title": "$:/language/Buttons/CloseOthers/Hint",
-            "text": "Close other tiddlers"
-        },
-        "$:/language/Buttons/ControlPanel/Caption": {
-            "title": "$:/language/Buttons/ControlPanel/Caption",
-            "text": "control panel"
-        },
-        "$:/language/Buttons/ControlPanel/Hint": {
-            "title": "$:/language/Buttons/ControlPanel/Hint",
-            "text": "Open control panel"
-        },
-        "$:/language/Buttons/CopyToClipboard/Caption": {
-            "title": "$:/language/Buttons/CopyToClipboard/Caption",
-            "text": "copy to clipboard"
-        },
-        "$:/language/Buttons/CopyToClipboard/Hint": {
-            "title": "$:/language/Buttons/CopyToClipboard/Hint",
-            "text": "Copy this text to the clipboard"
-        },
-        "$:/language/Buttons/Delete/Caption": {
-            "title": "$:/language/Buttons/Delete/Caption",
-            "text": "delete"
-        },
-        "$:/language/Buttons/Delete/Hint": {
-            "title": "$:/language/Buttons/Delete/Hint",
-            "text": "Delete this tiddler"
-        },
-        "$:/language/Buttons/Edit/Caption": {
-            "title": "$:/language/Buttons/Edit/Caption",
-            "text": "edit"
-        },
-        "$:/language/Buttons/Edit/Hint": {
-            "title": "$:/language/Buttons/Edit/Hint",
-            "text": "Edit this tiddler"
-        },
-        "$:/language/Buttons/Encryption/Caption": {
-            "title": "$:/language/Buttons/Encryption/Caption",
-            "text": "encryption"
-        },
-        "$:/language/Buttons/Encryption/Hint": {
-            "title": "$:/language/Buttons/Encryption/Hint",
-            "text": "Set or clear a password for saving this wiki"
-        },
-        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
-            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
-            "text": "clear password"
-        },
-        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
-            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
-            "text": "Clear the password and save this wiki without encryption"
-        },
-        "$:/language/Buttons/Encryption/SetPassword/Caption": {
-            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
-            "text": "set password"
-        },
-        "$:/language/Buttons/Encryption/SetPassword/Hint": {
-            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
-            "text": "Set a password for saving this wiki with encryption"
-        },
-        "$:/language/Buttons/ExportPage/Caption": {
-            "title": "$:/language/Buttons/ExportPage/Caption",
-            "text": "export all"
-        },
-        "$:/language/Buttons/ExportPage/Hint": {
-            "title": "$:/language/Buttons/ExportPage/Hint",
-            "text": "Export all tiddlers"
-        },
-        "$:/language/Buttons/ExportTiddler/Caption": {
-            "title": "$:/language/Buttons/ExportTiddler/Caption",
-            "text": "export tiddler"
-        },
-        "$:/language/Buttons/ExportTiddler/Hint": {
-            "title": "$:/language/Buttons/ExportTiddler/Hint",
-            "text": "Export tiddler"
-        },
-        "$:/language/Buttons/ExportTiddlers/Caption": {
-            "title": "$:/language/Buttons/ExportTiddlers/Caption",
-            "text": "export tiddlers"
-        },
-        "$:/language/Buttons/ExportTiddlers/Hint": {
-            "title": "$:/language/Buttons/ExportTiddlers/Hint",
-            "text": "Export tiddlers"
-        },
-        "$:/language/Buttons/Fold/Caption": {
-            "title": "$:/language/Buttons/Fold/Caption",
-            "text": "fold tiddler"
-        },
-        "$:/language/Buttons/Fold/Hint": {
-            "title": "$:/language/Buttons/Fold/Hint",
-            "text": "Fold the body of this tiddler"
-        },
-        "$:/language/Buttons/Fold/FoldBar/Caption": {
-            "title": "$:/language/Buttons/Fold/FoldBar/Caption",
-            "text": "fold-bar"
-        },
-        "$:/language/Buttons/Fold/FoldBar/Hint": {
-            "title": "$:/language/Buttons/Fold/FoldBar/Hint",
-            "text": "Optional bars to fold and unfold tiddlers"
-        },
-        "$:/language/Buttons/Unfold/Caption": {
-            "title": "$:/language/Buttons/Unfold/Caption",
-            "text": "unfold tiddler"
-        },
-        "$:/language/Buttons/Unfold/Hint": {
-            "title": "$:/language/Buttons/Unfold/Hint",
-            "text": "Unfold the body of this tiddler"
-        },
-        "$:/language/Buttons/FoldOthers/Caption": {
-            "title": "$:/language/Buttons/FoldOthers/Caption",
-            "text": "fold other tiddlers"
-        },
-        "$:/language/Buttons/FoldOthers/Hint": {
-            "title": "$:/language/Buttons/FoldOthers/Hint",
-            "text": "Fold the bodies of other opened tiddlers"
-        },
-        "$:/language/Buttons/FoldAll/Caption": {
-            "title": "$:/language/Buttons/FoldAll/Caption",
-            "text": "fold all tiddlers"
-        },
-        "$:/language/Buttons/FoldAll/Hint": {
-            "title": "$:/language/Buttons/FoldAll/Hint",
-            "text": "Fold the bodies of all opened tiddlers"
-        },
-        "$:/language/Buttons/UnfoldAll/Caption": {
-            "title": "$:/language/Buttons/UnfoldAll/Caption",
-            "text": "unfold all tiddlers"
-        },
-        "$:/language/Buttons/UnfoldAll/Hint": {
-            "title": "$:/language/Buttons/UnfoldAll/Hint",
-            "text": "Unfold the bodies of all opened tiddlers"
-        },
-        "$:/language/Buttons/FullScreen/Caption": {
-            "title": "$:/language/Buttons/FullScreen/Caption",
-            "text": "full-screen"
-        },
-        "$:/language/Buttons/FullScreen/Hint": {
-            "title": "$:/language/Buttons/FullScreen/Hint",
-            "text": "Enter or leave full-screen mode"
-        },
-        "$:/language/Buttons/Help/Caption": {
-            "title": "$:/language/Buttons/Help/Caption",
-            "text": "help"
-        },
-        "$:/language/Buttons/Help/Hint": {
-            "title": "$:/language/Buttons/Help/Hint",
-            "text": "Show help panel"
-        },
-        "$:/language/Buttons/Import/Caption": {
-            "title": "$:/language/Buttons/Import/Caption",
-            "text": "import"
-        },
-        "$:/language/Buttons/Import/Hint": {
-            "title": "$:/language/Buttons/Import/Hint",
-            "text": "Import many types of file including text, image, TiddlyWiki or JSON"
-        },
-        "$:/language/Buttons/Info/Caption": {
-            "title": "$:/language/Buttons/Info/Caption",
-            "text": "info"
-        },
-        "$:/language/Buttons/Info/Hint": {
-            "title": "$:/language/Buttons/Info/Hint",
-            "text": "Show information for this tiddler"
-        },
-        "$:/language/Buttons/Home/Caption": {
-            "title": "$:/language/Buttons/Home/Caption",
-            "text": "home"
-        },
-        "$:/language/Buttons/Home/Hint": {
-            "title": "$:/language/Buttons/Home/Hint",
-            "text": "Open the default tiddlers"
-        },
-        "$:/language/Buttons/Language/Caption": {
-            "title": "$:/language/Buttons/Language/Caption",
-            "text": "language"
-        },
-        "$:/language/Buttons/Language/Hint": {
-            "title": "$:/language/Buttons/Language/Hint",
-            "text": "Choose the user interface language"
-        },
-        "$:/language/Buttons/Manager/Caption": {
-            "title": "$:/language/Buttons/Manager/Caption",
-            "text": "tiddler manager"
-        },
-        "$:/language/Buttons/Manager/Hint": {
-            "title": "$:/language/Buttons/Manager/Hint",
-            "text": "Open tiddler manager"
-        },
-        "$:/language/Buttons/More/Caption": {
-            "title": "$:/language/Buttons/More/Caption",
-            "text": "more"
-        },
-        "$:/language/Buttons/More/Hint": {
-            "title": "$:/language/Buttons/More/Hint",
-            "text": "More actions"
-        },
-        "$:/language/Buttons/NewHere/Caption": {
-            "title": "$:/language/Buttons/NewHere/Caption",
-            "text": "new here"
-        },
-        "$:/language/Buttons/NewHere/Hint": {
-            "title": "$:/language/Buttons/NewHere/Hint",
-            "text": "Create a new tiddler tagged with this one"
-        },
-        "$:/language/Buttons/NewJournal/Caption": {
-            "title": "$:/language/Buttons/NewJournal/Caption",
-            "text": "new journal"
-        },
-        "$:/language/Buttons/NewJournal/Hint": {
-            "title": "$:/language/Buttons/NewJournal/Hint",
-            "text": "Create a new journal tiddler"
-        },
-        "$:/language/Buttons/NewJournalHere/Caption": {
-            "title": "$:/language/Buttons/NewJournalHere/Caption",
-            "text": "new journal here"
-        },
-        "$:/language/Buttons/NewJournalHere/Hint": {
-            "title": "$:/language/Buttons/NewJournalHere/Hint",
-            "text": "Create a new journal tiddler tagged with this one"
-        },
-        "$:/language/Buttons/NewImage/Caption": {
-            "title": "$:/language/Buttons/NewImage/Caption",
-            "text": "new image"
-        },
-        "$:/language/Buttons/NewImage/Hint": {
-            "title": "$:/language/Buttons/NewImage/Hint",
-            "text": "Create a new image tiddler"
-        },
-        "$:/language/Buttons/NewMarkdown/Caption": {
-            "title": "$:/language/Buttons/NewMarkdown/Caption",
-            "text": "new Markdown tiddler"
-        },
-        "$:/language/Buttons/NewMarkdown/Hint": {
-            "title": "$:/language/Buttons/NewMarkdown/Hint",
-            "text": "Create a new Markdown tiddler"
-        },
-        "$:/language/Buttons/NewTiddler/Caption": {
-            "title": "$:/language/Buttons/NewTiddler/Caption",
-            "text": "new tiddler"
-        },
-        "$:/language/Buttons/NewTiddler/Hint": {
-            "title": "$:/language/Buttons/NewTiddler/Hint",
-            "text": "Create a new tiddler"
-        },
-        "$:/language/Buttons/OpenWindow/Caption": {
-            "title": "$:/language/Buttons/OpenWindow/Caption",
-            "text": "open in new window"
-        },
-        "$:/language/Buttons/OpenWindow/Hint": {
-            "title": "$:/language/Buttons/OpenWindow/Hint",
-            "text": "Open tiddler in new window"
-        },
-        "$:/language/Buttons/Palette/Caption": {
-            "title": "$:/language/Buttons/Palette/Caption",
-            "text": "palette"
-        },
-        "$:/language/Buttons/Palette/Hint": {
-            "title": "$:/language/Buttons/Palette/Hint",
-            "text": "Choose the colour palette"
-        },
-        "$:/language/Buttons/Permalink/Caption": {
-            "title": "$:/language/Buttons/Permalink/Caption",
-            "text": "permalink"
-        },
-        "$:/language/Buttons/Permalink/Hint": {
-            "title": "$:/language/Buttons/Permalink/Hint",
-            "text": "Set browser address bar to a direct link to this tiddler"
-        },
-        "$:/language/Buttons/Permaview/Caption": {
-            "title": "$:/language/Buttons/Permaview/Caption",
-            "text": "permaview"
-        },
-        "$:/language/Buttons/Permaview/Hint": {
-            "title": "$:/language/Buttons/Permaview/Hint",
-            "text": "Set browser address bar to a direct link to all the tiddlers in this story"
-        },
-        "$:/language/Buttons/Print/Caption": {
-            "title": "$:/language/Buttons/Print/Caption",
-            "text": "print page"
-        },
-        "$:/language/Buttons/Print/Hint": {
-            "title": "$:/language/Buttons/Print/Hint",
-            "text": "Print the current page"
-        },
-        "$:/language/Buttons/Refresh/Caption": {
-            "title": "$:/language/Buttons/Refresh/Caption",
-            "text": "refresh"
-        },
-        "$:/language/Buttons/Refresh/Hint": {
-            "title": "$:/language/Buttons/Refresh/Hint",
-            "text": "Perform a full refresh of the wiki"
-        },
-        "$:/language/Buttons/Save/Caption": {
-            "title": "$:/language/Buttons/Save/Caption",
-            "text": "ok"
-        },
-        "$:/language/Buttons/Save/Hint": {
-            "title": "$:/language/Buttons/Save/Hint",
-            "text": "Confirm changes to this tiddler"
-        },
-        "$:/language/Buttons/SaveWiki/Caption": {
-            "title": "$:/language/Buttons/SaveWiki/Caption",
-            "text": "save changes"
-        },
-        "$:/language/Buttons/SaveWiki/Hint": {
-            "title": "$:/language/Buttons/SaveWiki/Hint",
-            "text": "Save changes"
-        },
-        "$:/language/Buttons/StoryView/Caption": {
-            "title": "$:/language/Buttons/StoryView/Caption",
-            "text": "storyview"
-        },
-        "$:/language/Buttons/StoryView/Hint": {
-            "title": "$:/language/Buttons/StoryView/Hint",
-            "text": "Choose the story visualisation"
-        },
-        "$:/language/Buttons/HideSideBar/Caption": {
-            "title": "$:/language/Buttons/HideSideBar/Caption",
-            "text": "hide sidebar"
-        },
-        "$:/language/Buttons/HideSideBar/Hint": {
-            "title": "$:/language/Buttons/HideSideBar/Hint",
-            "text": "Hide sidebar"
-        },
-        "$:/language/Buttons/ShowSideBar/Caption": {
-            "title": "$:/language/Buttons/ShowSideBar/Caption",
-            "text": "show sidebar"
-        },
-        "$:/language/Buttons/ShowSideBar/Hint": {
-            "title": "$:/language/Buttons/ShowSideBar/Hint",
-            "text": "Show sidebar"
-        },
-        "$:/language/Buttons/TagManager/Caption": {
-            "title": "$:/language/Buttons/TagManager/Caption",
-            "text": "tag manager"
-        },
-        "$:/language/Buttons/TagManager/Hint": {
-            "title": "$:/language/Buttons/TagManager/Hint",
-            "text": "Open tag manager"
-        },
-        "$:/language/Buttons/Timestamp/Caption": {
-            "title": "$:/language/Buttons/Timestamp/Caption",
-            "text": "timestamps"
-        },
-        "$:/language/Buttons/Timestamp/Hint": {
-            "title": "$:/language/Buttons/Timestamp/Hint",
-            "text": "Choose whether modifications update timestamps"
-        },
-        "$:/language/Buttons/Timestamp/On/Caption": {
-            "title": "$:/language/Buttons/Timestamp/On/Caption",
-            "text": "timestamps are on"
-        },
-        "$:/language/Buttons/Timestamp/On/Hint": {
-            "title": "$:/language/Buttons/Timestamp/On/Hint",
-            "text": "Update timestamps when tiddlers are modified"
-        },
-        "$:/language/Buttons/Timestamp/Off/Caption": {
-            "title": "$:/language/Buttons/Timestamp/Off/Caption",
-            "text": "timestamps are off"
-        },
-        "$:/language/Buttons/Timestamp/Off/Hint": {
-            "title": "$:/language/Buttons/Timestamp/Off/Hint",
-            "text": "Don't update timestamps when tiddlers are modified"
-        },
-        "$:/language/Buttons/Theme/Caption": {
-            "title": "$:/language/Buttons/Theme/Caption",
-            "text": "theme"
-        },
-        "$:/language/Buttons/Theme/Hint": {
-            "title": "$:/language/Buttons/Theme/Hint",
-            "text": "Choose the display theme"
-        },
-        "$:/language/Buttons/Bold/Caption": {
-            "title": "$:/language/Buttons/Bold/Caption",
-            "text": "bold"
-        },
-        "$:/language/Buttons/Bold/Hint": {
-            "title": "$:/language/Buttons/Bold/Hint",
-            "text": "Apply bold formatting to selection"
-        },
-        "$:/language/Buttons/Clear/Caption": {
-            "title": "$:/language/Buttons/Clear/Caption",
-            "text": "clear"
-        },
-        "$:/language/Buttons/Clear/Hint": {
-            "title": "$:/language/Buttons/Clear/Hint",
-            "text": "Clear image to solid colour"
-        },
-        "$:/language/Buttons/EditorHeight/Caption": {
-            "title": "$:/language/Buttons/EditorHeight/Caption",
-            "text": "editor height"
-        },
-        "$:/language/Buttons/EditorHeight/Caption/Auto": {
-            "title": "$:/language/Buttons/EditorHeight/Caption/Auto",
-            "text": "Automatically adjust height to fit content"
-        },
-        "$:/language/Buttons/EditorHeight/Caption/Fixed": {
-            "title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
-            "text": "Fixed height:"
-        },
-        "$:/language/Buttons/EditorHeight/Hint": {
-            "title": "$:/language/Buttons/EditorHeight/Hint",
-            "text": "Choose the height of the text editor"
-        },
-        "$:/language/Buttons/Excise/Caption": {
-            "title": "$:/language/Buttons/Excise/Caption",
-            "text": "excise"
-        },
-        "$:/language/Buttons/Excise/Caption/Excise": {
-            "title": "$:/language/Buttons/Excise/Caption/Excise",
-            "text": "Perform excision"
-        },
-        "$:/language/Buttons/Excise/Caption/MacroName": {
-            "title": "$:/language/Buttons/Excise/Caption/MacroName",
-            "text": "Macro name:"
-        },
-        "$:/language/Buttons/Excise/Caption/NewTitle": {
-            "title": "$:/language/Buttons/Excise/Caption/NewTitle",
-            "text": "Title of new tiddler:"
-        },
-        "$:/language/Buttons/Excise/Caption/Replace": {
-            "title": "$:/language/Buttons/Excise/Caption/Replace",
-            "text": "Replace excised text with:"
-        },
-        "$:/language/Buttons/Excise/Caption/Replace/Macro": {
-            "title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
-            "text": "macro"
-        },
-        "$:/language/Buttons/Excise/Caption/Replace/Link": {
-            "title": "$:/language/Buttons/Excise/Caption/Replace/Link",
-            "text": "link"
-        },
-        "$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
-            "title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
-            "text": "transclusion"
-        },
-        "$:/language/Buttons/Excise/Caption/Tag": {
-            "title": "$:/language/Buttons/Excise/Caption/Tag",
-            "text": "Tag new tiddler with the title of this tiddler"
-        },
-        "$:/language/Buttons/Excise/Caption/TiddlerExists": {
-            "title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
-            "text": "Warning: tiddler already exists"
-        },
-        "$:/language/Buttons/Excise/Hint": {
-            "title": "$:/language/Buttons/Excise/Hint",
-            "text": "Excise the selected text into a new tiddler"
-        },
-        "$:/language/Buttons/Heading1/Caption": {
-            "title": "$:/language/Buttons/Heading1/Caption",
-            "text": "heading 1"
-        },
-        "$:/language/Buttons/Heading1/Hint": {
-            "title": "$:/language/Buttons/Heading1/Hint",
-            "text": "Apply heading level 1 formatting to lines containing selection"
-        },
-        "$:/language/Buttons/Heading2/Caption": {
-            "title": "$:/language/Buttons/Heading2/Caption",
-            "text": "heading 2"
-        },
-        "$:/language/Buttons/Heading2/Hint": {
-            "title": "$:/language/Buttons/Heading2/Hint",
-            "text": "Apply heading level 2 formatting to lines containing selection"
-        },
-        "$:/language/Buttons/Heading3/Caption": {
-            "title": "$:/language/Buttons/Heading3/Caption",
-            "text": "heading 3"
-        },
-        "$:/language/Buttons/Heading3/Hint": {
-            "title": "$:/language/Buttons/Heading3/Hint",
-            "text": "Apply heading level 3 formatting to lines containing selection"
-        },
-        "$:/language/Buttons/Heading4/Caption": {
-            "title": "$:/language/Buttons/Heading4/Caption",
-            "text": "heading 4"
-        },
-        "$:/language/Buttons/Heading4/Hint": {
-            "title": "$:/language/Buttons/Heading4/Hint",
-            "text": "Apply heading level 4 formatting to lines containing selection"
-        },
-        "$:/language/Buttons/Heading5/Caption": {
-            "title": "$:/language/Buttons/Heading5/Caption",
-            "text": "heading 5"
-        },
-        "$:/language/Buttons/Heading5/Hint": {
-            "title": "$:/language/Buttons/Heading5/Hint",
-            "text": "Apply heading level 5 formatting to lines containing selection"
-        },
-        "$:/language/Buttons/Heading6/Caption": {
-            "title": "$:/language/Buttons/Heading6/Caption",
-            "text": "heading 6"
-        },
-        "$:/language/Buttons/Heading6/Hint": {
-            "title": "$:/language/Buttons/Heading6/Hint",
-            "text": "Apply heading level 6 formatting to lines containing selection"
-        },
-        "$:/language/Buttons/Italic/Caption": {
-            "title": "$:/language/Buttons/Italic/Caption",
-            "text": "italic"
-        },
-        "$:/language/Buttons/Italic/Hint": {
-            "title": "$:/language/Buttons/Italic/Hint",
-            "text": "Apply italic formatting to selection"
-        },
-        "$:/language/Buttons/LineWidth/Caption": {
-            "title": "$:/language/Buttons/LineWidth/Caption",
-            "text": "line width"
-        },
-        "$:/language/Buttons/LineWidth/Hint": {
-            "title": "$:/language/Buttons/LineWidth/Hint",
-            "text": "Set line width for painting"
-        },
-        "$:/language/Buttons/Link/Caption": {
-            "title": "$:/language/Buttons/Link/Caption",
-            "text": "link"
-        },
-        "$:/language/Buttons/Link/Hint": {
-            "title": "$:/language/Buttons/Link/Hint",
-            "text": "Create wikitext link"
-        },
-        "$:/language/Buttons/Linkify/Caption": {
-            "title": "$:/language/Buttons/Linkify/Caption",
-            "text": "wikilink"
-        },
-        "$:/language/Buttons/Linkify/Hint": {
-            "title": "$:/language/Buttons/Linkify/Hint",
-            "text": "Wrap selection in square brackets"
-        },
-        "$:/language/Buttons/ListBullet/Caption": {
-            "title": "$:/language/Buttons/ListBullet/Caption",
-            "text": "bulleted list"
-        },
-        "$:/language/Buttons/ListBullet/Hint": {
-            "title": "$:/language/Buttons/ListBullet/Hint",
-            "text": "Apply bulleted list formatting to lines containing selection"
-        },
-        "$:/language/Buttons/ListNumber/Caption": {
-            "title": "$:/language/Buttons/ListNumber/Caption",
-            "text": "numbered list"
-        },
-        "$:/language/Buttons/ListNumber/Hint": {
-            "title": "$:/language/Buttons/ListNumber/Hint",
-            "text": "Apply numbered list formatting to lines containing selection"
-        },
-        "$:/language/Buttons/MonoBlock/Caption": {
-            "title": "$:/language/Buttons/MonoBlock/Caption",
-            "text": "monospaced block"
-        },
-        "$:/language/Buttons/MonoBlock/Hint": {
-            "title": "$:/language/Buttons/MonoBlock/Hint",
-            "text": "Apply monospaced block formatting to lines containing selection"
-        },
-        "$:/language/Buttons/MonoLine/Caption": {
-            "title": "$:/language/Buttons/MonoLine/Caption",
-            "text": "monospaced"
-        },
-        "$:/language/Buttons/MonoLine/Hint": {
-            "title": "$:/language/Buttons/MonoLine/Hint",
-            "text": "Apply monospaced character formatting to selection"
-        },
-        "$:/language/Buttons/Opacity/Caption": {
-            "title": "$:/language/Buttons/Opacity/Caption",
-            "text": "opacity"
-        },
-        "$:/language/Buttons/Opacity/Hint": {
-            "title": "$:/language/Buttons/Opacity/Hint",
-            "text": "Set painting opacity"
-        },
-        "$:/language/Buttons/Paint/Caption": {
-            "title": "$:/language/Buttons/Paint/Caption",
-            "text": "paint colour"
-        },
-        "$:/language/Buttons/Paint/Hint": {
-            "title": "$:/language/Buttons/Paint/Hint",
-            "text": "Set painting colour"
-        },
-        "$:/language/Buttons/Picture/Caption": {
-            "title": "$:/language/Buttons/Picture/Caption",
-            "text": "picture"
-        },
-        "$:/language/Buttons/Picture/Hint": {
-            "title": "$:/language/Buttons/Picture/Hint",
-            "text": "Insert picture"
-        },
-        "$:/language/Buttons/Preview/Caption": {
-            "title": "$:/language/Buttons/Preview/Caption",
-            "text": "preview"
-        },
-        "$:/language/Buttons/Preview/Hint": {
-            "title": "$:/language/Buttons/Preview/Hint",
-            "text": "Show preview pane"
-        },
-        "$:/language/Buttons/PreviewType/Caption": {
-            "title": "$:/language/Buttons/PreviewType/Caption",
-            "text": "preview type"
-        },
-        "$:/language/Buttons/PreviewType/Hint": {
-            "title": "$:/language/Buttons/PreviewType/Hint",
-            "text": "Choose preview type"
-        },
-        "$:/language/Buttons/Quote/Caption": {
-            "title": "$:/language/Buttons/Quote/Caption",
-            "text": "quote"
-        },
-        "$:/language/Buttons/Quote/Hint": {
-            "title": "$:/language/Buttons/Quote/Hint",
-            "text": "Apply quoted text formatting to lines containing selection"
-        },
-        "$:/language/Buttons/RotateLeft/Caption": {
-            "title": "$:/language/Buttons/RotateLeft/Caption",
-            "text": "rotate left"
-        },
-        "$:/language/Buttons/RotateLeft/Hint": {
-            "title": "$:/language/Buttons/RotateLeft/Hint",
-            "text": "Rotate image left by 90 degrees"
-        },
-        "$:/language/Buttons/Size/Caption": {
-            "title": "$:/language/Buttons/Size/Caption",
-            "text": "image size"
-        },
-        "$:/language/Buttons/Size/Caption/Height": {
-            "title": "$:/language/Buttons/Size/Caption/Height",
-            "text": "Height:"
-        },
-        "$:/language/Buttons/Size/Caption/Resize": {
-            "title": "$:/language/Buttons/Size/Caption/Resize",
-            "text": "Resize image"
-        },
-        "$:/language/Buttons/Size/Caption/Width": {
-            "title": "$:/language/Buttons/Size/Caption/Width",
-            "text": "Width:"
-        },
-        "$:/language/Buttons/Size/Hint": {
-            "title": "$:/language/Buttons/Size/Hint",
-            "text": "Set image size"
-        },
-        "$:/language/Buttons/Stamp/Caption": {
-            "title": "$:/language/Buttons/Stamp/Caption",
-            "text": "stamp"
-        },
-        "$:/language/Buttons/Stamp/Caption/New": {
-            "title": "$:/language/Buttons/Stamp/Caption/New",
-            "text": "Add your own"
-        },
-        "$:/language/Buttons/Stamp/Hint": {
-            "title": "$:/language/Buttons/Stamp/Hint",
-            "text": "Insert a preconfigured snippet of text"
-        },
-        "$:/language/Buttons/Stamp/New/Title": {
-            "title": "$:/language/Buttons/Stamp/New/Title",
-            "text": "Name as shown in menu"
-        },
-        "$:/language/Buttons/Stamp/New/Text": {
-            "title": "$:/language/Buttons/Stamp/New/Text",
-            "text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
-        },
-        "$:/language/Buttons/Strikethrough/Caption": {
-            "title": "$:/language/Buttons/Strikethrough/Caption",
-            "text": "strikethrough"
-        },
-        "$:/language/Buttons/Strikethrough/Hint": {
-            "title": "$:/language/Buttons/Strikethrough/Hint",
-            "text": "Apply strikethrough formatting to selection"
-        },
-        "$:/language/Buttons/Subscript/Caption": {
-            "title": "$:/language/Buttons/Subscript/Caption",
-            "text": "subscript"
-        },
-        "$:/language/Buttons/Subscript/Hint": {
-            "title": "$:/language/Buttons/Subscript/Hint",
-            "text": "Apply subscript formatting to selection"
-        },
-        "$:/language/Buttons/Superscript/Caption": {
-            "title": "$:/language/Buttons/Superscript/Caption",
-            "text": "superscript"
-        },
-        "$:/language/Buttons/Superscript/Hint": {
-            "title": "$:/language/Buttons/Superscript/Hint",
-            "text": "Apply superscript formatting to selection"
-        },
-        "$:/language/Buttons/Transcludify/Caption": {
-            "title": "$:/language/Buttons/Transcludify/Caption",
-            "text": "transclusion"
-        },
-        "$:/language/Buttons/Transcludify/Hint": {
-            "title": "$:/language/Buttons/Transcludify/Hint",
-            "text": "Wrap selection in curly brackets"
-        },
-        "$:/language/Buttons/Underline/Caption": {
-            "title": "$:/language/Buttons/Underline/Caption",
-            "text": "underline"
-        },
-        "$:/language/Buttons/Underline/Hint": {
-            "title": "$:/language/Buttons/Underline/Hint",
-            "text": "Apply underline formatting to selection"
-        },
-        "$:/language/ControlPanel/Advanced/Caption": {
-            "title": "$:/language/ControlPanel/Advanced/Caption",
-            "text": "Advanced"
-        },
-        "$:/language/ControlPanel/Advanced/Hint": {
-            "title": "$:/language/ControlPanel/Advanced/Hint",
-            "text": "Internal information about this TiddlyWiki"
-        },
-        "$:/language/ControlPanel/Appearance/Caption": {
-            "title": "$:/language/ControlPanel/Appearance/Caption",
-            "text": "Appearance"
-        },
-        "$:/language/ControlPanel/Appearance/Hint": {
-            "title": "$:/language/ControlPanel/Appearance/Hint",
-            "text": "Ways to customise the appearance of your TiddlyWiki."
-        },
-        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
-            "text": "Animation duration:"
-        },
-        "$:/language/ControlPanel/Basics/Caption": {
-            "title": "$:/language/ControlPanel/Basics/Caption",
-            "text": "Basics"
-        },
-        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
-            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
-            "text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering"
-        },
-        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
-            "text": "Default tiddlers:"
-        },
-        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
-            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
-            "text": "Choose which tiddlers are displayed at startup:"
-        },
-        "$:/language/ControlPanel/Basics/Language/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
-            "text": "Hello! Current language:"
-        },
-        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
-            "text": "Title of new journal tiddlers"
-        },
-        "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
-            "text": "Text for new journal tiddlers"
-        },
-        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
-            "text": "Tags for new journal tiddlers"
-        },
-        "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
-            "text": "Title of new tiddlers"
-        },
-        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
-            "text": "Number of overridden shadow tiddlers:"
-        },
-        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
-            "text": "Number of shadow tiddlers:"
-        },
-        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
-            "text": "Subtitle:"
-        },
-        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
-            "text": "Number of system tiddlers:"
-        },
-        "$:/language/ControlPanel/Basics/Tags/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
-            "text": "Number of tags:"
-        },
-        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
-            "text": "Number of tiddlers:"
-        },
-        "$:/language/ControlPanel/Basics/Title/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
-            "text": "Title of this ~TiddlyWiki:"
-        },
-        "$:/language/ControlPanel/Basics/Username/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
-            "text": "Username for signing edits:"
-        },
-        "$:/language/ControlPanel/Basics/Version/Prompt": {
-            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
-            "text": "~TiddlyWiki version:"
-        },
-        "$:/language/ControlPanel/EditorTypes/Caption": {
-            "title": "$:/language/ControlPanel/EditorTypes/Caption",
-            "text": "Editor Types"
-        },
-        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
-            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
-            "text": "Editor"
-        },
-        "$:/language/ControlPanel/EditorTypes/Hint": {
-            "title": "$:/language/ControlPanel/EditorTypes/Hint",
-            "text": "These tiddlers determine which editor is used to edit specific tiddler types."
-        },
-        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
-            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
-            "text": "Type"
-        },
-        "$:/language/ControlPanel/Info/Caption": {
-            "title": "$:/language/ControlPanel/Info/Caption",
-            "text": "Info"
-        },
-        "$:/language/ControlPanel/Info/Hint": {
-            "title": "$:/language/ControlPanel/Info/Hint",
-            "text": "Information about this TiddlyWiki"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
-            "text": "Type shortcut here"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
-            "text": "add shortcut"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Caption": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
-            "text": "Keyboard Shortcuts"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Hint": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
-            "text": "Manage keyboard shortcut assignments"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
-            "text": "No keyboard shortcuts assigned"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
-            "text": "remove keyboard shortcut"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
-            "text": "All platforms"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
-            "text": "Macintosh platform only"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
-            "text": "Non-Macintosh platforms only"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
-            "text": "Linux platform only"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
-            "text": "Non-Linux platforms only"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
-            "text": "Windows platform only"
-        },
-        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
-            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
-            "text": "Non-Windows platforms only"
-        },
-        "$:/language/ControlPanel/LoadedModules/Caption": {
-            "title": "$:/language/ControlPanel/LoadedModules/Caption",
-            "text": "Loaded Modules"
-        },
-        "$:/language/ControlPanel/LoadedModules/Hint": {
-            "title": "$:/language/ControlPanel/LoadedModules/Hint",
-            "text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
-        },
-        "$:/language/ControlPanel/Palette/Caption": {
-            "title": "$:/language/ControlPanel/Palette/Caption",
-            "text": "Palette"
-        },
-        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
-            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
-            "text": "clone"
-        },
-        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
-            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
-            "text": "It is recommended that you clone this shadow palette before editing it"
-        },
-        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
-            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
-            "text": "This shadow palette has been modified"
-        },
-        "$:/language/ControlPanel/Palette/Editor/Prompt": {
-            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
-            "text": "Editing"
-        },
-        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
-            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
-            "text": "reset"
-        },
-        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
-            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
-            "text": "hide editor"
-        },
-        "$:/language/ControlPanel/Palette/Prompt": {
-            "title": "$:/language/ControlPanel/Palette/Prompt",
-            "text": "Current palette:"
-        },
-        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
-            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
-            "text": "show editor"
-        },
-        "$:/language/ControlPanel/Parsing/Caption": {
-            "title": "$:/language/ControlPanel/Parsing/Caption",
-            "text": "Parsing"
-        },
-        "$:/language/ControlPanel/Parsing/Hint": {
-            "title": "$:/language/ControlPanel/Parsing/Hint",
-            "text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
-        },
-        "$:/language/ControlPanel/Parsing/Block/Caption": {
-            "title": "$:/language/ControlPanel/Parsing/Block/Caption",
-            "text": "Block Parse Rules"
-        },
-        "$:/language/ControlPanel/Parsing/Inline/Caption": {
-            "title": "$:/language/ControlPanel/Parsing/Inline/Caption",
-            "text": "Inline Parse Rules"
-        },
-        "$:/language/ControlPanel/Parsing/Pragma/Caption": {
-            "title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
-            "text": "Pragma Parse Rules"
-        },
-        "$:/language/ControlPanel/Plugins/Add/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
-            "text": "Get more plugins"
-        },
-        "$:/language/ControlPanel/Plugins/Add/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
-            "text": "Install plugins from the official library"
-        },
-        "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
-            "text": "This plugin is already installed at version <$text text=<>/>"
-        },
-        "$:/language/ControlPanel/Plugins/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Caption",
-            "text": "Plugins"
-        },
-        "$:/language/ControlPanel/Plugins/Disable/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
-            "text": "disable"
-        },
-        "$:/language/ControlPanel/Plugins/Disable/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
-            "text": "Disable this plugin when reloading page"
-        },
-        "$:/language/ControlPanel/Plugins/Disabled/Status": {
-            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
-            "text": "(disabled)"
-        },
-        "$:/language/ControlPanel/Plugins/Empty/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
-            "text": "None"
-        },
-        "$:/language/ControlPanel/Plugins/Enable/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
-            "text": "enable"
-        },
-        "$:/language/ControlPanel/Plugins/Enable/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
-            "text": "Enable this plugin when reloading page"
-        },
-        "$:/language/ControlPanel/Plugins/Install/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Install/Caption",
-            "text": "install"
-        },
-        "$:/language/ControlPanel/Plugins/Installed/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
-            "text": "Currently installed plugins:"
-        },
-        "$:/language/ControlPanel/Plugins/Languages/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
-            "text": "Languages"
-        },
-        "$:/language/ControlPanel/Plugins/Languages/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
-            "text": "Language pack plugins"
-        },
-        "$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
-            "text": "No ''\"<$text text=<>/>\"'' found"
-        },
-        "$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
-            "text": "This plugin is not currently installed"
-        },
-        "$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
-            "title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
-            "text": "open plugin library"
-        },
-        "$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
-            "title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
-            "text": "close plugin library"
-        },
-        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
-            "text": "Plugins"
-        },
-        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
-            "text": "Plugins"
-        },
-        "$:/language/ControlPanel/Plugins/Reinstall/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
-            "text": "reinstall"
-        },
-        "$:/language/ControlPanel/Plugins/Themes/Caption": {
-            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
-            "text": "Themes"
-        },
-        "$:/language/ControlPanel/Plugins/Themes/Hint": {
-            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
-            "text": "Theme plugins"
-        },
-        "$:/language/ControlPanel/Saving/Caption": {
-            "title": "$:/language/ControlPanel/Saving/Caption",
-            "text": "Saving"
-        },
-        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
-            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
-            "text": "Permit automatic saving for the download saver"
-        },
-        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
-            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
-            "text": "Enable Autosave for Download Saver"
-        },
-        "$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
-            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
-            "text": "Download Saver"
-        },
-        "$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
-            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
-            "text": "These settings apply to the HTML5-compatible download saver"
-        },
-        "$:/language/ControlPanel/Saving/General/Caption": {
-            "title": "$:/language/ControlPanel/Saving/General/Caption",
-            "text": "General"
-        },
-        "$:/language/ControlPanel/Saving/General/Hint": {
-            "title": "$:/language/ControlPanel/Saving/General/Hint",
-            "text": "These settings apply to all the loaded savers"
-        },
-        "$:/language/ControlPanel/Saving/Hint": {
-            "title": "$:/language/ControlPanel/Saving/Hint",
-            "text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
-            "text": "Advanced Settings"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
-            "text": "Backup Directory"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
-            "text": "Backups"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
-            "text": "~TiddlySpot Saver"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
-            "text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
-            "text": "Upload Filename"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
-            "text": "~TiddlySpot"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
-            "text": "//The server URL defaults to `http://.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
-            "text": "Password"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
-            "text": "Server URL"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
-            "text": "Upload Directory"
-        },
-        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
-            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
-            "text": "Wiki Name"
-        },
-        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
-            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
-            "text": "Autosave"
-        },
-        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
-            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
-            "text": "Do not save changes automatically"
-        },
-        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
-            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
-            "text": "Save changes automatically"
-        },
-        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
-            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
-            "text": "Attempt to automatically save changes during editing when using a supporting saver"
-        },
-        "$:/language/ControlPanel/Settings/CamelCase/Caption": {
-            "title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
-            "text": "Camel Case Wiki Links"
-        },
-        "$:/language/ControlPanel/Settings/CamelCase/Hint": {
-            "title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
-            "text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
-        },
-        "$:/language/ControlPanel/Settings/CamelCase/Description": {
-            "title": "$:/language/ControlPanel/Settings/CamelCase/Description",
-            "text": "Enable automatic ~CamelCase linking"
-        },
-        "$:/language/ControlPanel/Settings/Caption": {
-            "title": "$:/language/ControlPanel/Settings/Caption",
-            "text": "Settings"
-        },
-        "$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
-            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
-            "text": "Editor Toolbar"
-        },
-        "$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
-            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
-            "text": "Enable or disable the editor toolbar:"
-        },
-        "$:/language/ControlPanel/Settings/EditorToolbar/Description": {
-            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
-            "text": "Show editor toolbar"
-        },
-        "$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
-            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
-            "text": "Tiddler Info Panel Mode"
-        },
-        "$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
-            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
-            "text": "Control when the tiddler info panel closes:"
-        },
-        "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
-            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
-            "text": "Tiddler info panel closes automatically"
-        },
-        "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
-            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
-            "text": "Tiddler info panel stays open until explicitly closed"
-        },
-        "$:/language/ControlPanel/Settings/Hint": {
-            "title": "$:/language/ControlPanel/Settings/Hint",
-            "text": "These settings let you customise the behaviour of TiddlyWiki."
-        },
-        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
-            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
-            "text": "Navigation Address Bar"
-        },
-        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
-            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
-            "text": "Behaviour of the browser address bar when navigating to a tiddler:"
-        },
-        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
-            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
-            "text": "Do not update the address bar"
-        },
-        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
-            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
-            "text": "Include the target tiddler"
-        },
-        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
-            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
-            "text": "Include the target tiddler and the current story sequence"
-        },
-        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
-            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
-            "text": "Navigation History"
-        },
-        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
-            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
-            "text": "Update browser history when navigating to a tiddler:"
-        },
-        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
-            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
-            "text": "Do not update history"
-        },
-        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
-            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
-            "text": "Update history"
-        },
-        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
-            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
-            "text": "Permalink/permaview Mode"
-        },
-        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
-            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
-            "text": "Choose how permalink/permaview is handled:"
-        },
-        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
-            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
-            "text": "Copy permalink/permaview URL to clipboard"
-        },
-        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
-            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
-            "text": "Update address bar with permalink/permaview URL"
-        },
-        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
-            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
-            "text": "Performance Instrumentation"
-        },
-        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
-            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
-            "text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
-        },
-        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
-            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
-            "text": "Enable performance instrumentation"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
-            "text": "Toolbar Button Style"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
-            "text": "Choose the style for toolbar buttons:"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
-            "text": "Borderless"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
-            "text": "Boxed"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
-            "text": "Rounded"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
-            "text": "Toolbar Buttons"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
-            "text": "Default toolbar button appearance:"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
-            "text": "Include icon"
-        },
-        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
-            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
-            "text": "Include text"
-        },
-        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
-            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
-            "text": "Default Sidebar Tab"
-        },
-        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
-            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
-            "text": "Specify which sidebar tab is displayed by default"
-        },
-        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
-            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
-            "text": "Default More Sidebar Tab"
-        },
-        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
-            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
-            "text": "Specify which More sidebar tab is displayed by default"
-        },
-        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
-            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
-            "text": "Tiddler Opening Behaviour"
-        },
-        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
-            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
-            "text": "Navigation from //within// the story river"
-        },
-        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
-            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
-            "text": "Navigation from //outside// the story river"
-        },
-        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
-            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
-            "text": "Open above the current tiddler"
-        },
-        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
-            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
-            "text": "Open below the current tiddler"
-        },
-        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
-            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
-            "text": "Open at the top of the story river"
-        },
-        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
-            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
-            "text": "Open at the bottom of the story river"
-        },
-        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
-            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
-            "text": "Tiddler Titles"
-        },
-        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
-            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
-            "text": "Optionally display tiddler titles as links"
-        },
-        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
-            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
-            "text": "Do not display tiddler titles as links"
-        },
-        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
-            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
-            "text": "Display tiddler titles as links"
-        },
-        "$:/language/ControlPanel/Settings/MissingLinks/Caption": {
-            "title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
-            "text": "Wiki Links"
-        },
-        "$:/language/ControlPanel/Settings/MissingLinks/Hint": {
-            "title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
-            "text": "Choose whether to link to tiddlers that do not exist yet"
-        },
-        "$:/language/ControlPanel/Settings/MissingLinks/Description": {
-            "title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
-            "text": "Enable links to missing tiddlers"
-        },
-        "$:/language/ControlPanel/StoryView/Caption": {
-            "title": "$:/language/ControlPanel/StoryView/Caption",
-            "text": "Story View"
-        },
-        "$:/language/ControlPanel/StoryView/Prompt": {
-            "title": "$:/language/ControlPanel/StoryView/Prompt",
-            "text": "Current view:"
-        },
-        "$:/language/ControlPanel/Stylesheets/Caption": {
-            "title": "$:/language/ControlPanel/Stylesheets/Caption",
-            "text": "Stylesheets"
-        },
-        "$:/language/ControlPanel/Stylesheets/Expand/Caption": {
-            "title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
-            "text": "Expand All"
-        },
-        "$:/language/ControlPanel/Stylesheets/Hint": {
-            "title": "$:/language/ControlPanel/Stylesheets/Hint",
-            "text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <>"
-        },
-        "$:/language/ControlPanel/Stylesheets/Restore/Caption": {
-            "title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
-            "text": "Restore"
-        },
-        "$:/language/ControlPanel/Theme/Caption": {
-            "title": "$:/language/ControlPanel/Theme/Caption",
-            "text": "Theme"
-        },
-        "$:/language/ControlPanel/Theme/Prompt": {
-            "title": "$:/language/ControlPanel/Theme/Prompt",
-            "text": "Current theme:"
-        },
-        "$:/language/ControlPanel/TiddlerFields/Caption": {
-            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
-            "text": "Tiddler Fields"
-        },
-        "$:/language/ControlPanel/TiddlerFields/Hint": {
-            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
-            "text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
-        },
-        "$:/language/ControlPanel/Toolbars/Caption": {
-            "title": "$:/language/ControlPanel/Toolbars/Caption",
-            "text": "Toolbars"
-        },
-        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
-            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
-            "text": "Edit Toolbar"
-        },
-        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
-            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
-            "text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
-        },
-        "$:/language/ControlPanel/Toolbars/Hint": {
-            "title": "$:/language/ControlPanel/Toolbars/Hint",
-            "text": "Select which toolbar buttons are displayed"
-        },
-        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
-            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
-            "text": "Page Toolbar"
-        },
-        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
-            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
-            "text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
-        },
-        "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
-            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
-            "text": "Editor Toolbar"
-        },
-        "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
-            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
-            "text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
-        },
-        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
-            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
-            "text": "View Toolbar"
-        },
-        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
-            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
-            "text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
-        },
-        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
-            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
-            "text": "Download full wiki"
-        },
-        "$:/language/Date/DaySuffix/1": {
-            "title": "$:/language/Date/DaySuffix/1",
-            "text": "st"
-        },
-        "$:/language/Date/DaySuffix/2": {
-            "title": "$:/language/Date/DaySuffix/2",
-            "text": "nd"
-        },
-        "$:/language/Date/DaySuffix/3": {
-            "title": "$:/language/Date/DaySuffix/3",
-            "text": "rd"
-        },
-        "$:/language/Date/DaySuffix/4": {
-            "title": "$:/language/Date/DaySuffix/4",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/5": {
-            "title": "$:/language/Date/DaySuffix/5",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/6": {
-            "title": "$:/language/Date/DaySuffix/6",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/7": {
-            "title": "$:/language/Date/DaySuffix/7",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/8": {
-            "title": "$:/language/Date/DaySuffix/8",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/9": {
-            "title": "$:/language/Date/DaySuffix/9",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/10": {
-            "title": "$:/language/Date/DaySuffix/10",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/11": {
-            "title": "$:/language/Date/DaySuffix/11",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/12": {
-            "title": "$:/language/Date/DaySuffix/12",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/13": {
-            "title": "$:/language/Date/DaySuffix/13",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/14": {
-            "title": "$:/language/Date/DaySuffix/14",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/15": {
-            "title": "$:/language/Date/DaySuffix/15",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/16": {
-            "title": "$:/language/Date/DaySuffix/16",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/17": {
-            "title": "$:/language/Date/DaySuffix/17",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/18": {
-            "title": "$:/language/Date/DaySuffix/18",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/19": {
-            "title": "$:/language/Date/DaySuffix/19",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/20": {
-            "title": "$:/language/Date/DaySuffix/20",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/21": {
-            "title": "$:/language/Date/DaySuffix/21",
-            "text": "st"
-        },
-        "$:/language/Date/DaySuffix/22": {
-            "title": "$:/language/Date/DaySuffix/22",
-            "text": "nd"
-        },
-        "$:/language/Date/DaySuffix/23": {
-            "title": "$:/language/Date/DaySuffix/23",
-            "text": "rd"
-        },
-        "$:/language/Date/DaySuffix/24": {
-            "title": "$:/language/Date/DaySuffix/24",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/25": {
-            "title": "$:/language/Date/DaySuffix/25",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/26": {
-            "title": "$:/language/Date/DaySuffix/26",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/27": {
-            "title": "$:/language/Date/DaySuffix/27",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/28": {
-            "title": "$:/language/Date/DaySuffix/28",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/29": {
-            "title": "$:/language/Date/DaySuffix/29",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/30": {
-            "title": "$:/language/Date/DaySuffix/30",
-            "text": "th"
-        },
-        "$:/language/Date/DaySuffix/31": {
-            "title": "$:/language/Date/DaySuffix/31",
-            "text": "st"
-        },
-        "$:/language/Date/Long/Day/0": {
-            "title": "$:/language/Date/Long/Day/0",
-            "text": "Sunday"
-        },
-        "$:/language/Date/Long/Day/1": {
-            "title": "$:/language/Date/Long/Day/1",
-            "text": "Monday"
-        },
-        "$:/language/Date/Long/Day/2": {
-            "title": "$:/language/Date/Long/Day/2",
-            "text": "Tuesday"
-        },
-        "$:/language/Date/Long/Day/3": {
-            "title": "$:/language/Date/Long/Day/3",
-            "text": "Wednesday"
-        },
-        "$:/language/Date/Long/Day/4": {
-            "title": "$:/language/Date/Long/Day/4",
-            "text": "Thursday"
-        },
-        "$:/language/Date/Long/Day/5": {
-            "title": "$:/language/Date/Long/Day/5",
-            "text": "Friday"
-        },
-        "$:/language/Date/Long/Day/6": {
-            "title": "$:/language/Date/Long/Day/6",
-            "text": "Saturday"
-        },
-        "$:/language/Date/Long/Month/1": {
-            "title": "$:/language/Date/Long/Month/1",
-            "text": "January"
-        },
-        "$:/language/Date/Long/Month/2": {
-            "title": "$:/language/Date/Long/Month/2",
-            "text": "February"
-        },
-        "$:/language/Date/Long/Month/3": {
-            "title": "$:/language/Date/Long/Month/3",
-            "text": "March"
-        },
-        "$:/language/Date/Long/Month/4": {
-            "title": "$:/language/Date/Long/Month/4",
-            "text": "April"
-        },
-        "$:/language/Date/Long/Month/5": {
-            "title": "$:/language/Date/Long/Month/5",
-            "text": "May"
-        },
-        "$:/language/Date/Long/Month/6": {
-            "title": "$:/language/Date/Long/Month/6",
-            "text": "June"
-        },
-        "$:/language/Date/Long/Month/7": {
-            "title": "$:/language/Date/Long/Month/7",
-            "text": "July"
-        },
-        "$:/language/Date/Long/Month/8": {
-            "title": "$:/language/Date/Long/Month/8",
-            "text": "August"
-        },
-        "$:/language/Date/Long/Month/9": {
-            "title": "$:/language/Date/Long/Month/9",
-            "text": "September"
-        },
-        "$:/language/Date/Long/Month/10": {
-            "title": "$:/language/Date/Long/Month/10",
-            "text": "October"
-        },
-        "$:/language/Date/Long/Month/11": {
-            "title": "$:/language/Date/Long/Month/11",
-            "text": "November"
-        },
-        "$:/language/Date/Long/Month/12": {
-            "title": "$:/language/Date/Long/Month/12",
-            "text": "December"
-        },
-        "$:/language/Date/Period/am": {
-            "title": "$:/language/Date/Period/am",
-            "text": "am"
-        },
-        "$:/language/Date/Period/pm": {
-            "title": "$:/language/Date/Period/pm",
-            "text": "pm"
-        },
-        "$:/language/Date/Short/Day/0": {
-            "title": "$:/language/Date/Short/Day/0",
-            "text": "Sun"
-        },
-        "$:/language/Date/Short/Day/1": {
-            "title": "$:/language/Date/Short/Day/1",
-            "text": "Mon"
-        },
-        "$:/language/Date/Short/Day/2": {
-            "title": "$:/language/Date/Short/Day/2",
-            "text": "Tue"
-        },
-        "$:/language/Date/Short/Day/3": {
-            "title": "$:/language/Date/Short/Day/3",
-            "text": "Wed"
-        },
-        "$:/language/Date/Short/Day/4": {
-            "title": "$:/language/Date/Short/Day/4",
-            "text": "Thu"
-        },
-        "$:/language/Date/Short/Day/5": {
-            "title": "$:/language/Date/Short/Day/5",
-            "text": "Fri"
-        },
-        "$:/language/Date/Short/Day/6": {
-            "title": "$:/language/Date/Short/Day/6",
-            "text": "Sat"
-        },
-        "$:/language/Date/Short/Month/1": {
-            "title": "$:/language/Date/Short/Month/1",
-            "text": "Jan"
-        },
-        "$:/language/Date/Short/Month/2": {
-            "title": "$:/language/Date/Short/Month/2",
-            "text": "Feb"
-        },
-        "$:/language/Date/Short/Month/3": {
-            "title": "$:/language/Date/Short/Month/3",
-            "text": "Mar"
-        },
-        "$:/language/Date/Short/Month/4": {
-            "title": "$:/language/Date/Short/Month/4",
-            "text": "Apr"
-        },
-        "$:/language/Date/Short/Month/5": {
-            "title": "$:/language/Date/Short/Month/5",
-            "text": "May"
-        },
-        "$:/language/Date/Short/Month/6": {
-            "title": "$:/language/Date/Short/Month/6",
-            "text": "Jun"
-        },
-        "$:/language/Date/Short/Month/7": {
-            "title": "$:/language/Date/Short/Month/7",
-            "text": "Jul"
-        },
-        "$:/language/Date/Short/Month/8": {
-            "title": "$:/language/Date/Short/Month/8",
-            "text": "Aug"
-        },
-        "$:/language/Date/Short/Month/9": {
-            "title": "$:/language/Date/Short/Month/9",
-            "text": "Sep"
-        },
-        "$:/language/Date/Short/Month/10": {
-            "title": "$:/language/Date/Short/Month/10",
-            "text": "Oct"
-        },
-        "$:/language/Date/Short/Month/11": {
-            "title": "$:/language/Date/Short/Month/11",
-            "text": "Nov"
-        },
-        "$:/language/Date/Short/Month/12": {
-            "title": "$:/language/Date/Short/Month/12",
-            "text": "Dec"
-        },
-        "$:/language/RelativeDate/Future/Days": {
-            "title": "$:/language/RelativeDate/Future/Days",
-            "text": "<> days from now"
-        },
-        "$:/language/RelativeDate/Future/Hours": {
-            "title": "$:/language/RelativeDate/Future/Hours",
-            "text": "<> hours from now"
-        },
-        "$:/language/RelativeDate/Future/Minutes": {
-            "title": "$:/language/RelativeDate/Future/Minutes",
-            "text": "<> minutes from now"
-        },
-        "$:/language/RelativeDate/Future/Months": {
-            "title": "$:/language/RelativeDate/Future/Months",
-            "text": "<> months from now"
-        },
-        "$:/language/RelativeDate/Future/Second": {
-            "title": "$:/language/RelativeDate/Future/Second",
-            "text": "1 second from now"
-        },
-        "$:/language/RelativeDate/Future/Seconds": {
-            "title": "$:/language/RelativeDate/Future/Seconds",
-            "text": "<> seconds from now"
-        },
-        "$:/language/RelativeDate/Future/Years": {
-            "title": "$:/language/RelativeDate/Future/Years",
-            "text": "<> years from now"
-        },
-        "$:/language/RelativeDate/Past/Days": {
-            "title": "$:/language/RelativeDate/Past/Days",
-            "text": "<> days ago"
-        },
-        "$:/language/RelativeDate/Past/Hours": {
-            "title": "$:/language/RelativeDate/Past/Hours",
-            "text": "<> hours ago"
-        },
-        "$:/language/RelativeDate/Past/Minutes": {
-            "title": "$:/language/RelativeDate/Past/Minutes",
-            "text": "<> minutes ago"
-        },
-        "$:/language/RelativeDate/Past/Months": {
-            "title": "$:/language/RelativeDate/Past/Months",
-            "text": "<> months ago"
-        },
-        "$:/language/RelativeDate/Past/Second": {
-            "title": "$:/language/RelativeDate/Past/Second",
-            "text": "1 second ago"
-        },
-        "$:/language/RelativeDate/Past/Seconds": {
-            "title": "$:/language/RelativeDate/Past/Seconds",
-            "text": "<> seconds ago"
-        },
-        "$:/language/RelativeDate/Past/Years": {
-            "title": "$:/language/RelativeDate/Past/Years",
-            "text": "<> years ago"
-        },
-        "$:/language/Docs/ModuleTypes/allfilteroperator": {
-            "title": "$:/language/Docs/ModuleTypes/allfilteroperator",
-            "text": "A sub-operator for the ''all'' filter operator."
-        },
-        "$:/language/Docs/ModuleTypes/animation": {
-            "title": "$:/language/Docs/ModuleTypes/animation",
-            "text": "Animations that may be used with the RevealWidget."
-        },
-        "$:/language/Docs/ModuleTypes/authenticator": {
-            "title": "$:/language/Docs/ModuleTypes/authenticator",
-            "text": "Defines how requests are authenticated by the built-in HTTP server."
-        },
-        "$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
-            "title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
-            "text": "A bitmap editor toolbar operation."
-        },
-        "$:/language/Docs/ModuleTypes/command": {
-            "title": "$:/language/Docs/ModuleTypes/command",
-            "text": "Commands that can be executed under Node.js."
-        },
-        "$:/language/Docs/ModuleTypes/config": {
-            "title": "$:/language/Docs/ModuleTypes/config",
-            "text": "Data to be inserted into `$tw.config`."
-        },
-        "$:/language/Docs/ModuleTypes/filteroperator": {
-            "title": "$:/language/Docs/ModuleTypes/filteroperator",
-            "text": "Individual filter operator methods."
-        },
-        "$:/language/Docs/ModuleTypes/global": {
-            "title": "$:/language/Docs/ModuleTypes/global",
-            "text": "Global data to be inserted into `$tw`."
-        },
-        "$:/language/Docs/ModuleTypes/info": {
-            "title": "$:/language/Docs/ModuleTypes/info",
-            "text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
-        },
-        "$:/language/Docs/ModuleTypes/isfilteroperator": {
-            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
-            "text": "Operands for the ''is'' filter operator."
-        },
-        "$:/language/Docs/ModuleTypes/library": {
-            "title": "$:/language/Docs/ModuleTypes/library",
-            "text": "Generic module type for general purpose JavaScript modules."
-        },
-        "$:/language/Docs/ModuleTypes/macro": {
-            "title": "$:/language/Docs/ModuleTypes/macro",
-            "text": "JavaScript macro definitions."
-        },
-        "$:/language/Docs/ModuleTypes/parser": {
-            "title": "$:/language/Docs/ModuleTypes/parser",
-            "text": "Parsers for different content types."
-        },
-        "$:/language/Docs/ModuleTypes/route": {
-            "title": "$:/language/Docs/ModuleTypes/route",
-            "text": "Defines how individual URL patterns are handled by the built-in HTTP server."
-        },
-        "$:/language/Docs/ModuleTypes/saver": {
-            "title": "$:/language/Docs/ModuleTypes/saver",
-            "text": "Savers handle different methods for saving files from the browser."
-        },
-        "$:/language/Docs/ModuleTypes/startup": {
-            "title": "$:/language/Docs/ModuleTypes/startup",
-            "text": "Startup functions."
-        },
-        "$:/language/Docs/ModuleTypes/storyview": {
-            "title": "$:/language/Docs/ModuleTypes/storyview",
-            "text": "Story views customise the animation and behaviour of list widgets."
-        },
-        "$:/language/Docs/ModuleTypes/texteditoroperation": {
-            "title": "$:/language/Docs/ModuleTypes/texteditoroperation",
-            "text": "A text editor toolbar operation."
-        },
-        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
-            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
-            "text": "Converts different content types into tiddlers."
-        },
-        "$:/language/Docs/ModuleTypes/tiddlerfield": {
-            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
-            "text": "Defines the behaviour of an individual tiddler field."
-        },
-        "$:/language/Docs/ModuleTypes/tiddlermethod": {
-            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
-            "text": "Adds methods to the `$tw.Tiddler` prototype."
-        },
-        "$:/language/Docs/ModuleTypes/upgrader": {
-            "title": "$:/language/Docs/ModuleTypes/upgrader",
-            "text": "Applies upgrade processing to tiddlers during an upgrade/import."
-        },
-        "$:/language/Docs/ModuleTypes/utils": {
-            "title": "$:/language/Docs/ModuleTypes/utils",
-            "text": "Adds methods to `$tw.utils`."
-        },
-        "$:/language/Docs/ModuleTypes/utils-node": {
-            "title": "$:/language/Docs/ModuleTypes/utils-node",
-            "text": "Adds Node.js-specific methods to `$tw.utils`."
-        },
-        "$:/language/Docs/ModuleTypes/widget": {
-            "title": "$:/language/Docs/ModuleTypes/widget",
-            "text": "Widgets encapsulate DOM rendering and refreshing."
-        },
-        "$:/language/Docs/ModuleTypes/wikimethod": {
-            "title": "$:/language/Docs/ModuleTypes/wikimethod",
-            "text": "Adds methods to `$tw.Wiki`."
-        },
-        "$:/language/Docs/ModuleTypes/wikirule": {
-            "title": "$:/language/Docs/ModuleTypes/wikirule",
-            "text": "Individual parser rules for the main WikiText parser."
-        },
-        "$:/language/Docs/PaletteColours/alert-background": {
-            "title": "$:/language/Docs/PaletteColours/alert-background",
-            "text": "Alert background"
-        },
-        "$:/language/Docs/PaletteColours/alert-border": {
-            "title": "$:/language/Docs/PaletteColours/alert-border",
-            "text": "Alert border"
-        },
-        "$:/language/Docs/PaletteColours/alert-highlight": {
-            "title": "$:/language/Docs/PaletteColours/alert-highlight",
-            "text": "Alert highlight"
-        },
-        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
-            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
-            "text": "Alert muted foreground"
-        },
-        "$:/language/Docs/PaletteColours/background": {
-            "title": "$:/language/Docs/PaletteColours/background",
-            "text": "General background"
-        },
-        "$:/language/Docs/PaletteColours/blockquote-bar": {
-            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
-            "text": "Blockquote bar"
-        },
-        "$:/language/Docs/PaletteColours/button-background": {
-            "title": "$:/language/Docs/PaletteColours/button-background",
-            "text": "Default button background"
-        },
-        "$:/language/Docs/PaletteColours/button-border": {
-            "title": "$:/language/Docs/PaletteColours/button-border",
-            "text": "Default button border"
-        },
-        "$:/language/Docs/PaletteColours/button-foreground": {
-            "title": "$:/language/Docs/PaletteColours/button-foreground",
-            "text": "Default button foreground"
-        },
-        "$:/language/Docs/PaletteColours/dirty-indicator": {
-            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
-            "text": "Unsaved changes indicator"
-        },
-        "$:/language/Docs/PaletteColours/code-background": {
-            "title": "$:/language/Docs/PaletteColours/code-background",
-            "text": "Code background"
-        },
-        "$:/language/Docs/PaletteColours/code-border": {
-            "title": "$:/language/Docs/PaletteColours/code-border",
-            "text": "Code border"
-        },
-        "$:/language/Docs/PaletteColours/code-foreground": {
-            "title": "$:/language/Docs/PaletteColours/code-foreground",
-            "text": "Code foreground"
-        },
-        "$:/language/Docs/PaletteColours/download-background": {
-            "title": "$:/language/Docs/PaletteColours/download-background",
-            "text": "Download button background"
-        },
-        "$:/language/Docs/PaletteColours/download-foreground": {
-            "title": "$:/language/Docs/PaletteColours/download-foreground",
-            "text": "Download button foreground"
-        },
-        "$:/language/Docs/PaletteColours/dragger-background": {
-            "title": "$:/language/Docs/PaletteColours/dragger-background",
-            "text": "Dragger background"
-        },
-        "$:/language/Docs/PaletteColours/dragger-foreground": {
-            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
-            "text": "Dragger foreground"
-        },
-        "$:/language/Docs/PaletteColours/dropdown-background": {
-            "title": "$:/language/Docs/PaletteColours/dropdown-background",
-            "text": "Dropdown background"
-        },
-        "$:/language/Docs/PaletteColours/dropdown-border": {
-            "title": "$:/language/Docs/PaletteColours/dropdown-border",
-            "text": "Dropdown border"
-        },
-        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
-            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
-            "text": "Dropdown tab background for selected tabs"
-        },
-        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
-            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
-            "text": "Dropdown tab background"
-        },
-        "$:/language/Docs/PaletteColours/dropzone-background": {
-            "title": "$:/language/Docs/PaletteColours/dropzone-background",
-            "text": "Dropzone background"
-        },
-        "$:/language/Docs/PaletteColours/external-link-background-hover": {
-            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
-            "text": "External link background hover"
-        },
-        "$:/language/Docs/PaletteColours/external-link-background-visited": {
-            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
-            "text": "External link background visited"
-        },
-        "$:/language/Docs/PaletteColours/external-link-background": {
-            "title": "$:/language/Docs/PaletteColours/external-link-background",
-            "text": "External link background"
-        },
-        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
-            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
-            "text": "External link foreground hover"
-        },
-        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
-            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
-            "text": "External link foreground visited"
-        },
-        "$:/language/Docs/PaletteColours/external-link-foreground": {
-            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
-            "text": "External link foreground"
-        },
-        "$:/language/Docs/PaletteColours/foreground": {
-            "title": "$:/language/Docs/PaletteColours/foreground",
-            "text": "General foreground"
-        },
-        "$:/language/Docs/PaletteColours/message-background": {
-            "title": "$:/language/Docs/PaletteColours/message-background",
-            "text": "Message box background"
-        },
-        "$:/language/Docs/PaletteColours/message-border": {
-            "title": "$:/language/Docs/PaletteColours/message-border",
-            "text": "Message box border"
-        },
-        "$:/language/Docs/PaletteColours/message-foreground": {
-            "title": "$:/language/Docs/PaletteColours/message-foreground",
-            "text": "Message box foreground"
-        },
-        "$:/language/Docs/PaletteColours/modal-backdrop": {
-            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
-            "text": "Modal backdrop"
-        },
-        "$:/language/Docs/PaletteColours/modal-background": {
-            "title": "$:/language/Docs/PaletteColours/modal-background",
-            "text": "Modal background"
-        },
-        "$:/language/Docs/PaletteColours/modal-border": {
-            "title": "$:/language/Docs/PaletteColours/modal-border",
-            "text": "Modal border"
-        },
-        "$:/language/Docs/PaletteColours/modal-footer-background": {
-            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
-            "text": "Modal footer background"
-        },
-        "$:/language/Docs/PaletteColours/modal-footer-border": {
-            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
-            "text": "Modal footer border"
-        },
-        "$:/language/Docs/PaletteColours/modal-header-border": {
-            "title": "$:/language/Docs/PaletteColours/modal-header-border",
-            "text": "Modal header border"
-        },
-        "$:/language/Docs/PaletteColours/muted-foreground": {
-            "title": "$:/language/Docs/PaletteColours/muted-foreground",
-            "text": "General muted foreground"
-        },
-        "$:/language/Docs/PaletteColours/notification-background": {
-            "title": "$:/language/Docs/PaletteColours/notification-background",
-            "text": "Notification background"
-        },
-        "$:/language/Docs/PaletteColours/notification-border": {
-            "title": "$:/language/Docs/PaletteColours/notification-border",
-            "text": "Notification border"
-        },
-        "$:/language/Docs/PaletteColours/page-background": {
-            "title": "$:/language/Docs/PaletteColours/page-background",
-            "text": "Page background"
-        },
-        "$:/language/Docs/PaletteColours/pre-background": {
-            "title": "$:/language/Docs/PaletteColours/pre-background",
-            "text": "Preformatted code background"
-        },
-        "$:/language/Docs/PaletteColours/pre-border": {
-            "title": "$:/language/Docs/PaletteColours/pre-border",
-            "text": "Preformatted code border"
-        },
-        "$:/language/Docs/PaletteColours/primary": {
-            "title": "$:/language/Docs/PaletteColours/primary",
-            "text": "General primary"
-        },
-        "$:/language/Docs/PaletteColours/select-tag-background": {
-            "title": "$:/language/Docs/PaletteColours/select-tag-background",
-            "text": "`` element text"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
-            "text": "Sidebar button foreground"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
-            "text": "Sidebar controls foreground hover"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
-            "text": "Sidebar controls foreground"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
-            "text": "Sidebar foreground shadow"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-foreground": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
-            "text": "Sidebar foreground"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
-            "text": "Sidebar muted foreground hover"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
-            "text": "Sidebar muted foreground"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
-            "text": "Sidebar tab background for selected tabs"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
-            "text": "Sidebar tab background"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
-            "text": "Sidebar tab border for selected tabs"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
-            "text": "Sidebar tab border"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
-            "text": "Sidebar tab divider"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
-            "text": "Sidebar tab foreground for selected tabs"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
-            "text": "Sidebar tab foreground"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
-            "text": "Sidebar tiddler link foreground hover"
-        },
-        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
-            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
-            "text": "Sidebar tiddler link foreground"
-        },
-        "$:/language/Docs/PaletteColours/site-title-foreground": {
-            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
-            "text": "Site title foreground"
-        },
-        "$:/language/Docs/PaletteColours/static-alert-foreground": {
-            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
-            "text": "Static alert foreground"
-        },
-        "$:/language/Docs/PaletteColours/tab-background-selected": {
-            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
-            "text": "Tab background for selected tabs"
-        },
-        "$:/language/Docs/PaletteColours/tab-background": {
-            "title": "$:/language/Docs/PaletteColours/tab-background",
-            "text": "Tab background"
-        },
-        "$:/language/Docs/PaletteColours/tab-border-selected": {
-            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
-            "text": "Tab border for selected tabs"
-        },
-        "$:/language/Docs/PaletteColours/tab-border": {
-            "title": "$:/language/Docs/PaletteColours/tab-border",
-            "text": "Tab border"
-        },
-        "$:/language/Docs/PaletteColours/tab-divider": {
-            "title": "$:/language/Docs/PaletteColours/tab-divider",
-            "text": "Tab divider"
-        },
-        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
-            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
-            "text": "Tab foreground for selected tabs"
-        },
-        "$:/language/Docs/PaletteColours/tab-foreground": {
-            "title": "$:/language/Docs/PaletteColours/tab-foreground",
-            "text": "Tab foreground"
-        },
-        "$:/language/Docs/PaletteColours/table-border": {
-            "title": "$:/language/Docs/PaletteColours/table-border",
-            "text": "Table border"
-        },
-        "$:/language/Docs/PaletteColours/table-footer-background": {
-            "title": "$:/language/Docs/PaletteColours/table-footer-background",
-            "text": "Table footer background"
-        },
-        "$:/language/Docs/PaletteColours/table-header-background": {
-            "title": "$:/language/Docs/PaletteColours/table-header-background",
-            "text": "Table header background"
-        },
-        "$:/language/Docs/PaletteColours/tag-background": {
-            "title": "$:/language/Docs/PaletteColours/tag-background",
-            "text": "Tag background"
-        },
-        "$:/language/Docs/PaletteColours/tag-foreground": {
-            "title": "$:/language/Docs/PaletteColours/tag-foreground",
-            "text": "Tag foreground"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-background": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-background",
-            "text": "Tiddler background"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-border": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-border",
-            "text": "Tiddler border"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
-            "text": "Tiddler controls foreground hover"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
-            "text": "Tiddler controls foreground for selected controls"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
-            "text": "Tiddler controls foreground"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
-            "text": "Tiddler editor background"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
-            "text": "Tiddler editor border image"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
-            "text": "Tiddler editor border"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
-            "text": "Tiddler editor background for even fields"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
-            "text": "Tiddler editor background for odd fields"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-info-background": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
-            "text": "Tiddler info panel background"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-info-border": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
-            "text": "Tiddler info panel border"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
-            "text": "Tiddler info panel tab background"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-link-background": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
-            "text": "Tiddler link background"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
-            "text": "Tiddler link foreground"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
-            "text": "Tiddler subtitle foreground"
-        },
-        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
-            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
-            "text": "Tiddler title foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-new-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
-            "text": "Toolbar 'new tiddler' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-options-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
-            "text": "Toolbar 'options' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-save-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
-            "text": "Toolbar 'save' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-info-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
-            "text": "Toolbar 'info' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
-            "text": "Toolbar 'edit' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-close-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
-            "text": "Toolbar 'close' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
-            "text": "Toolbar 'delete' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
-            "text": "Toolbar 'cancel' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/toolbar-done-button": {
-            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
-            "text": "Toolbar 'done' button foreground"
-        },
-        "$:/language/Docs/PaletteColours/untagged-background": {
-            "title": "$:/language/Docs/PaletteColours/untagged-background",
-            "text": "Untagged pill background"
-        },
-        "$:/language/Docs/PaletteColours/very-muted-foreground": {
-            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
-            "text": "Very muted foreground"
-        },
-        "$:/language/EditTemplate/Body/External/Hint": {
-            "title": "$:/language/EditTemplate/Body/External/Hint",
-            "text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
-        },
-        "$:/language/EditTemplate/Body/Placeholder": {
-            "title": "$:/language/EditTemplate/Body/Placeholder",
-            "text": "Type the text for this tiddler"
-        },
-        "$:/language/EditTemplate/Body/Preview/Type/Output": {
-            "title": "$:/language/EditTemplate/Body/Preview/Type/Output",
-            "text": "output"
-        },
-        "$:/language/EditTemplate/Field/Remove/Caption": {
-            "title": "$:/language/EditTemplate/Field/Remove/Caption",
-            "text": "remove field"
-        },
-        "$:/language/EditTemplate/Field/Remove/Hint": {
-            "title": "$:/language/EditTemplate/Field/Remove/Hint",
-            "text": "Remove field"
-        },
-        "$:/language/EditTemplate/Field/Dropdown/Caption": {
-            "title": "$:/language/EditTemplate/Field/Dropdown/Caption",
-            "text": "field list"
-        },
-        "$:/language/EditTemplate/Field/Dropdown/Hint": {
-            "title": "$:/language/EditTemplate/Field/Dropdown/Hint",
-            "text": "Show field list"
-        },
-        "$:/language/EditTemplate/Fields/Add/Button": {
-            "title": "$:/language/EditTemplate/Fields/Add/Button",
-            "text": "add"
-        },
-        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
-            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
-            "text": "field name"
-        },
-        "$:/language/EditTemplate/Fields/Add/Prompt": {
-            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
-            "text": "Add a new field:"
-        },
-        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
-            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
-            "text": "field value"
-        },
-        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
-            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
-            "text": "System fields"
-        },
-        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
-            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
-            "text": "User fields"
-        },
-        "$:/language/EditTemplate/Shadow/Warning": {
-            "title": "$:/language/EditTemplate/Shadow/Warning",
-            "text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <>"
-        },
-        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
-            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
-            "text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <> by deleting this tiddler"
-        },
-        "$:/language/EditTemplate/Tags/Add/Button": {
-            "title": "$:/language/EditTemplate/Tags/Add/Button",
-            "text": "add"
-        },
-        "$:/language/EditTemplate/Tags/Add/Placeholder": {
-            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
-            "text": "tag name"
-        },
-        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
-            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
-            "text": "tag list"
-        },
-        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
-            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
-            "text": "Show tag list"
-        },
-        "$:/language/EditTemplate/Title/BadCharacterWarning": {
-            "title": "$:/language/EditTemplate/Title/BadCharacterWarning",
-            "text": "Warning: avoid using any of the characters <> in tiddler titles"
-        },
-        "$:/language/EditTemplate/Title/Exists/Prompt": {
-            "title": "$:/language/EditTemplate/Title/Exists/Prompt",
-            "text": "Target tiddler already exists"
-        },
-        "$:/language/EditTemplate/Title/Relink/Prompt": {
-            "title": "$:/language/EditTemplate/Title/Relink/Prompt",
-            "text": "Update ''<$text text=<>/>'' to ''<$text text=<>/>'' in the //tags// and //list// fields of other tiddlers"
-        },
-        "$:/language/EditTemplate/Title/References/Prompt": {
-            "title": "$:/language/EditTemplate/Title/References/Prompt",
-            "text": "The following references to this tiddler will not be automatically updated:"
-        },
-        "$:/language/EditTemplate/Type/Dropdown/Caption": {
-            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
-            "text": "content type list"
-        },
-        "$:/language/EditTemplate/Type/Dropdown/Hint": {
-            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
-            "text": "Show content type list"
-        },
-        "$:/language/EditTemplate/Type/Delete/Caption": {
-            "title": "$:/language/EditTemplate/Type/Delete/Caption",
-            "text": "delete content type"
-        },
-        "$:/language/EditTemplate/Type/Delete/Hint": {
-            "title": "$:/language/EditTemplate/Type/Delete/Hint",
-            "text": "Delete content type"
-        },
-        "$:/language/EditTemplate/Type/Placeholder": {
-            "title": "$:/language/EditTemplate/Type/Placeholder",
-            "text": "content type"
-        },
-        "$:/language/EditTemplate/Type/Prompt": {
-            "title": "$:/language/EditTemplate/Type/Prompt",
-            "text": "Type:"
-        },
-        "$:/language/Exporters/StaticRiver": {
-            "title": "$:/language/Exporters/StaticRiver",
-            "text": "Static HTML"
-        },
-        "$:/language/Exporters/JsonFile": {
-            "title": "$:/language/Exporters/JsonFile",
-            "text": "JSON file"
-        },
-        "$:/language/Exporters/CsvFile": {
-            "title": "$:/language/Exporters/CsvFile",
-            "text": "CSV file"
-        },
-        "$:/language/Exporters/TidFile": {
-            "title": "$:/language/Exporters/TidFile",
-            "text": "\".tid\" file"
-        },
-        "$:/language/Docs/Fields/_canonical_uri": {
-            "title": "$:/language/Docs/Fields/_canonical_uri",
-            "text": "The full URI of an external image tiddler"
-        },
-        "$:/language/Docs/Fields/bag": {
-            "title": "$:/language/Docs/Fields/bag",
-            "text": "The name of the bag from which a tiddler came"
-        },
-        "$:/language/Docs/Fields/caption": {
-            "title": "$:/language/Docs/Fields/caption",
-            "text": "The text to be displayed on a tab or button"
-        },
-        "$:/language/Docs/Fields/color": {
-            "title": "$:/language/Docs/Fields/color",
-            "text": "The CSS color value associated with a tiddler"
-        },
-        "$:/language/Docs/Fields/component": {
-            "title": "$:/language/Docs/Fields/component",
-            "text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
-        },
-        "$:/language/Docs/Fields/current-tiddler": {
-            "title": "$:/language/Docs/Fields/current-tiddler",
-            "text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
-        },
-        "$:/language/Docs/Fields/created": {
-            "title": "$:/language/Docs/Fields/created",
-            "text": "The date a tiddler was created"
-        },
-        "$:/language/Docs/Fields/creator": {
-            "title": "$:/language/Docs/Fields/creator",
-            "text": "The name of the person who created a tiddler"
-        },
-        "$:/language/Docs/Fields/dependents": {
-            "title": "$:/language/Docs/Fields/dependents",
-            "text": "For a plugin, lists the dependent plugin titles"
-        },
-        "$:/language/Docs/Fields/description": {
-            "title": "$:/language/Docs/Fields/description",
-            "text": "The descriptive text for a plugin, or a modal dialogue"
-        },
-        "$:/language/Docs/Fields/draft.of": {
-            "title": "$:/language/Docs/Fields/draft.of",
-            "text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
-        },
-        "$:/language/Docs/Fields/draft.title": {
-            "title": "$:/language/Docs/Fields/draft.title",
-            "text": "For draft tiddlers, contains the proposed new title of the tiddler"
-        },
-        "$:/language/Docs/Fields/footer": {
-            "title": "$:/language/Docs/Fields/footer",
-            "text": "The footer text for a wizard"
-        },
-        "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
-            "title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
-            "text": "A temporary storage field used in [[$:/core/templates/static.content]]"
-        },
-        "$:/language/Docs/Fields/hide-body": {
-            "title": "$:/language/Docs/Fields/hide-body",
-            "text": "The view template will hide bodies of tiddlers if set to: ''yes''"
-        },
-        "$:/language/Docs/Fields/icon": {
-            "title": "$:/language/Docs/Fields/icon",
-            "text": "The title of the tiddler containing the icon associated with a tiddler"
-        },
-        "$:/language/Docs/Fields/library": {
-            "title": "$:/language/Docs/Fields/library",
-            "text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
-        },
-        "$:/language/Docs/Fields/list": {
-            "title": "$:/language/Docs/Fields/list",
-            "text": "An ordered list of tiddler titles associated with a tiddler"
-        },
-        "$:/language/Docs/Fields/list-before": {
-            "title": "$:/language/Docs/Fields/list-before",
-            "text": "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"
-        },
-        "$:/language/Docs/Fields/list-after": {
-            "title": "$:/language/Docs/Fields/list-after",
-            "text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
-        },
-        "$:/language/Docs/Fields/modified": {
-            "title": "$:/language/Docs/Fields/modified",
-            "text": "The date and time at which a tiddler was last modified"
-        },
-        "$:/language/Docs/Fields/modifier": {
-            "title": "$:/language/Docs/Fields/modifier",
-            "text": "The tiddler title associated with the person who last modified a tiddler"
-        },
-        "$:/language/Docs/Fields/name": {
-            "title": "$:/language/Docs/Fields/name",
-            "text": "The human readable name associated with a plugin tiddler"
-        },
-        "$:/language/Docs/Fields/plugin-priority": {
-            "title": "$:/language/Docs/Fields/plugin-priority",
-            "text": "A numerical value indicating the priority of a plugin tiddler"
-        },
-        "$:/language/Docs/Fields/plugin-type": {
-            "title": "$:/language/Docs/Fields/plugin-type",
-            "text": "The type of plugin in a plugin tiddler"
-        },
-        "$:/language/Docs/Fields/revision": {
-            "title": "$:/language/Docs/Fields/revision",
-            "text": "The revision of the tiddler held at the server"
-        },
-        "$:/language/Docs/Fields/released": {
-            "title": "$:/language/Docs/Fields/released",
-            "text": "Date of a TiddlyWiki release"
-        },
-        "$:/language/Docs/Fields/source": {
-            "title": "$:/language/Docs/Fields/source",
-            "text": "The source URL associated with a tiddler"
-        },
-        "$:/language/Docs/Fields/subtitle": {
-            "title": "$:/language/Docs/Fields/subtitle",
-            "text": "The subtitle text for a wizard"
-        },
-        "$:/language/Docs/Fields/tags": {
-            "title": "$:/language/Docs/Fields/tags",
-            "text": "A list of tags associated with a tiddler"
-        },
-        "$:/language/Docs/Fields/text": {
-            "title": "$:/language/Docs/Fields/text",
-            "text": "The body text of a tiddler"
-        },
-        "$:/language/Docs/Fields/title": {
-            "title": "$:/language/Docs/Fields/title",
-            "text": "The unique name of a tiddler"
-        },
-        "$:/language/Docs/Fields/toc-link": {
-            "title": "$:/language/Docs/Fields/toc-link",
-            "text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
-        },
-        "$:/language/Docs/Fields/type": {
-            "title": "$:/language/Docs/Fields/type",
-            "text": "The content type of a tiddler"
-        },
-        "$:/language/Docs/Fields/version": {
-            "title": "$:/language/Docs/Fields/version",
-            "text": "Version information for a plugin"
-        },
-        "$:/language/Filters/AllTiddlers": {
-            "title": "$:/language/Filters/AllTiddlers",
-            "text": "All tiddlers except system tiddlers"
-        },
-        "$:/language/Filters/RecentSystemTiddlers": {
-            "title": "$:/language/Filters/RecentSystemTiddlers",
-            "text": "Recently modified tiddlers, including system tiddlers"
-        },
-        "$:/language/Filters/RecentTiddlers": {
-            "title": "$:/language/Filters/RecentTiddlers",
-            "text": "Recently modified tiddlers"
-        },
-        "$:/language/Filters/AllTags": {
-            "title": "$:/language/Filters/AllTags",
-            "text": "All tags except system tags"
-        },
-        "$:/language/Filters/Missing": {
-            "title": "$:/language/Filters/Missing",
-            "text": "Missing tiddlers"
-        },
-        "$:/language/Filters/Drafts": {
-            "title": "$:/language/Filters/Drafts",
-            "text": "Draft tiddlers"
-        },
-        "$:/language/Filters/Orphans": {
-            "title": "$:/language/Filters/Orphans",
-            "text": "Orphan tiddlers"
-        },
-        "$:/language/Filters/SystemTiddlers": {
-            "title": "$:/language/Filters/SystemTiddlers",
-            "text": "System tiddlers"
-        },
-        "$:/language/Filters/ShadowTiddlers": {
-            "title": "$:/language/Filters/ShadowTiddlers",
-            "text": "Shadow tiddlers"
-        },
-        "$:/language/Filters/OverriddenShadowTiddlers": {
-            "title": "$:/language/Filters/OverriddenShadowTiddlers",
-            "text": "Overridden shadow tiddlers"
-        },
-        "$:/language/Filters/SessionTiddlers": {
-            "title": "$:/language/Filters/SessionTiddlers",
-            "text": "Tiddlers modified since the wiki was loaded"
-        },
-        "$:/language/Filters/SystemTags": {
-            "title": "$:/language/Filters/SystemTags",
-            "text": "System tags"
-        },
-        "$:/language/Filters/StoryList": {
-            "title": "$:/language/Filters/StoryList",
-            "text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
-        },
-        "$:/language/Filters/TypedTiddlers": {
-            "title": "$:/language/Filters/TypedTiddlers",
-            "text": "Non wiki-text tiddlers"
-        },
-        "GettingStarted": {
-            "title": "GettingStarted",
-            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n
\n\n|<$link to=\"$:/SiteTitle\"><> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><> |<>
<$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/>
//<>// |\n
\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n" - }, - "$:/language/Help/build": { - "title": "$:/language/Help/build", - "description": "Automatically run configured commands", - "text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build [ ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n" - }, - "$:/language/Help/clearpassword": { - "title": "$:/language/Help/clearpassword", - "description": "Clear a password for subsequent crypto operations", - "text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n" - }, - "$:/language/Help/default": { - "title": "$:/language/Help/default", - "text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [] [-- [...]...]\n```\n\nAvailable commands:\n\n
    \n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n
  • <$link to=<>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/>: <$transclude tiddler=<> field=\"description\"/>
  • \n\n
\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help \n```\n" - }, - "$:/language/Help/editions": { - "title": "$:/language/Help/editions", - "description": "Lists the available editions of TiddlyWiki", - "text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n" - }, - "$:/language/Help/fetch": { - "title": "$:/language/Help/fetch", - "description": "Fetch tiddlers from wiki by URL", - "text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file \n--fetch files \n--fetch raw-file \n--fetch raw-files \n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n" - }, - "$:/language/Help/help": { - "title": "$:/language/Help/help", - "description": "Display help for TiddlyWiki commands", - "text": "Displays help text for a command:\n\n```\n--help []\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n" - }, - "$:/language/Help/import": { - "title": "$:/language/Help/import", - "description": "Import tiddlers from a file", - "text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import [] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n" - }, - "$:/language/Help/init": { - "title": "$:/language/Help/init", - "description": "Initialise a new wiki folder", - "text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n" - }, - "$:/language/Help/listen": { - "title": "$:/language/Help/listen", - "description": "Provides an HTTP server interface to TiddlyWiki", - "text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n" - }, - "$:/language/Help/load": { - "title": "$:/language/Help/load", - "description": "Load tiddlers from a file", - "text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath>\n--load <dirpath>\n```\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n" - }, - "$:/language/Help/makelibrary": { - "title": "$:/language/Help/makelibrary", - "description": "Construct library plugin required by upgrade process", - "text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n" - }, - "$:/language/Help/notfound": { - "title": "$:/language/Help/notfound", - "text": "No such help item" - }, - "$:/language/Help/output": { - "title": "$:/language/Help/output", - "description": "Set the base output directory for subsequent commands", - "text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n" - }, - "$:/language/Help/password": { - "title": "$:/language/Help/password", - "description": "Set a password for subsequent crypto operations", - "text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n" - }, - "$:/language/Help/render": { - "title": "$:/language/Help/render", - "description": "Renders individual tiddlers to files", - "text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''template'': Optional template through which each tiddler is rendered\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n" - }, - "$:/language/Help/rendertiddler": { - "title": "$:/language/Help/rendertiddler", - "description": "Render an individual tiddler as a specified ContentType", - "text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n" - }, - "$:/language/Help/rendertiddlers": { - "title": "$:/language/Help/rendertiddlers", - "description": "Render tiddlers matching a filter to a specified ContentType", - "text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n" - }, - "$:/language/Help/save": { - "title": "$:/language/Help/save", - "description": "Saves individual raw tiddlers to files", - "text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n" - }, - "$:/language/Help/savetiddler": { - "title": "$:/language/Help/savetiddler", - "description": "Saves a raw tiddler to a file", - "text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n" - }, - "$:/language/Help/savetiddlers": { - "title": "$:/language/Help/savetiddlers", - "description": "Saves a group of raw tiddlers to a directory", - "text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n" - }, - "$:/language/Help/server": { - "title": "$:/language/Help/server", - "description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)", - "text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n" - }, - "$:/language/Help/setfield": { - "title": "$:/language/Help/setfield", - "description": "Prepares external tiddlers for use", - "text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n" - }, - "$:/language/Help/unpackplugin": { - "title": "$:/language/Help/unpackplugin", - "description": "Unpack the payload tiddlers from a plugin", - "text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n" - }, - "$:/language/Help/verbose": { - "title": "$:/language/Help/verbose", - "description": "Triggers verbose output mode", - "text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n" - }, - "$:/language/Help/version": { - "title": "$:/language/Help/version", - "description": "Displays the version number of TiddlyWiki", - "text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n" - }, - "$:/language/Import/Imported/Hint": { - "title": "$:/language/Import/Imported/Hint", - "text": "The following tiddlers were imported:" - }, - "$:/language/Import/Listing/Cancel/Caption": { - "title": "$:/language/Import/Listing/Cancel/Caption", - "text": "Cancel" - }, - "$:/language/Import/Listing/Hint": { - "title": "$:/language/Import/Listing/Hint", - "text": "These tiddlers are ready to import:" - }, - "$:/language/Import/Listing/Import/Caption": { - "title": "$:/language/Import/Listing/Import/Caption", - "text": "Import" - }, - "$:/language/Import/Listing/Select/Caption": { - "title": "$:/language/Import/Listing/Select/Caption", - "text": "Select" - }, - "$:/language/Import/Listing/Status/Caption": { - "title": "$:/language/Import/Listing/Status/Caption", - "text": "Status" - }, - "$:/language/Import/Listing/Title/Caption": { - "title": "$:/language/Import/Listing/Title/Caption", - "text": "Title" - }, - "$:/language/Import/Listing/Preview": { - "title": "$:/language/Import/Listing/Preview", - "text": "Preview:" - }, - "$:/language/Import/Listing/Preview/Text": { - "title": "$:/language/Import/Listing/Preview/Text", - "text": "Text" - }, - "$:/language/Import/Listing/Preview/TextRaw": { - "title": "$:/language/Import/Listing/Preview/TextRaw", - "text": "Text (Raw)" - }, - "$:/language/Import/Listing/Preview/Fields": { - "title": "$:/language/Import/Listing/Preview/Fields", - "text": "Fields" - }, - "$:/language/Import/Listing/Preview/Diff": { - "title": "$:/language/Import/Listing/Preview/Diff", - "text": "Diff" - }, - "$:/language/Import/Listing/Preview/DiffFields": { - "title": "$:/language/Import/Listing/Preview/DiffFields", - "text": "Diff (Fields)" - }, - "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": { - "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible", - "text": "Blocked incompatible or obsolete plugin" - }, - "$:/language/Import/Upgrader/Plugins/Suppressed/Version": { - "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version", - "text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)" - }, - "$:/language/Import/Upgrader/Plugins/Upgraded": { - "title": "$:/language/Import/Upgrader/Plugins/Upgraded", - "text": "Upgraded plugin from <<incoming>> to <<upgraded>>" - }, - "$:/language/Import/Upgrader/State/Suppressed": { - "title": "$:/language/Import/Upgrader/State/Suppressed", - "text": "Blocked temporary state tiddler" - }, - "$:/language/Import/Upgrader/System/Suppressed": { - "title": "$:/language/Import/Upgrader/System/Suppressed", - "text": "Blocked system tiddler" - }, - "$:/language/Import/Upgrader/System/Warning": { - "title": "$:/language/Import/Upgrader/System/Warning", - "text": "Core module tiddler" - }, - "$:/language/Import/Upgrader/System/Alert": { - "title": "$:/language/Import/Upgrader/System/Alert", - "text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable" - }, - "$:/language/Import/Upgrader/ThemeTweaks/Created": { - "title": "$:/language/Import/Upgrader/ThemeTweaks/Created", - "text": "Migrated theme tweak from <$text text=<<from>>/>" - }, - "$:/language/AboveStory/ClassicPlugin/Warning": { - "title": "$:/language/AboveStory/ClassicPlugin/Warning", - "text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:" - }, - "$:/language/BinaryWarning/Prompt": { - "title": "$:/language/BinaryWarning/Prompt", - "text": "This tiddler contains binary data" - }, - "$:/language/ClassicWarning/Hint": { - "title": "$:/language/ClassicWarning/Hint", - "text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details." - }, - "$:/language/ClassicWarning/Upgrade/Caption": { - "title": "$:/language/ClassicWarning/Upgrade/Caption", - "text": "upgrade" - }, - "$:/language/CloseAll/Button": { - "title": "$:/language/CloseAll/Button", - "text": "close all" - }, - "$:/language/ColourPicker/Recent": { - "title": "$:/language/ColourPicker/Recent", - "text": "Recent:" - }, - "$:/language/ConfirmCancelTiddler": { - "title": "$:/language/ConfirmCancelTiddler", - "text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?" - }, - "$:/language/ConfirmDeleteTiddler": { - "title": "$:/language/ConfirmDeleteTiddler", - "text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?" - }, - "$:/language/ConfirmOverwriteTiddler": { - "title": "$:/language/ConfirmOverwriteTiddler", - "text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?" - }, - "$:/language/ConfirmEditShadowTiddler": { - "title": "$:/language/ConfirmEditShadowTiddler", - "text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?" - }, - "$:/language/Count": { - "title": "$:/language/Count", - "text": "count" - }, - "$:/language/DefaultNewTiddlerTitle": { - "title": "$:/language/DefaultNewTiddlerTitle", - "text": "New Tiddler" - }, - "$:/language/Diffs/CountMessage": { - "title": "$:/language/Diffs/CountMessage", - "text": "<<diff-count>> differences" - }, - "$:/language/DropMessage": { - "title": "$:/language/DropMessage", - "text": "Drop here (or use the 'Escape' key to cancel)" - }, - "$:/language/Encryption/Cancel": { - "title": "$:/language/Encryption/Cancel", - "text": "Cancel" - }, - "$:/language/Encryption/ConfirmClearPassword": { - "title": "$:/language/Encryption/ConfirmClearPassword", - "text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki" - }, - "$:/language/Encryption/PromptSetPassword": { - "title": "$:/language/Encryption/PromptSetPassword", - "text": "Set a new password for this TiddlyWiki" - }, - "$:/language/Encryption/Username": { - "title": "$:/language/Encryption/Username", - "text": "Username" - }, - "$:/language/Encryption/Password": { - "title": "$:/language/Encryption/Password", - "text": "Password" - }, - "$:/language/Encryption/RepeatPassword": { - "title": "$:/language/Encryption/RepeatPassword", - "text": "Repeat password" - }, - "$:/language/Encryption/PasswordNoMatch": { - "title": "$:/language/Encryption/PasswordNoMatch", - "text": "Passwords do not match" - }, - "$:/language/Encryption/SetPassword": { - "title": "$:/language/Encryption/SetPassword", - "text": "Set password" - }, - "$:/language/Error/Caption": { - "title": "$:/language/Error/Caption", - "text": "Error" - }, - "$:/language/Error/EditConflict": { - "title": "$:/language/Error/EditConflict", - "text": "File changed on server" - }, - "$:/language/Error/Filter": { - "title": "$:/language/Error/Filter", - "text": "Filter error" - }, - "$:/language/Error/FilterSyntax": { - "title": "$:/language/Error/FilterSyntax", - "text": "Syntax error in filter expression" - }, - "$:/language/Error/IsFilterOperator": { - "title": "$:/language/Error/IsFilterOperator", - "text": "Filter Error: Unknown operand for the 'is' filter operator" - }, - "$:/language/Error/LoadingPluginLibrary": { - "title": "$:/language/Error/LoadingPluginLibrary", - "text": "Error loading plugin library" - }, - "$:/language/Error/RecursiveTransclusion": { - "title": "$:/language/Error/RecursiveTransclusion", - "text": "Recursive transclusion error in transclude widget" - }, - "$:/language/Error/RetrievingSkinny": { - "title": "$:/language/Error/RetrievingSkinny", - "text": "Error retrieving skinny tiddler list" - }, - "$:/language/Error/SavingToTWEdit": { - "title": "$:/language/Error/SavingToTWEdit", - "text": "Error saving to TWEdit" - }, - "$:/language/Error/WhileSaving": { - "title": "$:/language/Error/WhileSaving", - "text": "Error while saving" - }, - "$:/language/Error/XMLHttpRequest": { - "title": "$:/language/Error/XMLHttpRequest", - "text": "XMLHttpRequest error code" - }, - "$:/language/InternalJavaScriptError/Title": { - "title": "$:/language/InternalJavaScriptError/Title", - "text": "Internal JavaScript Error" - }, - "$:/language/InternalJavaScriptError/Hint": { - "title": "$:/language/InternalJavaScriptError/Hint", - "text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser" - }, - "$:/language/InvalidFieldName": { - "title": "$:/language/InvalidFieldName", - "text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)" - }, - "$:/language/LazyLoadingWarning": { - "title": "$:/language/LazyLoadingWarning", - "text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>" - }, - "$:/language/LoginToTiddlySpace": { - "title": "$:/language/LoginToTiddlySpace", - "text": "Login to TiddlySpace" - }, - "$:/language/Manager/Controls/FilterByTag/None": { - "title": "$:/language/Manager/Controls/FilterByTag/None", - "text": "(none)" - }, - "$:/language/Manager/Controls/FilterByTag/Prompt": { - "title": "$:/language/Manager/Controls/FilterByTag/Prompt", - "text": "Filter by tag:" - }, - "$:/language/Manager/Controls/Order/Prompt": { - "title": "$:/language/Manager/Controls/Order/Prompt", - "text": "Reverse order" - }, - "$:/language/Manager/Controls/Search/Placeholder": { - "title": "$:/language/Manager/Controls/Search/Placeholder", - "text": "Search" - }, - "$:/language/Manager/Controls/Search/Prompt": { - "title": "$:/language/Manager/Controls/Search/Prompt", - "text": "Search:" - }, - "$:/language/Manager/Controls/Show/Option/Tags": { - "title": "$:/language/Manager/Controls/Show/Option/Tags", - "text": "tags" - }, - "$:/language/Manager/Controls/Show/Option/Tiddlers": { - "title": "$:/language/Manager/Controls/Show/Option/Tiddlers", - "text": "tiddlers" - }, - "$:/language/Manager/Controls/Show/Prompt": { - "title": "$:/language/Manager/Controls/Show/Prompt", - "text": "Show:" - }, - "$:/language/Manager/Controls/Sort/Prompt": { - "title": "$:/language/Manager/Controls/Sort/Prompt", - "text": "Sort by:" - }, - "$:/language/Manager/Item/Colour": { - "title": "$:/language/Manager/Item/Colour", - "text": "Colour" - }, - "$:/language/Manager/Item/Fields": { - "title": "$:/language/Manager/Item/Fields", - "text": "Fields" - }, - "$:/language/Manager/Item/Icon/None": { - "title": "$:/language/Manager/Item/Icon/None", - "text": "(none)" - }, - "$:/language/Manager/Item/Icon": { - "title": "$:/language/Manager/Item/Icon", - "text": "Icon" - }, - "$:/language/Manager/Item/RawText": { - "title": "$:/language/Manager/Item/RawText", - "text": "Raw text" - }, - "$:/language/Manager/Item/Tags": { - "title": "$:/language/Manager/Item/Tags", - "text": "Tags" - }, - "$:/language/Manager/Item/Tools": { - "title": "$:/language/Manager/Item/Tools", - "text": "Tools" - }, - "$:/language/Manager/Item/WikifiedText": { - "title": "$:/language/Manager/Item/WikifiedText", - "text": "Wikified text" - }, - "$:/language/MissingTiddler/Hint": { - "title": "$:/language/MissingTiddler/Hint", - "text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create" - }, - "$:/language/No": { - "title": "$:/language/No", - "text": "No" - }, - "$:/language/OfficialPluginLibrary": { - "title": "$:/language/OfficialPluginLibrary", - "text": "Official ~TiddlyWiki Plugin Library" - }, - "$:/language/OfficialPluginLibrary/Hint": { - "title": "$:/language/OfficialPluginLibrary/Hint", - "text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team." - }, - "$:/language/PluginReloadWarning": { - "title": "$:/language/PluginReloadWarning", - "text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to plugins to take effect" - }, - "$:/language/RecentChanges/DateFormat": { - "title": "$:/language/RecentChanges/DateFormat", - "text": "DDth MMM YYYY" - }, - "$:/language/SystemTiddler/Tooltip": { - "title": "$:/language/SystemTiddler/Tooltip", - "text": "This is a system tiddler" - }, - "$:/language/SystemTiddlers/Include/Prompt": { - "title": "$:/language/SystemTiddlers/Include/Prompt", - "text": "Include system tiddlers" - }, - "$:/language/TagManager/Colour/Heading": { - "title": "$:/language/TagManager/Colour/Heading", - "text": "Colour" - }, - "$:/language/TagManager/Count/Heading": { - "title": "$:/language/TagManager/Count/Heading", - "text": "Count" - }, - "$:/language/TagManager/Icon/Heading": { - "title": "$:/language/TagManager/Icon/Heading", - "text": "Icon" - }, - "$:/language/TagManager/Info/Heading": { - "title": "$:/language/TagManager/Info/Heading", - "text": "Info" - }, - "$:/language/TagManager/Tag/Heading": { - "title": "$:/language/TagManager/Tag/Heading", - "text": "Tag" - }, - "$:/language/Tiddler/DateFormat": { - "title": "$:/language/Tiddler/DateFormat", - "text": "DDth MMM YYYY at hh12:0mmam" - }, - "$:/language/UnsavedChangesWarning": { - "title": "$:/language/UnsavedChangesWarning", - "text": "You have unsaved changes in TiddlyWiki" - }, - "$:/language/Yes": { - "title": "$:/language/Yes", - "text": "Yes" - }, - "$:/language/Modals/Download": { - "title": "$:/language/Modals/Download", - "subtitle": "Download changes", - "footer": "<$button message=\"tm-close-tiddler\">Close</$button>", - "help": "https://tiddlywiki.com/static/DownloadingChanges.html", - "text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n" - }, - "$:/language/Modals/SaveInstructions": { - "title": "$:/language/Modals/SaveInstructions", - "subtitle": "Save your work", - "footer": "<$button message=\"tm-close-tiddler\">Close</$button>", - "help": "https://tiddlywiki.com/static/SavingChanges.html", - "text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n" - }, - "$:/config/NewJournal/Title": { - "title": "$:/config/NewJournal/Title", - "text": "DDth MMM YYYY" - }, - "$:/config/NewJournal/Text": { - "title": "$:/config/NewJournal/Text", - "text": "" - }, - "$:/config/NewJournal/Tags": { - "title": "$:/config/NewJournal/Tags", - "text": "Journal" - }, - "$:/language/Notifications/Save/Done": { - "title": "$:/language/Notifications/Save/Done", - "text": "Saved wiki" - }, - "$:/language/Notifications/Save/Starting": { - "title": "$:/language/Notifications/Save/Starting", - "text": "Starting to save wiki" - }, - "$:/language/Notifications/CopiedToClipboard/Succeeded": { - "title": "$:/language/Notifications/CopiedToClipboard/Succeeded", - "text": "Copied to clipboard!" - }, - "$:/language/Notifications/CopiedToClipboard/Failed": { - "title": "$:/language/Notifications/CopiedToClipboard/Failed", - "text": "Failed to copy to clipboard!" - }, - "$:/language/Search/DefaultResults/Caption": { - "title": "$:/language/Search/DefaultResults/Caption", - "text": "List" - }, - "$:/language/Search/Filter/Caption": { - "title": "$:/language/Search/Filter/Caption", - "text": "Filter" - }, - "$:/language/Search/Filter/Hint": { - "title": "$:/language/Search/Filter/Hint", - "text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]" - }, - "$:/language/Search/Filter/Matches": { - "title": "$:/language/Search/Filter/Matches", - "text": "//<small><<resultCount>> matches</small>//" - }, - "$:/language/Search/Matches": { - "title": "$:/language/Search/Matches", - "text": "//<small><<resultCount>> matches</small>//" - }, - "$:/language/Search/Matches/All": { - "title": "$:/language/Search/Matches/All", - "text": "All matches:" - }, - "$:/language/Search/Matches/Title": { - "title": "$:/language/Search/Matches/Title", - "text": "Title matches:" - }, - "$:/language/Search/Search": { - "title": "$:/language/Search/Search", - "text": "Search" - }, - "$:/language/Search/Search/TooShort": { - "title": "$:/language/Search/Search/TooShort", - "text": "Search text too short" - }, - "$:/language/Search/Shadows/Caption": { - "title": "$:/language/Search/Shadows/Caption", - "text": "Shadows" - }, - "$:/language/Search/Shadows/Hint": { - "title": "$:/language/Search/Shadows/Hint", - "text": "Search for shadow tiddlers" - }, - "$:/language/Search/Shadows/Matches": { - "title": "$:/language/Search/Shadows/Matches", - "text": "//<small><<resultCount>> matches</small>//" - }, - "$:/language/Search/Standard/Caption": { - "title": "$:/language/Search/Standard/Caption", - "text": "Standard" - }, - "$:/language/Search/Standard/Hint": { - "title": "$:/language/Search/Standard/Hint", - "text": "Search for standard tiddlers" - }, - "$:/language/Search/Standard/Matches": { - "title": "$:/language/Search/Standard/Matches", - "text": "//<small><<resultCount>> matches</small>//" - }, - "$:/language/Search/System/Caption": { - "title": "$:/language/Search/System/Caption", - "text": "System" - }, - "$:/language/Search/System/Hint": { - "title": "$:/language/Search/System/Hint", - "text": "Search for system tiddlers" - }, - "$:/language/Search/System/Matches": { - "title": "$:/language/Search/System/Matches", - "text": "//<small><<resultCount>> matches</small>//" - }, - "$:/language/SideBar/All/Caption": { - "title": "$:/language/SideBar/All/Caption", - "text": "All" - }, - "$:/language/SideBar/Contents/Caption": { - "title": "$:/language/SideBar/Contents/Caption", - "text": "Contents" - }, - "$:/language/SideBar/Drafts/Caption": { - "title": "$:/language/SideBar/Drafts/Caption", - "text": "Drafts" - }, - "$:/language/SideBar/Explorer/Caption": { - "title": "$:/language/SideBar/Explorer/Caption", - "text": "Explorer" - }, - "$:/language/SideBar/Missing/Caption": { - "title": "$:/language/SideBar/Missing/Caption", - "text": "Missing" - }, - "$:/language/SideBar/More/Caption": { - "title": "$:/language/SideBar/More/Caption", - "text": "More" - }, - "$:/language/SideBar/Open/Caption": { - "title": "$:/language/SideBar/Open/Caption", - "text": "Open" - }, - "$:/language/SideBar/Orphans/Caption": { - "title": "$:/language/SideBar/Orphans/Caption", - "text": "Orphans" - }, - "$:/language/SideBar/Recent/Caption": { - "title": "$:/language/SideBar/Recent/Caption", - "text": "Recent" - }, - "$:/language/SideBar/Shadows/Caption": { - "title": "$:/language/SideBar/Shadows/Caption", - "text": "Shadows" - }, - "$:/language/SideBar/System/Caption": { - "title": "$:/language/SideBar/System/Caption", - "text": "System" - }, - "$:/language/SideBar/Tags/Caption": { - "title": "$:/language/SideBar/Tags/Caption", - "text": "Tags" - }, - "$:/language/SideBar/Tags/Untagged/Caption": { - "title": "$:/language/SideBar/Tags/Untagged/Caption", - "text": "untagged" - }, - "$:/language/SideBar/Tools/Caption": { - "title": "$:/language/SideBar/Tools/Caption", - "text": "Tools" - }, - "$:/language/SideBar/Types/Caption": { - "title": "$:/language/SideBar/Types/Caption", - "text": "Types" - }, - "$:/SiteSubtitle": { - "title": "$:/SiteSubtitle", - "text": "a non-linear personal web notebook" - }, - "$:/SiteTitle": { - "title": "$:/SiteTitle", - "text": "My ~TiddlyWiki" - }, - "$:/language/Snippets/ListByTag": { - "title": "$:/language/Snippets/ListByTag", - "tags": "$:/tags/TextEditor/Snippet", - "caption": "List of tiddlers by tag", - "text": "<<list-links \"[tag[task]sort[title]]\">>\n" - }, - "$:/language/Snippets/MacroDefinition": { - "title": "$:/language/Snippets/MacroDefinition", - "tags": "$:/tags/TextEditor/Snippet", - "caption": "Macro definition", - "text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n" - }, - "$:/language/Snippets/Table4x3": { - "title": "$:/language/Snippets/Table4x3", - "tags": "$:/tags/TextEditor/Snippet", - "caption": "Table with 4 columns by 3 rows", - "text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n" - }, - "$:/language/Snippets/TableOfContents": { - "title": "$:/language/Snippets/TableOfContents", - "tags": "$:/tags/TextEditor/Snippet", - "caption": "Table of Contents", - "text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>" - }, - "$:/language/ThemeTweaks/ThemeTweaks": { - "title": "$:/language/ThemeTweaks/ThemeTweaks", - "text": "Theme Tweaks" - }, - "$:/language/ThemeTweaks/ThemeTweaks/Hint": { - "title": "$:/language/ThemeTweaks/ThemeTweaks/Hint", - "text": "You can tweak certain aspects of the ''Vanilla'' theme." - }, - "$:/language/ThemeTweaks/Options": { - "title": "$:/language/ThemeTweaks/Options", - "text": "Options" - }, - "$:/language/ThemeTweaks/Options/SidebarLayout": { - "title": "$:/language/ThemeTweaks/Options/SidebarLayout", - "text": "Sidebar layout" - }, - "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": { - "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid", - "text": "Fixed story, fluid sidebar" - }, - "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": { - "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed", - "text": "Fluid story, fixed sidebar" - }, - "$:/language/ThemeTweaks/Options/StickyTitles": { - "title": "$:/language/ThemeTweaks/Options/StickyTitles", - "text": "Sticky titles" - }, - "$:/language/ThemeTweaks/Options/StickyTitles/Hint": { - "title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint", - "text": "Causes tiddler titles to \"stick\" to the top of the browser window" - }, - "$:/language/ThemeTweaks/Options/CodeWrapping": { - "title": "$:/language/ThemeTweaks/Options/CodeWrapping", - "text": "Wrap long lines in code blocks" - }, - "$:/language/ThemeTweaks/Settings": { - "title": "$:/language/ThemeTweaks/Settings", - "text": "Settings" - }, - "$:/language/ThemeTweaks/Settings/FontFamily": { - "title": "$:/language/ThemeTweaks/Settings/FontFamily", - "text": "Font family" - }, - "$:/language/ThemeTweaks/Settings/CodeFontFamily": { - "title": "$:/language/ThemeTweaks/Settings/CodeFontFamily", - "text": "Code font family" - }, - "$:/language/ThemeTweaks/Settings/EditorFontFamily": { - "title": "$:/language/ThemeTweaks/Settings/EditorFontFamily", - "text": "Editor font family" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImage": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImage", - "text": "Page background image" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment", - "text": "Page background image attachment" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll", - "text": "Scroll with tiddlers" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed", - "text": "Fixed to window" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImageSize": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize", - "text": "Page background image size" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto", - "text": "Auto" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover", - "text": "Cover" - }, - "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": { - "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain", - "text": "Contain" - }, - "$:/language/ThemeTweaks/Metrics": { - "title": "$:/language/ThemeTweaks/Metrics", - "text": "Sizes" - }, - "$:/language/ThemeTweaks/Metrics/FontSize": { - "title": "$:/language/ThemeTweaks/Metrics/FontSize", - "text": "Font size" - }, - "$:/language/ThemeTweaks/Metrics/LineHeight": { - "title": "$:/language/ThemeTweaks/Metrics/LineHeight", - "text": "Line height" - }, - "$:/language/ThemeTweaks/Metrics/BodyFontSize": { - "title": "$:/language/ThemeTweaks/Metrics/BodyFontSize", - "text": "Font size for tiddler body" - }, - "$:/language/ThemeTweaks/Metrics/BodyLineHeight": { - "title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight", - "text": "Line height for tiddler body" - }, - "$:/language/ThemeTweaks/Metrics/StoryLeft": { - "title": "$:/language/ThemeTweaks/Metrics/StoryLeft", - "text": "Story left position" - }, - "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": { - "title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint", - "text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page" - }, - "$:/language/ThemeTweaks/Metrics/StoryTop": { - "title": "$:/language/ThemeTweaks/Metrics/StoryTop", - "text": "Story top position" - }, - "$:/language/ThemeTweaks/Metrics/StoryTop/Hint": { - "title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint", - "text": "how far the top margin of the story river<br>is from the top of the page" - }, - "$:/language/ThemeTweaks/Metrics/StoryRight": { - "title": "$:/language/ThemeTweaks/Metrics/StoryRight", - "text": "Story right" - }, - "$:/language/ThemeTweaks/Metrics/StoryRight/Hint": { - "title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint", - "text": "how far the left margin of the sidebar <br>is from the left of the page" - }, - "$:/language/ThemeTweaks/Metrics/StoryWidth": { - "title": "$:/language/ThemeTweaks/Metrics/StoryWidth", - "text": "Story width" - }, - "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": { - "title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint", - "text": "the overall width of the story river" - }, - "$:/language/ThemeTweaks/Metrics/TiddlerWidth": { - "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth", - "text": "Tiddler width" - }, - "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": { - "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint", - "text": "within the story river" - }, - "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": { - "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint", - "text": "Sidebar breakpoint" - }, - "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": { - "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint", - "text": "the minimum page width at which the story<br>river and sidebar will appear side by side" - }, - "$:/language/ThemeTweaks/Metrics/SidebarWidth": { - "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth", - "text": "Sidebar width" - }, - "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": { - "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint", - "text": "the width of the sidebar in fluid-fixed layout" - }, - "$:/language/TiddlerInfo/Advanced/Caption": { - "title": "$:/language/TiddlerInfo/Advanced/Caption", - "text": "Advanced" - }, - "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": { - "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint", - "text": "none" - }, - "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": { - "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading", - "text": "Plugin Details" - }, - "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": { - "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint", - "text": "This plugin contains the following shadow tiddlers:" - }, - "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": { - "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading", - "text": "Shadow Status" - }, - "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": { - "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint", - "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler" - }, - "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": { - "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint", - "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler" - }, - "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": { - "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source", - "text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>" - }, - "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": { - "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint", - "text": "It is overridden by an ordinary tiddler" - }, - "$:/language/TiddlerInfo/Fields/Caption": { - "title": "$:/language/TiddlerInfo/Fields/Caption", - "text": "Fields" - }, - "$:/language/TiddlerInfo/List/Caption": { - "title": "$:/language/TiddlerInfo/List/Caption", - "text": "List" - }, - "$:/language/TiddlerInfo/List/Empty": { - "title": "$:/language/TiddlerInfo/List/Empty", - "text": "This tiddler does not have a list" - }, - "$:/language/TiddlerInfo/Listed/Caption": { - "title": "$:/language/TiddlerInfo/Listed/Caption", - "text": "Listed" - }, - "$:/language/TiddlerInfo/Listed/Empty": { - "title": "$:/language/TiddlerInfo/Listed/Empty", - "text": "This tiddler is not listed by any others" - }, - "$:/language/TiddlerInfo/References/Caption": { - "title": "$:/language/TiddlerInfo/References/Caption", - "text": "References" - }, - "$:/language/TiddlerInfo/References/Empty": { - "title": "$:/language/TiddlerInfo/References/Empty", - "text": "No tiddlers link to this one" - }, - "$:/language/TiddlerInfo/Tagging/Caption": { - "title": "$:/language/TiddlerInfo/Tagging/Caption", - "text": "Tagging" - }, - "$:/language/TiddlerInfo/Tagging/Empty": { - "title": "$:/language/TiddlerInfo/Tagging/Empty", - "text": "No tiddlers are tagged with this one" - }, - "$:/language/TiddlerInfo/Tools/Caption": { - "title": "$:/language/TiddlerInfo/Tools/Caption", - "text": "Tools" - }, - "$:/language/Docs/Types/application/javascript": { - "title": "$:/language/Docs/Types/application/javascript", - "description": "JavaScript code", - "name": "application/javascript", - "group": "Developer", - "group-sort": "2" - }, - "$:/language/Docs/Types/application/json": { - "title": "$:/language/Docs/Types/application/json", - "description": "JSON data", - "name": "application/json", - "group": "Developer", - "group-sort": "2" - }, - "$:/language/Docs/Types/application/x-tiddler-dictionary": { - "title": "$:/language/Docs/Types/application/x-tiddler-dictionary", - "description": "Data dictionary", - "name": "application/x-tiddler-dictionary", - "group": "Developer", - "group-sort": "2" - }, - "$:/language/Docs/Types/image/gif": { - "title": "$:/language/Docs/Types/image/gif", - "description": "GIF image", - "name": "image/gif", - "group": "Image", - "group-sort": "1" - }, - "$:/language/Docs/Types/image/jpeg": { - "title": "$:/language/Docs/Types/image/jpeg", - "description": "JPEG image", - "name": "image/jpeg", - "group": "Image", - "group-sort": "1" - }, - "$:/language/Docs/Types/image/png": { - "title": "$:/language/Docs/Types/image/png", - "description": "PNG image", - "name": "image/png", - "group": "Image", - "group-sort": "1" - }, - "$:/language/Docs/Types/image/svg+xml": { - "title": "$:/language/Docs/Types/image/svg+xml", - "description": "Structured Vector Graphics image", - "name": "image/svg+xml", - "group": "Image", - "group-sort": "1" - }, - "$:/language/Docs/Types/image/x-icon": { - "title": "$:/language/Docs/Types/image/x-icon", - "description": "ICO format icon file", - "name": "image/x-icon", - "group": "Image", - "group-sort": "1" - }, - "$:/language/Docs/Types/text/css": { - "title": "$:/language/Docs/Types/text/css", - "description": "Static stylesheet", - "name": "text/css", - "group": "Developer", - "group-sort": "2" - }, - "$:/language/Docs/Types/text/html": { - "title": "$:/language/Docs/Types/text/html", - "description": "HTML markup", - "name": "text/html", - "group": "Text", - "group-sort": "0" - }, - "$:/language/Docs/Types/text/plain": { - "title": "$:/language/Docs/Types/text/plain", - "description": "Plain text", - "name": "text/plain", - "group": "Text", - "group-sort": "0" - }, - "$:/language/Docs/Types/text/vnd.tiddlywiki": { - "title": "$:/language/Docs/Types/text/vnd.tiddlywiki", - "description": "TiddlyWiki 5", - "name": "text/vnd.tiddlywiki", - "group": "Text", - "group-sort": "0" - }, - "$:/language/Docs/Types/text/x-tiddlywiki": { - "title": "$:/language/Docs/Types/text/x-tiddlywiki", - "description": "TiddlyWiki Classic", - "name": "text/x-tiddlywiki", - "group": "Text", - "group-sort": "0" - }, - "$:/languages/en-GB/icon": { - "title": "$:/languages/en-GB/icon", - "type": "image/svg+xml", - "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n" - }, - "$:/languages/en-GB": { - "title": "$:/languages/en-GB", - "name": "en-GB", - "description": "English (British)", - "author": "JeremyRuston", - "core-version": ">=5.0.0\"", - "text": "Stub pseudo-plugin for the default language" - }, - "$:/core/modules/commander.js": { - "title": "$:/core/modules/commander.js", - "text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/commands/build.js": { - "title": "$:/core/modules/commands/build.js", - "text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/clearpassword.js": { - "title": "$:/core/modules/commands/clearpassword.js", - "text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/editions.js": { - "title": "$:/core/modules/commands/editions.js", - "text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/fetch.js": { - "title": "$:/core/modules/commands/fetch.js", - "text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = $tw.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t \t\t\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/help.js": { - "title": "$:/core/modules/commands/help.js", - "text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/import.js": { - "title": "$:/core/modules/commands/import.js", - "text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/init.js": { - "title": "$:/core/modules/commands/init.js", - "text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/listen.js": { - "title": "$:/core/modules/commands/listen.js", - "text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/load.js": { - "title": "$:/core/modules/commands/load.js", - "text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count) {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/makelibrary.js": { - "title": "$:/core/modules/commands/makelibrary.js", - "text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));\n\tcollectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers},null,$tw.config.preferences.jsonSpaces)\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/output.js": { - "title": "$:/core/modules/commands/output.js", - "text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/password.js": { - "title": "$:/core/modules/commands/password.js", - "text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/render.js": { - "title": "$:/core/modules/commands/render.js", - "text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/rendertiddler.js": { - "title": "$:/core/modules/commands/rendertiddler.js", - "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/rendertiddlers.js": { - "title": "$:/core/modules/commands/rendertiddlers.js", - "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/save.js": { - "title": "$:/core/modules/commands/save.js", - "text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/savelibrarytiddlers.js": { - "title": "$:/core/modules/commands/savelibrarytiddlers.js", - "text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler,null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{text: undefined, readme: readmeContent, icon: iconContent}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/savetiddler.js": { - "title": "$:/core/modules/commands/savetiddler.js", - "text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/savetiddlers.js": { - "title": "$:/core/modules/commands/savetiddlers.js", - "text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/server.js": { - "title": "$:/core/modules/commands/server.js", - "text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/setfield.js": { - "title": "$:/core/modules/commands/setfield.js", - "text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/unpackplugin.js": { - "title": "$:/core/modules/commands/unpackplugin.js", - "text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/verbose.js": { - "title": "$:/core/modules/commands/verbose.js", - "text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/commands/version.js": { - "title": "$:/core/modules/commands/version.js", - "text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n", - "type": "application/javascript", - "module-type": "command" - }, - "$:/core/modules/config.js": { - "title": "$:/core/modules/config.js", - "text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n", - "type": "application/javascript", - "module-type": "config" - }, - "$:/core/modules/deserializers.js": { - "title": "$:/core/modules/deserializers.js", - "text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "tiddlerdeserializer" - }, - "$:/core/modules/editor/engines/framed.js": { - "title": "$:/core/modules/editor/engines/framed.js", - "text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n", - "type": "application/javascript", - "module-type": "library" - }, - "$:/core/modules/editor/engines/simple.js": { - "title": "$:/core/modules/editor/engines/simple.js", - "text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n", - "type": "application/javascript", - "module-type": "library" - }, - "$:/core/modules/editor/factory.js": { - "title": "$:/core/modules/editor/factory.js", - "text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag);\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\t\t\t\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n", - "type": "application/javascript", - "module-type": "library" - }, - "$:/core/modules/editor/operations/bitmap/clear.js": { - "title": "$:/core/modules/editor/operations/bitmap/clear.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "bitmapeditoroperation" - }, - "$:/core/modules/editor/operations/bitmap/resize.js": { - "title": "$:/core/modules/editor/operations/bitmap/resize.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "bitmapeditoroperation" - }, - "$:/core/modules/editor/operations/bitmap/rotate-left.js": { - "title": "$:/core/modules/editor/operations/bitmap/rotate-left.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "bitmapeditoroperation" - }, - "$:/core/modules/editor/operations/text/excise.js": { - "title": "$:/core/modules/editor/operations/text/excise.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/editor/operations/text/make-link.js": { - "title": "$:/core/modules/editor/operations/text/make-link.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/editor/operations/text/prefix-lines.js": { - "title": "$:/core/modules/editor/operations/text/prefix-lines.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,event.paramObject.count);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== event.paramObject.count) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/editor/operations/text/replace-all.js": { - "title": "$:/core/modules/editor/operations/text/replace-all.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/editor/operations/text/replace-selection.js": { - "title": "$:/core/modules/editor/operations/text/replace-selection.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/editor/operations/text/save-selection.js": { - "title": "$:/core/modules/editor/operations/text/save-selection.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/editor/operations/text/wrap-lines.js": { - "title": "$:/core/modules/editor/operations/text/wrap-lines.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/editor/operations/text/wrap-selection.js": { - "title": "$:/core/modules/editor/operations/text/wrap-selection.js", - "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "texteditoroperation" - }, - "$:/core/modules/filters/addprefix.js": { - "title": "$:/core/modules/filters/addprefix.js", - "text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/addsuffix.js": { - "title": "$:/core/modules/filters/addsuffix.js", - "text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/after.js": { - "title": "$:/core/modules/filters/after.js", - "text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/all/current.js": { - "title": "$:/core/modules/filters/all/current.js", - "text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "allfilteroperator" - }, - "$:/core/modules/filters/all/missing.js": { - "title": "$:/core/modules/filters/all/missing.js", - "text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "allfilteroperator" - }, - "$:/core/modules/filters/all/orphans.js": { - "title": "$:/core/modules/filters/all/orphans.js", - "text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "allfilteroperator" - }, - "$:/core/modules/filters/all/shadows.js": { - "title": "$:/core/modules/filters/all/shadows.js", - "text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "allfilteroperator" - }, - "$:/core/modules/filters/all/tags.js": { - "title": "$:/core/modules/filters/all/tags.js", - "text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "allfilteroperator" - }, - "$:/core/modules/filters/all/tiddlers.js": { - "title": "$:/core/modules/filters/all/tiddlers.js", - "text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "allfilteroperator" - }, - "$:/core/modules/filters/all.js": { - "title": "$:/core/modules/filters/all.js", - "text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/backlinks.js": { - "title": "$:/core/modules/filters/backlinks.js", - "text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/before.js": { - "title": "$:/core/modules/filters/before.js", - "text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/commands.js": { - "title": "$:/core/modules/filters/commands.js", - "text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/contains.js": { - "title": "$:/core/modules/filters/contains.js", - "text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/count.js": { - "title": "$:/core/modules/filters/count.js", - "text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/days.js": { - "title": "$:/core/modules/filters/days.js", - "text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/each.js": { - "title": "$:/core/modules/filters/each.js", - "text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/eachday.js": { - "title": "$:/core/modules/filters/eachday.js", - "text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/editiondescription.js": { - "title": "$:/core/modules/filters/editiondescription.js", - "text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/editions.js": { - "title": "$:/core/modules/filters/editions.js", - "text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/decodeuricomponent.js": { - "title": "$:/core/modules/filters/decodeuricomponent.js", - "text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/enlist.js": { - "title": "$:/core/modules/filters/enlist.js", - "text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar list = $tw.utils.parseStringArray(operator.operand);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/field.js": { - "title": "$:/core/modules/filters/field.js", - "text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/fields.js": { - "title": "$:/core/modules/filters/fields.js", - "text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/get.js": { - "title": "$:/core/modules/filters/get.js", - "text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/getindex.js": { - "title": "$:/core/modules/filters/getindex.js", - "text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/has.js": { - "title": "$:/core/modules/filters/has.js", - "text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand] === \"\")) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && !(tiddler.fields[operator.operand] === \"\" || tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/haschanged.js": { - "title": "$:/core/modules/filters/haschanged.js", - "text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/indexes.js": { - "title": "$:/core/modules/filters/indexes.js", - "text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/insertbefore.js": { - "title": "$:/core/modules/filters/insertbefore.js", - "text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/is/current.js": { - "title": "$:/core/modules/filters/is/current.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is/image.js": { - "title": "$:/core/modules/filters/is/image.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is/missing.js": { - "title": "$:/core/modules/filters/is/missing.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is/orphan.js": { - "title": "$:/core/modules/filters/is/orphan.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is/shadow.js": { - "title": "$:/core/modules/filters/is/shadow.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is/system.js": { - "title": "$:/core/modules/filters/is/system.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is/tag.js": { - "title": "$:/core/modules/filters/is/tag.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is/tiddler.js": { - "title": "$:/core/modules/filters/is/tiddler.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "isfilteroperator" - }, - "$:/core/modules/filters/is.js": { - "title": "$:/core/modules/filters/is.js", - "text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/limit.js": { - "title": "$:/core/modules/filters/limit.js", - "text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/links.js": { - "title": "$:/core/modules/filters/links.js", - "text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/list.js": { - "title": "$:/core/modules/filters/list.js", - "text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/listed.js": { - "title": "$:/core/modules/filters/listed.js", - "text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/listops.js": { - "title": "$:/core/modules/filters/listops.js", - "text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/lookup.js": { - "title": "$:/core/modules/filters/lookup.js", - "text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || options.wiki.getTiddlerText(operator.operand + operator.suffix));\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/math.js": { - "title": "$:/core/modules/filters/math.js", - "text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,b);}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,b);}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,b);}\n);\n\nexports.sum = makeNumericArrayOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericArrayOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericArrayOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericArrayOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(stringifyNumber(fnCalc(parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericArrayOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\nfunction parseNumber(str) {\n\treturn parseFloat(str) || 0;\n}\n\nfunction stringifyNumber(num) {\n\treturn num + \"\";\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/minlength.js": { - "title": "$:/core/modules/filters/minlength.js", - "text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/modules.js": { - "title": "$:/core/modules/filters/modules.js", - "text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/moduletypes.js": { - "title": "$:/core/modules/filters/moduletypes.js", - "text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/next.js": { - "title": "$:/core/modules/filters/next.js", - "text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/plugintiddlers.js": { - "title": "$:/core/modules/filters/plugintiddlers.js", - "text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/prefix.js": { - "title": "$:/core/modules/filters/prefix.js", - "text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/previous.js": { - "title": "$:/core/modules/filters/previous.js", - "text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/range.js": { - "title": "$:/core/modules/filters/range.js", - "text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/regexp.js": { - "title": "$:/core/modules/filters/regexp.js", - "text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/removeprefix.js": { - "title": "$:/core/modules/filters/removeprefix.js", - "text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/removesuffix.js": { - "title": "$:/core/modules/filters/removesuffix.js", - "text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/sameday.js": { - "title": "$:/core/modules/filters/sameday.js", - "text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/search.js": { - "title": "$:/core/modules/filters/search.js", - "text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/shadowsource.js": { - "title": "$:/core/modules/filters/shadowsource.js", - "text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/sort.js": { - "title": "$:/core/modules/filters/sort.js", - "text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/splitbefore.js": { - "title": "$:/core/modules/filters/splitbefore.js", - "text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/storyviews.js": { - "title": "$:/core/modules/filters/storyviews.js", - "text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/strings.js": { - "title": "$:/core/modules/filters/strings.js", - "text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.trim = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.trim(a)];}\n);\n\nexports.concat = makeStringBinaryOperator(\n\tfunction(a,b) {return [\"\" + a + b];}\n);\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports.join = makeStringArrayOperator(\n\tfunction(accumulator,value,operand) {\n\t\treturn \"\" + (accumulator ? accumulator + (operand || \"\") + value : value);\n\t}\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringArrayOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || \"\";\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue)];\n\t};\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/subfilter.js": { - "title": "$:/core/modules/filters/subfilter.js", - "text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/subtiddlerfields.js": { - "title": "$:/core/modules/filters/subtiddlerfields.js", - "text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/suffix.js": { - "title": "$:/core/modules/filters/suffix.js", - "text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/tag.js": { - "title": "$:/core/modules/filters/tag.js", - "text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [];\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/tagging.js": { - "title": "$:/core/modules/filters/tagging.js", - "text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/tags.js": { - "title": "$:/core/modules/filters/tags.js", - "text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/title.js": { - "title": "$:/core/modules/filters/title.js", - "text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/untagged.js": { - "title": "$:/core/modules/filters/untagged.js", - "text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/wikiparserrules.js": { - "title": "$:/core/modules/filters/wikiparserrules.js", - "text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters/x-listops.js": { - "title": "$:/core/modules/filters/x-listops.js", - "text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n /*jslint node: true, browser: true */\n /*global $tw: false */\n \"use strict\";\n\n /*\n Fetch titles from the current list\n */\n var prepare_results = function (source) {\n var results = [];\n source(function (tiddler, title) {\n results.push(title);\n });\n return results;\n };\n\n /*\n Moves a number of items from the tail of the current list before the item named in the operand\n */\n exports.putbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list after the item named in the operand\n */\n exports.putafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Replaces the item named in the operand with a number of items from the tail of the current list\n */\n exports.replace = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -count) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list to the head of the list\n */\n exports.putfirst = function (source, operator) {\n var results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,1);\n return results.slice(-count).concat(results.slice(0, -count));\n };\n\n /*\n Moves a number of items from the head of the current list to the tail of the list\n */\n exports.putlast = function (source, operator) {\n var results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,1);\n return results.slice(count).concat(results.slice(0, count));\n };\n\n /*\n Moves the item named in the operand a number of places forward or backward in the list\n */\n exports.move = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1),\n marker = results.splice(index, 1),\n offset = (index + count) > 0 ? index + count : 0;\n return results.slice(0, offset).concat(marker).concat(results.slice(offset));\n };\n\n /*\n Returns the items from the current list that are after the item named in the operand\n */\n exports.allafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index === -1 || index > (results.length - 2)) ? [] :\n (operator.suffix) ? results.slice(index) :\n results.slice(index + 1);\n };\n\n /*\n Returns the items from the current list that are before the item named in the operand\n */\n exports.allbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index < 0) ? [] :\n (operator.suffix) ? results.slice(0, index + 1) :\n results.slice(0, index);\n };\n\n /*\n Appends the items listed in the operand array to the tail of the current list\n */\n exports.append = function (source, operator) {\n var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || append.length;\n return (append.length === 0) ? results :\n (operator.prefix) ? results.concat(append.slice(-count)) :\n results.concat(append.slice(0, count));\n };\n\n /*\n Prepends the items listed in the operand array to the head of the current list\n */\n exports.prepend = function (source, operator) {\n var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,prepend.length);\n return (prepend.length === 0) ? results :\n (operator.prefix) ? prepend.slice(-count).concat(results) :\n prepend.slice(0, count).concat(results);\n };\n\n /*\n Returns all items from the current list except the items listed in the operand array\n */\n exports.remove = function (source, operator) {\n var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || array.length,\n p,\n len,\n index;\n len = array.length - 1;\n for (p = 0; p < count; ++p) {\n if (operator.prefix) {\n index = results.indexOf(array[len - p]);\n } else {\n index = results.indexOf(array[p]);\n }\n if (index !== -1) {\n results.splice(index, 1);\n }\n }\n return results;\n };\n\n /*\n Returns all items from the current list sorted in the order of the items in the operand array\n */\n exports.sortby = function (source, operator) {\n var results = prepare_results(source);\n if (!results || results.length < 2) {\n return results;\n }\n var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n results.sort(function (a, b) {\n return lookup.indexOf(a) - lookup.indexOf(b);\n });\n return results;\n };\n\n /*\n Removes all duplicate items from the current list\n */\n exports.unique = function (source, operator) {\n var results = prepare_results(source);\n var set = results.reduce(function (a, b) {\n if (a.indexOf(b) < 0) {\n a.push(b);\n }\n return a;\n }, []);\n return set;\n };\n})();\n", - "type": "application/javascript", - "module-type": "filteroperator" - }, - "$:/core/modules/filters.js": { - "title": "$:/core/modules/filters.js", - "text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tif(results.length === 0) {\n\t\t\t\t\t\t\t// Main result so far is empty\n\t\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter\",function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikimethod" - }, - "$:/core/modules/info/platform.js": { - "title": "$:/core/modules/info/platform.js", - "text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "info" - }, - "$:/core/modules/keyboard.js": { - "title": "$:/core/modules/keyboard.js", - "text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/language.js": { - "title": "$:/core/modules/language.js", - "text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/macros/changecount.js": { - "title": "$:/core/modules/macros/changecount.js", - "text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/contrastcolour.js": { - "title": "$:/core/modules/macros/contrastcolour.js", - "text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/csvtiddlers.js": { - "title": "$:/core/modules/macros/csvtiddlers.js", - "text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/displayshortcuts.js": { - "title": "$:/core/modules/macros/displayshortcuts.js", - "text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/dumpvariables.js": { - "title": "$:/core/modules/macros/dumpvariables.js", - "text": "/*\\\ntitle: $:/core/modules/macros/dumpvariables.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to dump all active variable values\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"dumpvariables\";\n\nexports.params = [\n];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\tvar output = [\"|!Variable |!Value |\"],\n\t\tvariables = [], variable;\n\tfor(variable in this.variables) {\n\t\tvariables.push(variable);\n\t}\n\tvariables.sort();\n\tfor(var index=0; index<variables.length; index++) {\n\t\tvar variable = variables[index];\n\t\toutput.push(\"|\" + variable + \" |<input size=50 value=<<\" + variable + \">>/> |\")\n\t}\n\treturn output.join(\"\\n\");\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/jsontiddler.js": { - "title": "$:/core/modules/macros/jsontiddler.js", - "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/jsontiddlers.js": { - "title": "$:/core/modules/macros/jsontiddlers.js", - "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter) {\n\treturn this.wiki.getTiddlersAsJson(filter);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/makedatauri.js": { - "title": "$:/core/modules/macros/makedatauri.js", - "text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\treturn $tw.utils.makeDataUri(text,type);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/now.js": { - "title": "$:/core/modules/macros/now.js", - "text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/qualify.js": { - "title": "$:/core/modules/macros/qualify.js", - "text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/resolvepath.js": { - "title": "$:/core/modules/macros/resolvepath.js", - "text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/macros/version.js": { - "title": "$:/core/modules/macros/version.js", - "text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "macro" - }, - "$:/core/modules/parsers/audioparser.js": { - "title": "$:/core/modules/parsers/audioparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/binaryparser.js": { - "title": "$:/core/modules/parsers/binaryparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar BinaryParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/csvparser.js": { - "title": "$:/core/modules/parsers/csvparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/htmlparser.js": { - "title": "$:/core/modules/parsers/htmlparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/imageparser.js": { - "title": "$:/core/modules/parsers/imageparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/utils/parseutils.js": { - "title": "$:/core/modules/utils/parseutils.js", - "text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/parsers/pdfparser.js": { - "title": "$:/core/modules/parsers/pdfparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/textparser.js": { - "title": "$:/core/modules/parsers/textparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/videoparser.js": { - "title": "$:/core/modules/parsers/videoparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/wikiparser/rules/codeblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/codeinline.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/commentblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/commentinline.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/dash.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/dash.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/entity.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/entity.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/extlink.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/extlink.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/heading.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/heading.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/horizrule.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/html.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/html.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/image.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/image.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/import.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/import.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/list.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/list.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"p\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/macrodef.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/prettylink.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/quoteblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/rules.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/rules.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/styleblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/styleinline.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/syslink.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/syslink.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/table.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/table.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/typedblock.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/whitespace.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/rules/wikilink.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "wikirule" - }, - "$:/core/modules/parsers/wikiparser/wikiparser.js": { - "title": "$:/core/modules/parsers/wikiparser/wikiparser.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n", - "type": "application/javascript", - "module-type": "parser" - }, - "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": { - "title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js", - "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/pluginswitcher.js": { - "title": "$:/core/modules/pluginswitcher.js", - "text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/saver-handler.js": { - "title": "$:/core/modules/saver-handler.js", - "text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tthis.numChanges = 0;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\",\n\t\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/savers/andtidwiki.js": { - "title": "$:/core/modules/savers/andtidwiki.js", - "text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Save the file\n\twindow.twi.saveFile(pathname,text);\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/beaker.js": { - "title": "$:/core/modules/savers/beaker.js", - "text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/download.js": { - "title": "$:/core/modules/savers/download.js", - "text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/fsosaver.js": { - "title": "$:/core/modules/savers/fsosaver.js", - "text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/manualdownload.js": { - "title": "$:/core/modules/savers/manualdownload.js", - "text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/msdownload.js": { - "title": "$:/core/modules/savers/msdownload.js", - "text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/put.js": { - "title": "$:/core/modules/savers/put.js", - "text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/tiddlyfox.js": { - "title": "$:/core/modules/savers/tiddlyfox.js", - "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/tiddlyie.js": { - "title": "$:/core/modules/savers/tiddlyie.js", - "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/twedit.js": { - "title": "$:/core/modules/savers/twedit.js", - "text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/savers/upload.js": { - "title": "$:/core/modules/savers/upload.js", - "text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "saver" - }, - "$:/core/modules/server/authenticators/basic.js": { - "title": "$:/core/modules/server/authenticators/basic.js", - "text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve($tw.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + credentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n", - "type": "application/javascript", - "module-type": "authenticator" - }, - "$:/core/modules/server/authenticators/header.js": { - "title": "$:/core/modules/server/authenticators/header.js", - "text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\");\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n", - "type": "application/javascript", - "module-type": "authenticator" - }, - "$:/core/modules/server/routes/delete-tiddler.js": { - "title": "$:/core/modules/server/routes/delete-tiddler.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-favicon.js": { - "title": "$:/core/modules/server/routes/get-favicon.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-file.js": { - "title": "$:/core/modules/server/routes/get-file.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\");\n\tvar filename = path.resolve($tw.boot.wikiPath,\"files\",decodeURIComponent(state.params[0])),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tif(err.code === \"ENOENT\") {\n\t\t\t\tstatus = 404;\n\t\t\t\tcontent = \"File '\" + filename + \"' not found\";\n\t\t\t} else if(err.code === \"EACCES\") {\n\t\t\t\tstatus = 403;\n\t\t\t\tcontent = \"You do not have permission to access the file '\" + filename + \"'\";\n\t\t\t} else {\n\t\t\t\tstatus = 500;\n\t\t\t\tcontent = err.toString();\n\t\t\t}\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-index.js": { - "title": "$:/core/modules/server/routes/get-index.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require('zlib');\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers['accept-encoding'];\n\tif (!acceptEncoding) { acceptEncoding = ''; }\n\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\"));\n\n\tvar responseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders['Content-Encoding'] = 'deflate';\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders['Content-Encoding'] = 'gzip';\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\n\tresponse.writeHead(200, responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-login-basic.js": { - "title": "$:/core/modules/server/routes/get-login-basic.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-status.js": { - "title": "$:/core/modules/server/routes/get-status.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-tiddler-html.js": { - "title": "$:/core/modules/server/routes/get-tiddler-html.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-tiddler.js": { - "title": "$:/core/modules/server/routes/get-tiddler.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/get-tiddlers-json.js": { - "title": "$:/core/modules/server/routes/get-tiddlers-json.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/tiddlers.json\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\tvar tiddlerFields = {};\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tif(name !== \"text\") {\n\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\ttiddlers.push(tiddlerFields);\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/routes/put-tiddler.js": { - "title": "$:/core/modules/server/routes/put-tiddler.js", - "text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n", - "type": "application/javascript", - "module-type": "route" - }, - "$:/core/modules/server/server.js": { - "title": "$:/core/modules/server/server.js", - "text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"path-prefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response) {\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = self.wiki;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"hist\" variable)\n*/\nServer.prototype.listen = function(port,host) {\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t$tw.utils.log(\"Serving on \" + this.protocol + \"://\" + host + \":\" + port,\"brown/orange\");\n\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Listen\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n", - "type": "application/javascript", - "module-type": "library" - }, - "$:/core/modules/browser-messaging.js": { - "title": "$:/core/modules/browser-messaging.js", - "text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\tconsole.log(\"browser-messaging: \",document.location.toString())\n\t\tconsole.log(\"browser-messaging: Received message from\",event.origin);\n\t\tconsole.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/commands.js": { - "title": "$:/core/modules/startup/commands.js", - "text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/favicon.js": { - "title": "$:/core/modules/startup/favicon.js", - "text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/info.js": { - "title": "$:/core/modules/startup/info.js", - "text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin\n\tvar fields = {\n\t\ttitle: \"$:/temp/info-plugin\",\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo();\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/load-modules.js": { - "title": "$:/core/modules/startup/load-modules.js", - "text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/password.js": { - "title": "$:/core/modules/startup/password.js", - "text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/render.js": { - "title": "$:/core/modules/startup/render.js", - "text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar DRAFT_TIDDLER_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only drafts have changed\n\t\tvar onlyDraftsHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !tiddler.hasField(\"draft.of\")) {\n\t\t\t\tonlyDraftsHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyDraftsHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = DRAFT_TIDDLER_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/rootwidget.js": { - "title": "$:/core/modules/startup/rootwidget.js", - "text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tevent.event.target.ownerDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tevent.event.target.ownerDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(event.event.target.ownerDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tevent.event.target.ownerDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tevent.event.target.ownerDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup.js": { - "title": "$:/core/modules/startup.js", - "text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-US\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\tvar executeStartupTiddlers = function(tag) {\n\t\t$tw.utils.each($tw.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\t\t$tw.rootWidget.invokeActionString($tw.wiki.getTiddlerText(title),$tw.rootWidget);\n\t\t});\n\t};\n\texecuteStartupTiddlers(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t} \n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({wiki: $tw.wiki, dirtyTracking: !$tw.syncadaptor});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/story.js": { - "title": "$:/core/modules/startup/story.js", - "text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers();\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// If a target tiddler was specified add it to the history stack\n\tif(target && target !== \"\") {\n\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t}\n\t\t$tw.wiki.addToHistory(target);\n\t} else if(storyList.length > 0) {\n\t\t$tw.wiki.addToHistory(storyList[0]);\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/startup/windows.js": { - "title": "$:/core/modules/startup/windows.js", - "text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = title;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t},{\n\t\t\tname: \"click\",\n\t\t\thandlerObject: $tw.popup,\n\t\t\thandlerMethod: \"handleEvent\"\n\t\t}]);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "startup" - }, - "$:/core/modules/story.js": { - "title": "$:/core/modules/story.js", - "text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/storyviews/classic.js": { - "title": "$:/core/modules/storyviews/classic.js", - "text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar currWidth = targetElement.offsetWidth,\n\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Remove the dom nodes of the widget at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"translateX(0px)\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.classic = ClassicStoryView;\n\n})();", - "type": "application/javascript", - "module-type": "storyview" - }, - "$:/core/modules/storyviews/pop.js": { - "title": "$:/core/modules/storyviews/pop.js", - "text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n", - "type": "application/javascript", - "module-type": "storyview" - }, - "$:/core/modules/storyviews/zoomin.js": { - "title": "$:/core/modules/storyviews/zoomin.js", - "text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n", - "type": "application/javascript", - "module-type": "storyview" - }, - "$:/core/modules/syncer.js": { - "title": "$:/core/modules/syncer.js", - "text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || this.throttleInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\t\tcolour: \"cyan\",\n\t\t\tenable: this.logging\n\t\t});\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI) {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields.revision,\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title),\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t});\n};\n\n/*\nCreate an tiddlerInfo structure if it doesn't already exist\n*/\nSyncer.prototype.createTiddlerInfo = function(title) {\n\tif(!$tw.utils.hop(this.tiddlerInfo,title)) {\n\t\tthis.tiddlerInfo[title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1,\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t}\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields,hasBeenLazyLoaded) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title),\n\t\thasBeenLazyLoaded: hasBeenLazyLoaded !== undefined ? hasBeenLazyLoaded : true\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger the next sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert($tw.language.getString(\"Error/RetrievingSkinny\") + \":\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields,false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = Date.now(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Don't lazy load the same tiddler twice\n\tvar info = this.tiddlerInfo[title];\n\tif(!info || !info.hasBeenLazyLoaded) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.filterFn.call(this.wiki).indexOf(title) !== -1) {\n\t\t\tthis.createTiddlerInfo(title);\n\t\t\tthis.tiddlerInfo[title].hasBeenLazyLoaded = true;\n\t\t\t// Queue up a sync task to load this tiddler\n\t\t\tthis.enqueueSyncTask({\n\t\t\t\ttype: \"load\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = Date.now();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tthis.createTiddlerInfo(task.title);\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t\tthis.updateDirtyStatus();\n\t}\n\t// Process the queue\n\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = Date.now();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t},{\n\t\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.log(\" Not Dispatching 'save' task:\",task.title,\"tiddler does not exist\");\n\t\t\treturn callback(null);\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields,true);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tdelete self.tiddlerInfo[task.title];\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/tiddler.js": { - "title": "$:/core/modules/tiddler.js", - "text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = [];\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields.push(field + \": \" + this.getFieldString(field));\n\t\t\t}\n\t\t}\n\t}\n\treturn fields.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "tiddlermethod" - }, - "$:/core/modules/upgraders/plugins.js": { - "title": "$:/core/modules/upgraders/plugins.js", - "text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"] && incomingTiddler.version) {\n\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "upgrader" - }, - "$:/core/modules/upgraders/system.js": { - "title": "$:/core/modules/upgraders/system.js", - "text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(showAlert) {\n\t\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "upgrader" - }, - "$:/core/modules/upgraders/themetweaks.js": { - "title": "$:/core/modules/upgraders/themetweaks.js", - "text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "upgrader" - }, - "$:/core/modules/utils/crypto.js": { - "title": "$:/core/modules/utils/crypto.js", - "text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/csv.js": { - "title": "$:/core/modules/utils/csv.js", - "text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/diff-match-patch/diff_match_patch.js": { - "text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&\").replace(d,\"<\").replace(e,\">\").replace(f,\"¶<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);", - "type": "application/javascript", - "title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js", - "module-type": "library" - }, - "$:/core/modules/utils/dom/animations/slide.js": { - "title": "$:/core/modules/utils/dom/animations/slide.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "animation" - }, - "$:/core/modules/utils/dom/animator.js": { - "title": "$:/core/modules/utils/dom/animator.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/browser.js": { - "title": "$:/core/modules/utils/dom/browser.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/csscolorparser.js": { - "title": "$:/core/modules/utils/dom/csscolorparser.js", - "text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom.js": { - "title": "$:/core/modules/utils/dom.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\ttry {\n\t\tif(window.localStorage) {\n\t\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t\t}\n\t} catch(e) {\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\ttry {\n\t\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\n\t} catch(e) {\n\t\treturn \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/dragndrop.js": { - "title": "$:/core/modules/utils/dom/dragndrop.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/http.js": { - "title": "$:/core/modules/utils/dom/http.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!$tw.utils.hop(headers,\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e);\n\t}\n\treturn request;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/keyboard.js": { - "title": "$:/core/modules/utils/dom/keyboard.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/modal.js": { - "title": "$:/core/modules/utils/dom/modal.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/notifier.js": { - "title": "$:/core/modules/utils/dom/notifier.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/popup.js": { - "title": "$:/core/modules/utils/dom/popup.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/dom/scroller.js": { - "title": "$:/core/modules/utils/dom/scroller.js", - "text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/edition-info.js": { - "title": "$:/core/modules/utils/edition-info.js", - "text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils-node" - }, - "$:/core/modules/utils/fakedom.js": { - "title": "$:/core/modules/utils/fakedom.js", - "text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/utils/filesystem.js": { - "title": "$:/core/modules/utils/filesystem.js", - "text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils-node" - }, - "$:/core/modules/utils/logger.js": { - "title": "$:/core/modules/utils/logger.js", - "text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(this.enable && console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t}\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/parsetree.js": { - "title": "$:/core/modules/utils/parsetree.js", - "text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/performance.js": { - "title": "$:/core/modules/utils/performance.js", - "text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap of current values of measurements\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n}\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tself.measures = {};\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\tfor(var m in self.measures) {\n\t\t\t\tself.logger.log(\"+\" + m + \": \" + self.measures[m].toFixed(2) + \"ms\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments),\n\t\t\t\tvalue = self.measures[name] || 0;\n\t\t\tself.measures[name] = value + $tw.utils.timer(startTime);\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n", - "type": "application/javascript", - "module-type": "global" - }, - "$:/core/modules/utils/pluginmaker.js": { - "title": "$:/core/modules/utils/pluginmaker.js", - "text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/transliterate.js": { - "title": "$:/core/modules/utils/transliterate.js", - "text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/utils/utils.js": { - "title": "$:/core/modules/utils/utils.js", - "text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds());\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s) {\n\t// See http://www.json.org/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/\\x08/g, '\\\\b') // backspace\n\t\t.replace(/\\x0c/g, '\\\\f') // formfeed\n\t\t.replace(/\\t/g, '\\\\t') // tab\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10);\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\tif($tw.browser) {\n\t\t// TODO\n\t\tthrow \"$tw.utils.base64Decode() doesn't work in the browser\";\n\t} else {\n\t\treturn Buffer.from(string64,\"base64\").toString();\n\t}\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n})();\n", - "type": "application/javascript", - "module-type": "utils" - }, - "$:/core/modules/widgets/action-createtiddler.js": { - "title": "$:/core/modules/widgets/action-createtiddler.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.generateNewTitle(this.actionBaseTitle),\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/action-deletefield.js": { - "title": "$:/core/modules/widgets/action-deletefield.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/action-deletetiddler.js": { - "title": "$:/core/modules/widgets/action-deletetiddler.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/action-listops.js": { - "title": "$:/core/modules/widgets/action-listops.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/action-navigate.js": { - "title": "$:/core/modules/widgets/action-navigate.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/action-sendmessage.js": { - "title": "$:/core/modules/widgets/action-sendmessage.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/action-setfield.js": { - "title": "$:/core/modules/widgets/action-setfield.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/browse.js": { - "title": "$:/core/modules/widgets/browse.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/button.js": { - "title": "$:/core/modules/widgets/button.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/checkbox.js": { - "title": "$:/core/modules/widgets/checkbox.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/codeblock.js": { - "title": "$:/core/modules/widgets/codeblock.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/count.js": { - "title": "$:/core/modules/widgets/count.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = undefined;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/diff-text.js": { - "title": "$:/core/modules/widgets/diff-text.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/draggable.js": { - "title": "$:/core/modules/widgets/draggable.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedTiddlers.tag || changedTiddlers[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/droppable.js": { - "title": "$:/core/modules/widgets/droppable.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tvar domNode = this.document.createElement(tag),\n\t\tclasses = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tdomNode.className = classes.join(\" \");\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t]);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = event.ctrlKey && ! event.shiftKey ? \"ctrl\" : event.shiftKey && !event.ctrlKey ? \"shift\" : \n\t\t\t\tevent.ctrlKey && event.shiftKey ? \"ctrl-shift\" : \"normal\" ;\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableClass = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/dropzone.js": { - "title": "$:/core/modules/widgets/dropzone.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = \"tc-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"}\n\t]);\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/edit-binary.js": { - "title": "$:/core/modules/widgets/edit-binary.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Construct the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/edit-bitmap.js": { - "title": "$:/core/modules/widgets/edit-bitmap.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/edit-shortcut.js": { - "title": "$:/core/modules/widgets/edit-shortcut.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/edit-text.js": { - "title": "$:/core/modules/widgets/edit-text.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/edit.js": { - "title": "$:/core/modules/widgets/edit.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t},\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/element.js": { - "title": "$:/core/modules/widgets/element.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\ttag = \"h\" + headingLevel;\n\t}\n\t// Create the DOM node\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/encrypt.js": { - "title": "$:/core/modules/widgets/encrypt.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/entity.js": { - "title": "$:/core/modules/widgets/entity.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/fieldmangler.js": { - "title": "$:/core/modules/widgets/fieldmangler.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/fields.js": { - "title": "$:/core/modules/widgets/fields.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row);\n\t\t\t}\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/image.js": { - "title": "$:/core/modules/widgets/image.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/importvariables.js": { - "title": "$:/core/modules/widgets/importvariables.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar self = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\tvar widgetStackStart,widgetStackEnd;\n\tfunction addWidgetNode(widgetNode) {\n\t\tif(widgetNode) {\n\t\t\tif(!widgetStackStart && !widgetStackEnd) {\n\t\t\t\twidgetStackStart = widgetNode;\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t} else {\n\t\t\t\twidgetStackEnd.children = [widgetNode];\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = self.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\taddWidgetNode({\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t});\n\t\t\t\tparseTreeNode = parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\t// Add our own children to the end of the pile\n\tvar parseTreeNodes;\n\tif(widgetStackStart && widgetStackEnd) {\n\t\tparseTreeNodes = [widgetStackStart];\n\t\twidgetStackEnd.children = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/keyboard.js": { - "title": "$:/core/modules/widgets/keyboard.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.tag = this.getAttribute(\"tag\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/link.js": { - "title": "$:/core/modules/widgets/link.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/linkcatcher.js": { - "title": "$:/core/modules/widgets/linkcatcher.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/list.js": { - "title": "$:/core/modules/widgets/list.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/macrocall.js": { - "title": "$:/core/modules/widgets/macrocall.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/navigator.js": { - "title": "$:/core/modules/widgets/navigator.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList}\n\t));\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tvar p = storyList.indexOf(title);\n\twhile(p !== -1) {\n\t\tstoryList.splice(p,1);\n\t\tp = storyList.indexOf(title);\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tvar pos = storyList.indexOf(oldTitle);\n\tif(pos !== -1) {\n\t\tstoryList[pos] = newTitle;\n\t\tdo {\n\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\tif(pos !== -1) {\n\t\t\t\tstoryList.splice(pos,1);\n\t\t\t}\n\t\t} while(pos !== -1);\n\t} else {\n\t\tstoryList.splice(0,0,newTitle);\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tthis.wiki.addToStory(title,fromTitle,this.storyTitle,{openLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),openLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")});\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.wiki.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.wiki.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\nconsole.log(\"Relinking '\" + draftOf + \"' to '\" + draftTitle + \"'\");\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-renaming-tiddler\", event);\n\tvar paramObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\t$tw.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/password.js": { - "title": "$:/core/modules/widgets/password.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/qualify.js": { - "title": "$:/core/modules/widgets/qualify.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/radio.js": { - "title": "$:/core/modules/widgets/radio.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n \t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n \t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/range.js": { - "title": "$:/core/modules/widgets/range.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\n\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tvalue = this.defaultValue;\n\tif(tiddler) {\n\t\tif($tw.utils.hop(tiddler.fields,this.tiddlerField)) {\n\t\t\tvalue = tiddler.fields[this.tiddlerField] || \"\";\n\t\t} else {\n\t\t\tvalue = this.defaultValue || \"\";\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.handleChangeEvent = function(event) {\n\tthis.wiki.setText(this.tiddlerTitle ,this.tiddlerField, null,this.inputDomNode.value);\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes['min'] || changedAttributes['max'] || changedAttributes['increment'] || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/raw.js": { - "title": "$:/core/modules/widgets/raw.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/reveal.js": { - "title": "$:/core/modules/widgets/reveal.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tdomNode.style.left = Math.max(0, this.popup.left - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = Math.max(0, this.popup.top - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = Math.max(0, this.popup.top + this.popup.height - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tdomNode.style.left = Math.max(0, this.popup.left + this.popup.width - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state;\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) : this[\"default\"] || this.getVariable(\"currentTiddler\");\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) : this[\"default\"] || this.getVariable(\"currentTiddler\");\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || this[\"default\"] || this.getVariable(\"currentTiddler\");\t\n\t\t} else {\n\t\t\tstate = this[\"default\"] || this.getVariable(\"currentTiddler\");\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) == 0);\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) == 0);\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen || (this.stateTiddlerTitle && changedTiddlers[this.stateTiddlerTitle])) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/scrollable.js": { - "title": "$:/core/modules/widgets/scrollable.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/select.js": { - "title": "$:/core/modules/widgets/select.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tif(values.indexOf(select.children[i].value) != -1) {\n\t\t\t\tselect.children[i].selected = true;\n\t\t\t}\n\t\t}\n\t\t\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/set.js": { - "title": "$:/core/modules/widgets/set.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/text.js": { - "title": "$:/core/modules/widgets/text.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/tiddler.js": { - "title": "$:/core/modules/widgets/tiddler.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/transclude.js": { - "title": "$:/core/modules/widgets/transclude.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/vars.js": { - "title": "$:/core/modules/widgets/vars.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/view.js": { - "title": "$:/core/modules/widgets/view.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/widget.js": { - "title": "$:/core/modules/widgets/widget.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tif(arguments.length > 0) {\n\t\tthis.initialise(parseTreeNode,options);\n\t}\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.render(parent,nextSibling);\n\t});\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar self = this,\n\t\trefreshed = false;\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\trefreshed = childWidget.refresh(changedTiddlers) || refreshed;\n\t});\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/widgets/wikify.js": { - "title": "$:/core/modules/widgets/wikify.js", - "text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n", - "type": "application/javascript", - "module-type": "widget" - }, - "$:/core/modules/wiki-bulkops.js": { - "title": "$:/core/modules/wiki-bulkops.js", - "text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = (tiddler.fields.tags || []).slice(0),\n\t\t\t\t\tlist = (tiddler.fields.list || []).slice(0),\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n", - "type": "application/javascript", - "module-type": "wikimethod" - }, - "$:/core/modules/wiki.js": { - "title": "$:/core/modules/wiki.js", - "text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x : x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\n\t\t}\n\t});\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\tvar self = this;\n\treturn this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\tvar tagmap = self.getTagMap();\n\t\treturn self.sortByList(tagmap[tag],tag);\n\t});\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\tfunction replaceItem(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\treplaceItem(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\treplaceItem(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// We get the currPos //after// figuring out the newPos, because recursive replaceItem calls might alter title's currPos\n\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\tif(newPos === -1) {\n\t\t\t\t\tnewPos = currPos;\n\t\t\t\t}\n\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t}\n\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\treplaceItem(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title}},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(tiddler.fields.text !== undefined) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text;\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n})();\n\n", - "type": "application/javascript", - "module-type": "wikimethod" - }, - "$:/palettes/Blanca": { - "title": "$:/palettes/Blanca", - "name": "Blanca", - "description": "A clean white palette to let you focus", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/Blue": { - "title": "$:/palettes/Blue", - "name": "Blue", - "description": "A blue theme", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/Muted": { - "title": "$:/palettes/Muted", - "name": "Muted", - "description": "Bright tiddlers on a muted background", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/ContrastLight": { - "title": "$:/palettes/ContrastLight", - "name": "Contrast (Light)", - "description": "High contrast and unambiguous (light version)", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/ContrastDark": { - "title": "$:/palettes/ContrastDark", - "name": "Contrast (Dark)", - "description": "High contrast and unambiguous (dark version)", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/DarkPhotos": { - "title": "$:/palettes/DarkPhotos", - "created": "20150402111612188", - "description": "Good with dark photo backgrounds", - "modified": "20150402112344080", - "name": "DarkPhotos", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/Rocker": { - "title": "$:/palettes/Rocker", - "name": "Rocker", - "description": "A dark theme", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/SolarFlare": { - "title": "$:/palettes/SolarFlare", - "name": "Solar Flare", - "description": "Warm, relaxing earth colours", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n download-foreground: <<colour background>>\n dragger-foreground: <<colour background>>\n dropdown-background: <<colour background>>\n modal-background: <<colour background>>\n sidebar-foreground-shadow: <<colour background>>\n tiddler-background: <<colour background>>\n tiddler-border: <<colour background>>\n tiddler-link-background: <<colour background>>\n tab-background-selected: <<colour background>>\n dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n dragger-background: <<colour foreground>>\n tab-foreground: <<colour foreground>>\n tab-foreground-selected: <<colour tab-foreground>>\n sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n sidebar-tab-foreground: <<colour tab-foreground>>\n sidebar-button-foreground: <<colour foreground>>\n sidebar-controls-foreground: <<colour foreground>>\n sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n alert-muted-foreground: <<colour base01>>\n: base00\n code-foreground: <<colour base00>>\n message-foreground: <<colour base00>>\n tag-foreground: <<colour base00>>\n: base0\n sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n muted-foreground: <<colour base1>>\n blockquote-bar: <<colour muted-foreground>>\n dropdown-border: <<colour muted-foreground>>\n sidebar-muted-foreground: <<colour muted-foreground>>\n tiddler-title-foreground: <<colour muted-foreground>>\n site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n modal-footer-background: <<colour base2>>\n page-background: <<colour base2>>\n modal-backdrop: <<colour page-background>>\n notification-background: <<colour page-background>>\n code-background: <<colour page-background>>\n code-border: <<colour code-background>>\n pre-background: <<colour page-background>>\n pre-border: <<colour pre-background>>\n sidebar-tab-background-selected: <<colour page-background>>\n table-header-background: <<colour base2>>\n tag-background: <<colour base2>>\n tiddler-editor-background: <<colour base2>>\n tiddler-info-background: <<colour base2>>\n tiddler-info-tab-background: <<colour base2>>\n tab-background: <<colour base2>>\n dropdown-tab-background: <<colour tab-background>>\n: base3\n alert-background: <<colour base3>>\n message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n alert-highlight: <<colour magenta>>\n: violet\n external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n primary: <<colour blue-muted>>\n download-background: <<colour primary>>\n tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n modal-footer-border: <<colour tab-border>>\n modal-header-border: <<colour tab-border>>\n notification-border: <<colour tab-border>>\n sidebar-tab-border: <<colour tab-border>>\n tab-border-selected: <<colour tab-border>>\n sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n" - }, - "$:/palettes/Vanilla": { - "title": "$:/palettes/Vanilla", - "name": "Vanilla", - "description": "Pale and unobtrusive", - "tags": "$:/tags/Palette", - "type": "application/x-tiddler-dictionary", - "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n" - }, - "$:/core/readme": { - "title": "$:/core/readme", - "text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n" - }, - "$:/library/sjcl.js/license": { - "title": "$:/library/sjcl.js/license", - "type": "text/plain", - "text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA" - }, - "$:/core/templates/MOTW.html": { - "title": "$:/core/templates/MOTW.html", - "text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com --> " - }, - "$:/core/templates/alltiddlers.template.html": { - "title": "$:/core/templates/alltiddlers.template.html", - "type": "text/vnd.tiddlywiki-html", - "text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n" - }, - "$:/core/templates/canonical-uri-external-image": { - "title": "$:/core/templates/canonical-uri-external-image", - "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>" - }, - "$:/core/templates/canonical-uri-external-raw": { - "title": "$:/core/templates/canonical-uri-external-raw", - "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>" - }, - "$:/core/templates/canonical-uri-external-text": { - "title": "$:/core/templates/canonical-uri-external-text", - "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid" - }, - "$:/core/templates/css-tiddler": { - "title": "$:/core/templates/css-tiddler", - "text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`" - }, - "$:/core/templates/exporters/CsvFile": { - "title": "$:/core/templates/exporters/CsvFile", - "tags": "$:/tags/Exporter", - "description": "{{$:/language/Exporters/CsvFile}}", - "extension": ".csv", - "text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n" - }, - "$:/core/templates/exporters/JsonFile": { - "title": "$:/core/templates/exporters/JsonFile", - "tags": "$:/tags/Exporter", - "description": "{{$:/language/Exporters/JsonFile}}", - "extension": ".json", - "text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n" - }, - "$:/core/templates/exporters/StaticRiver": { - "title": "$:/core/templates/exporters/StaticRiver", - "tags": "$:/tags/Exporter", - "description": "{{$:/language/Exporters/StaticRiver}}", - "extension": ".html", - "text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}\n
\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n
\n\n\n\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n
\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n
\n\n\n" - }, - "$:/core/templates/exporters/StaticRiver/Content": { - "title": "$:/core/templates/exporters/StaticRiver/Content", - "text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<>\n" - }, - "$:/core/templates/exporters/TidFile": { - "title": "$:/core/templates/exporters/TidFile", - "tags": "$:/tags/Exporter", - "description": "{{$:/language/Exporters/TidFile}}", - "extension": ".tid", - "text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<>" - }, - "$:/core/save/all-external-js": { - "title": "$:/core/save/all-external-js", - "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n" - }, - "$:/core/templates/tiddlywiki5.js": { - "title": "$:/core/templates/tiddlywiki5.js", - "text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n" - }, - "$:/core/templates/tiddlywiki5.js/tiddlers": { - "title": "$:/core/templates/tiddlywiki5.js/tiddlers", - "text": "`\n$tw.preloadTiddlerArray(`<$text text=<>/>`);\n$tw.preloadTiddlerArray([{\n\ttitle: \"$:/config/SaveWikiButton/Template\",\n\ttext: \"$:/core/save/all-external-js\"\n}]);\n`\n" - }, - "$:/core/templates/tiddlywiki5-external-js.html": { - "title": "$:/core/templates/tiddlywiki5-external-js.html", - "text": "\\rules only filteredtranscludeinline transcludeinline\n\n{{$:/core/templates/MOTW.html}}\n\n\n\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n\n\n\n\n\n\n\n\n\n\n\n{{$:/core/wiki/title}}\n\n\n\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n\n\n\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n\n
\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n
\n\n\n\n{{$:/core/templates/store.area.template.html}}\n\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n\n\n\n" - }, - "$:/core/templates/html-div-tiddler": { - "title": "$:/core/templates/html-div-tiddler", - "text": "``>\n
`<$view field=\"text\" format=\"htmlencoded\" />`
\n`\n" - }, - "$:/core/templates/html-tiddler": { - "title": "$:/core/templates/html-tiddler", - "text": "<$view field=\"text\" format=\"htmlwikified\" />" - }, - "$:/core/templates/javascript-tiddler": { - "title": "$:/core/templates/javascript-tiddler", - "text": "`` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />``" - }, - "$:/core/templates/json-tiddler": { - "title": "$:/core/templates/json-tiddler", - "text": "<$text text=<>/>" - }, - "$:/core/templates/module-tiddler": { - "title": "$:/core/templates/module-tiddler", - "text": "`` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n`" - }, - "$:/core/templates/plain-text-tiddler": { - "title": "$:/core/templates/plain-text-tiddler", - "text": "<$view field=\"text\" format=\"text\" />" - }, - "$:/core/templates/raw-static-tiddler": { - "title": "$:/core/templates/raw-static-tiddler", - "text": "<$view field=\"text\" format=\"plainwikified\" />" - }, - "$:/core/save/all": { - "title": "$:/core/save/all", - "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n" - }, - "$:/core/save/empty": { - "title": "$:/core/save/empty", - "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n" - }, - "$:/core/save/lazy-all": { - "title": "$:/core/save/lazy-all", - "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n" - }, - "$:/core/save/lazy-images": { - "title": "$:/core/save/lazy-images", - "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n" - }, - "$:/core/templates/server/static.sidebar.wikitext": { - "title": "$:/core/templates/server/static.sidebar.wikitext", - "text": "\\whitespace trim\n
\n
\n

\n<$transclude tiddler=\"$:/SiteTitle\"/>\n

\n
\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n
\n

\n

\n
\n<$list filter={{$:/DefaultTiddlers}}>\n
\n<$link><$text text=<>/>\n
\n\n
\n\n" - }, - "$:/core/templates/server/static.tiddler.html": { - "title": "$:/core/templates/server/static.tiddler.html", - "text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n\n\n\n\n\n\n\n\n\n\n\n<$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/>\n\n\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n
\n
\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n
\n
\n\n" - }, - "$:/core/templates/server/static.tiddler.wikitext": { - "title": "$:/core/templates/server/static.tiddler.wikitext", - "text": "\\whitespace trim\n
\n
\n

<$text text=<>/>

\n
\n
\n
\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n
\n
\n<$list filter=\"[all[current]tags[]sort[title]]\">\nencodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<>/>\n\n\n
\n
\n<$transclude mode=\"block\"/>\n
\n" - }, - "$:/core/templates/single.tiddler.window": { - "title": "$:/core/templates/single.tiddler.window", - "text": "<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"tempCurrentTiddler\" value=<>>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=<>>\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "$:/core/templates/split-recipe": { - "title": "$:/core/templates/split-recipe", - "text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n\n" - }, - "$:/core/templates/static-tiddler": { - "title": "$:/core/templates/static-tiddler", - "text": ">>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n" - }, - "$:/core/templates/static.area": { - "title": "$:/core/templates/static.area", - "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n\n" - }, - "$:/core/templates/static.content": { - "title": "$:/core/templates/static.content", - "text": "\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n
    \n<$list filter=<>>\n
  • <$view field=\"title\" format=\"text\">
  • \n\n
\n" - }, - "$:/core/templates/static.template.css": { - "title": "$:/core/templates/static.template.css", - "text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n" - }, - "$:/core/templates/static.template.html": { - "title": "$:/core/templates/static.template.html", - "type": "text/vnd.tiddlywiki-html", - "text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n\n\n\n\n\n\n\n\n\n\n\n\n{{$:/core/wiki/title}}\n
\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n
\n\n\n\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n\n\n" - }, - "$:/core/templates/static.tiddler.html": { - "title": "$:/core/templates/static.tiddler.html", - "text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`\n\n\n\n\n\n\n\n\n\n\n\n\n`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`\n\n\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n
\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n
\n\n\n`" - }, - "$:/core/templates/store.area.template.html": { - "title": "$:/core/templates/store.area.template.html", - "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`
`\n<$list filter=<> template=\"$:/core/templates/html-div-tiddler\"/>\n`
`\n\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n``\n`
`\n<$encrypt filter=<>/>\n`
`\n" - }, - "$:/core/templates/tid-tiddler": { - "title": "$:/core/templates/tid-tiddler", - "text": "<$fields exclude='text bag' template='$name$: $value$\n'>`\n`<$view field=\"text\" format=\"text\" />" - }, - "$:/core/templates/tiddler-metadata": { - "title": "$:/core/templates/tiddler-metadata", - "text": "<$fields exclude='text bag' template='$name$: $value$\n'>" - }, - "$:/core/templates/tiddlywiki5.html": { - "title": "$:/core/templates/tiddlywiki5.html", - "text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter] [subfilterplugintiddlers[]]\">\n`\n`{{$:/core/templates/MOTW.html}}`\n\n\n\n`{{{ [tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n\n\n\n\n\n\n\n\n\n\n\n`{{$:/core/wiki/title}}`\n\n\n\n`{{{ [enlisttag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlisttag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlisttag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n\n\n\n`{{{ [enlisttag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n\n
\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n
\n\n\n\n`{{$:/core/templates/store.area.template.html}}`\n\n
\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n
\n\n
\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n
\n\n
\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n
\n\n`{{{ [enlisttag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n\n`\n" - }, - "$:/core/templates/version": { - "title": "$:/core/templates/version", - "text": "<>" - }, - "$:/core/templates/wikified-tiddler": { - "title": "$:/core/templates/wikified-tiddler", - "text": "<$transclude />" - }, - "$:/core/ui/AboveStory/tw2-plugin-check": { - "title": "$:/core/ui/AboveStory/tw2-plugin-check", - "tags": "$:/tags/AboveStory", - "text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n
\n\n<>\n\n
    \n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n
  • \n\n<$link><$view field=\"title\"/>\n\n
  • \n\n\n\n
\n\n
\n\n\n" - }, - "$:/core/ui/Actions/new-image": { - "title": "$:/core/ui/Actions/new-image", - "tags": "$:/tags/Actions", - "description": "create a new image tiddler", - "text": "\\define get-type()\nimage/$(imageType)$\n\\end\n<$vars imageType={{$:/config/NewImageType}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<>/>\n\n" - }, - "$:/core/ui/Actions/new-journal": { - "title": "$:/core/ui/Actions/new-journal", - "tags": "$:/tags/Actions", - "description": "create a new journal tiddler", - "text": "<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<>/>\"\"\">\n<$reveal type=\"nomatch\" state=<> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<> tags=<> text={{{ [get[]] }}}/>\n\n<$reveal type=\"match\" state=<> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<> tags=<> text=<>/>\n\n\n\n" - }, - "$:/core/ui/Actions/new-tiddler": { - "title": "$:/core/ui/Actions/new-tiddler", - "tags": "$:/tags/Actions", - "description": "create a new empty tiddler", - "text": "<$action-sendmessage $message=\"tm-new-tiddler\"/>\n" - }, - "$:/core/ui/AdvancedSearch/Filter": { - "title": "$:/core/ui/AdvancedSearch/Filter", - "tags": "$:/tags/AdvancedSearch", - "caption": "{{$:/language/Search/Filter/Caption}}", - "text": "\\define lingo-base() $:/language/Search/\n<>\n\n\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n
\n<>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n
\n\n\n" - }, - "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": { - "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear", - "tags": "$:/tags/AdvancedSearch/FilterButton", - "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n\n\n" - }, - "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": { - "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete", - "tags": "$:/tags/AdvancedSearch/FilterButton", - "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n\n\n\n<$reveal state=<> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n
\n
\n
\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <> tiddler(s)?\n\n
\n
\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n\n
\n
\n
\n\n" - }, - "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": { - "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown", - "tags": "$:/tags/AdvancedSearch/FilterButton", - "text": "\n<$button popup=<> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n\n\n\n<$reveal state=<> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n
\n
\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/>\n\n
\n
\n\n\n\n" - }, - "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": { - "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export", - "tags": "$:/tags/AdvancedSearch/FilterButton", - "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n\n" - }, - "$:/core/ui/AdvancedSearch/Shadows": { - "title": "$:/core/ui/AdvancedSearch/Shadows", - "tags": "$:/tags/AdvancedSearch", - "caption": "{{$:/language/Search/Shadows/Caption}}", - "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<>\n\n
\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n\n\n
\n\n\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"
{{$:/language/Search/Search/TooShort}}
\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n
\n\n<>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n
\n\n\n\n\n\n\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n\n" - }, - "$:/core/ui/AdvancedSearch/Standard": { - "title": "$:/core/ui/AdvancedSearch/Standard", - "tags": "$:/tags/AdvancedSearch", - "caption": "{{$:/language/Search/Standard/Caption}}", - "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<>\n\n
\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n\n\n
\n\n\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"
{{$:/language/Search/Search/TooShort}}
\"\"\" variable=\"listItem\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n\n\n\n" - }, - "$:/core/ui/AdvancedSearch/System": { - "title": "$:/core/ui/AdvancedSearch/System", - "tags": "$:/tags/AdvancedSearch", - "caption": "{{$:/language/Search/System/Caption}}", - "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<>\n\n
\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n\n\n
\n\n\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"
{{$:/language/Search/Search/TooShort}}
\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n
\n\n<>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n
\n\n\n\n\n\n\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n\n" - }, - "$:/AdvancedSearch": { - "title": "$:/AdvancedSearch", - "icon": "$:/core/images/advanced-search-button", - "color": "#bbb", - "text": "
\n<>\n
\n" - }, - "$:/core/ui/AlertTemplate": { - "title": "$:/core/ui/AlertTemplate", - "text": "
\n
\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<>/>{{$:/core/images/delete-button}}\n
\n
\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\">({{$:/language/Count}}: <$view field=\"count\"/>)\n
\n
\n\n<$transclude/>\n\n
\n
\n" - }, - "$:/core/ui/BinaryWarning": { - "title": "$:/core/ui/BinaryWarning", - "text": "\\define lingo-base() $:/language/BinaryWarning/\n
\n\n<>\n\n
\n" - }, - "$:/core/ui/Components/plugin-info": { - "title": "$:/core/ui/Components/plugin-info", - "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n
\n<$reveal type=\"nomatch\" state=<> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n\n\n<$reveal type=\"match\" state=<> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n\n\n
\n
\n<$transclude tiddler=<> subtiddler=<>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n\n
\n
\n

\n''<$view field=\"description\"><$view field=\"title\"/>'' $disabledMessage$\n

\n

\n<$view field=\"title\"/>\n

\n

\n
<$view field=\"version\"/>
\n

\n
\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<>>\n<$reveal type=\"nomatch\" state=<> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<>\n\n\n<$reveal type=\"match\" state=<> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<\">>\n\n\n<$reveal type=\"match\" text=\"yes\" state=<> default=\"\"\"$default-popup-state$\"\"\">\n
\n
\n<$list filter=\"[all[current]] -[[$:/core]]\">\n
\n<$reveal type=\"nomatch\" state=<> text=\"yes\">\n<$button set=<> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<>\n\n\n<$reveal type=\"match\" state=<> text=\"yes\">\n<$button set=<> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<>\n\n\n
\n\n<$set name=\"tabsList\" filter=\"[list[]] contents\">\n<$macrocall $name=\"tabs\" state=<> tabsList=<> default={{{ [enlist] }}} template=\"$:/core/ui/PluginInfo\"/>\n\n
\n
\n\n\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<> default-popup-state=<>/>\n" - }, - "$:/core/ui/Components/tag-link": { - "title": "$:/core/ui/Components/tag-link", - "text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n\n\n" - }, - "$:/core/ui/ControlPanel/Advanced": { - "title": "$:/core/ui/ControlPanel/Advanced", - "tags": "$:/tags/ControlPanel/Info", - "caption": "{{$:/language/ControlPanel/Advanced/Caption}}", - "text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n
\n<>\n
\n" - }, - "$:/core/ui/ControlPanel/Appearance": { - "title": "$:/core/ui/ControlPanel/Appearance", - "tags": "$:/tags/ControlPanel", - "caption": "{{$:/language/ControlPanel/Appearance/Caption}}", - "text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n
\n<>\n
\n" - }, - "$:/core/ui/ControlPanel/Basics": { - "title": "$:/core/ui/ControlPanel/Basics", - "tags": "$:/tags/ControlPanel/Info", - "caption": "{{$:/language/ControlPanel/Basics/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n\n\\end\n\n|<> |''<>'' |\n|<$link to=\"$:/SiteTitle\"><> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><> |<>
<$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/>
//<>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><> |<$edit-text tiddler=\"$:/config/NewJournal/Tags\" default=\"\" tag=\"input\"/> |\n|<> |{{$:/snippets/minilanguageswitcher}} |\n|<> |<> |\n|<> |<> |\n|<> |<> |\n|<> |<> |\n|<> |<> |\n" - }, - "$:/core/ui/ControlPanel/EditorTypes": { - "title": "$:/core/ui/ControlPanel/EditorTypes", - "tags": "$:/tags/ControlPanel/Advanced", - "caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<>\n\n\n\n\n\n\n\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n\n\n\n\n\n\n
<><>
\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n\n\n\n<$view field=\"text\"/>\n
\n" - }, - "$:/core/ui/ControlPanel/Info": { - "title": "$:/core/ui/ControlPanel/Info", - "tags": "$:/tags/ControlPanel", - "caption": "{{$:/language/ControlPanel/Info/Caption}}", - "text": "{{$:/language/ControlPanel/Info/Hint}}\n\n
\n<>\n
\n" - }, - "$:/core/ui/ControlPanel/KeyboardShortcuts": { - "title": "$:/core/ui/ControlPanel/KeyboardShortcuts", - "tags": "$:/tags/ControlPanel", - "caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n
\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} style=\"width:auto;\"/> <$button>\n<>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n\n
\n\\end\n\n\\define shortcut-list-item(caption)\n\n\n\n<>\n\n\n
\n<$button popup=<> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"\" separator=\" \" suffix=\"\"/>\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n
\n
\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n
\n//<>//\n
\n\"\"\">\n
\n<$button class=\"tc-btn-invisible\" tooltip=<>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove]\"\n/>\n×\n\n\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<>/>\n\n
\n\n
\n<$macrocall $name=\"new-shortcut\" title=<>/>\n
\n
\n\n
\n\n\\end\n\n\\define shortcut-list(caption,prefix)\n\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<>\n\n\n\\end\n\n\\define shortcut-editor()\n<>\n<>\n<>\n<>\n<>\n<>\n<>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"\" separator=\" \" suffix=\"\"/>\n\\end\n\n\\define shortcut-item-inner()\n\n\n<$reveal type=\"nomatch\" state=<> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n\n\n<$reveal type=\"match\" state=<> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n\n\n''<$text text=<>/>''\n\n\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n\n\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<>\n\n\n\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[prefix[open]]\" variable=\"listItem\">\n<>\n\n\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<>>\n<>\n\n\\end\n\n\n\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<>\n\n\n
\n" - }, - "$:/core/ui/ControlPanel/LoadedModules": { - "title": "$:/core/ui/ControlPanel/LoadedModules", - "tags": "$:/tags/ControlPanel/Advanced", - "caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/\n<>\n\n{{$:/snippets/modules}}\n" - }, - "$:/core/ui/ControlPanel/Modals/AddPlugins": { - "title": "$:/core/ui/ControlPanel/Modals/AddPlugins", - "subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}", - "text": "\\define install-plugin-button()\n<$button>\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$list filter=\"[get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\"\"\">\n{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\n\n\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<>>\n
\n
\n<$reveal type=\"nomatch\" state=<> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n\n\n<$reveal type=\"match\" state=<> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n\n\n
\n
\n<$list filter=\"[has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n\n\n
\n
\n

<$view tiddler=<> field=\"description\"/>

\n

<$view tiddler=<> field=\"original-title\"/>

\n
<$view tiddler=<> field=\"version\"/>
\n
\n
\n<>\n
\n
\n<$reveal type=\"match\" text=\"yes\" state=<>>\n
\n
\n<$list filter=\"[get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\"\"\">\n\n{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}\n\n\n
\n
\n<$transclude tiddler=<> field=\"readme\" mode=\"block\"/>\n
\n
\n\n\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n\n\n
\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]\" variable=\"assetInfo\">\n<>\n\n
\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<>>\n\n<>\n\n\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n\n\n\\end\n\n\\define plugin-library-listing()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n
\n\n!! <$link><$transclude field=\"caption\"><$view field=\"title\"/>\n\n//<$view field=\"url\"/>//\n\n<$transclude/>\n\n<$set name=PluginLibraryURL value={{!!url}}>\n<>\n\n\n<>\n
\n\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n
\n<>\n
\n" - }, - "$:/core/ui/ControlPanel/Palette": { - "title": "$:/core/ui/ControlPanel/Palette", - "tags": "$:/tags/ControlPanel/Appearance", - "caption": "{{$:/language/ControlPanel/Palette/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><>\n\n\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><>\n{{$:/snippets/paletteeditor}}\n\n\n\n" - }, - "$:/core/ui/ControlPanel/Parsing": { - "title": "$:/core/ui/ControlPanel/Parsing", - "tags": "$:/tags/ControlPanel/Advanced", - "caption": "{{$:/language/ControlPanel/Parsing/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<>\n\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n
<>
\n\n\\end\n\n<>\n\n
\n
<>
\n<>\n
<>
\n<>\n
<>
\n<>\n
" - }, - "$:/core/ui/ControlPanel/Plugins/Add/Languages": { - "title": "$:/core/ui/ControlPanel/Plugins/Add/Languages", - "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)", - "text": "<>\n" - }, - "$:/core/ui/ControlPanel/Plugins/Add/Plugins": { - "title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins", - "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)", - "text": "<>\n" - }, - "$:/core/ui/ControlPanel/Plugins/Add/Themes": { - "title": "$:/core/ui/ControlPanel/Plugins/Add/Themes", - "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)", - "text": "<>\n" - }, - "$:/core/ui/ControlPanel/Plugins/AddPlugins": { - "title": "$:/core/ui/ControlPanel/Plugins/AddPlugins", - "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green\" style=\"background:blue;\">\n{{$:/core/images/download-button}} <>\n\n" - }, - "$:/core/ui/ControlPanel/Plugins/Installed/Languages": { - "title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages", - "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)", - "text": "<>\n" - }, - "$:/core/ui/ControlPanel/Plugins/Installed/Plugins": { - "title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins", - "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)", - "text": "<>\n" - }, - "$:/core/ui/ControlPanel/Plugins/Installed/Themes": { - "title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes", - "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)", - "text": "<>\n" - }, - "$:/core/ui/ControlPanel/Plugins": { - "title": "$:/core/ui/ControlPanel/Plugins", - "tags": "$:/tags/ControlPanel", - "caption": "{{$:/language/ControlPanel/Plugins/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<> template=\"$:/core/ui/Components/plugin-info\"/>\n\n\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<>\n\n<>\n" - }, - "$:/core/ui/ControlPanel/Saving/DownloadSaver": { - "title": "$:/core/ui/ControlPanel/Saving/DownloadSaver", - "tags": "$:/tags/ControlPanel/Saving", - "caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <> \n" - }, - "$:/core/ui/ControlPanel/Saving/General": { - "title": "$:/core/ui/ControlPanel/Saving/General", - "tags": "$:/tags/ControlPanel/Saving", - "caption": "{{$:/language/ControlPanel/Saving/General/Caption}}", - "list-before": "", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><>\n\n<>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <> \n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <> \n" - }, - "$:/core/ui/ControlPanel/Saving/TiddlySpot": { - "title": "$:/core/ui/ControlPanel/Saving/TiddlySpot", - "tags": "$:/tags/ControlPanel/Saving", - "caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<>\n\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n\n\n\n\\end\n\n<>\n\n|<> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<> |<$password name=\"upload\"/> |\n|<> |<> |\n\n''<>''\n\n|<> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<>" - }, - "$:/core/ui/ControlPanel/Saving": { - "title": "$:/core/ui/ControlPanel/Saving", - "tags": "$:/tags/ControlPanel", - "caption": "{{$:/language/ControlPanel/Saving/Caption}}", - "text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n
\n<>\n
\n" - }, - "$:/core/buttonstyles/Borderless": { - "title": "$:/core/buttonstyles/Borderless", - "tags": "$:/tags/ToolbarButtonStyle", - "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}", - "text": "tc-btn-invisible" - }, - "$:/core/buttonstyles/Boxed": { - "title": "$:/core/buttonstyles/Boxed", - "tags": "$:/tags/ToolbarButtonStyle", - "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}", - "text": "tc-btn-boxed" - }, - "$:/core/buttonstyles/Rounded": { - "title": "$:/core/buttonstyles/Rounded", - "tags": "$:/tags/ToolbarButtonStyle", - "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}", - "text": "tc-btn-rounded" - }, - "$:/core/ui/ControlPanel/Settings/CamelCase": { - "title": "$:/core/ui/ControlPanel/Settings/CamelCase", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><> \n" - }, - "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": { - "title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab", - "caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}", - "tags": "$:/tags/ControlPanel/Settings", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n\n\n\n" - }, - "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": { - "title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab", - "caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}", - "tags": "$:/tags/ControlPanel/Settings", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n\n\n\n" - }, - "$:/core/ui/ControlPanel/Settings/EditorToolbar": { - "title": "$:/core/ui/ControlPanel/Settings/EditorToolbar", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><> \n\n" - }, - "$:/core/ui/ControlPanel/Settings/InfoPanelMode": { - "title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <> \n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <> \n" - }, - "$:/core/ui/ControlPanel/Settings/LinkToBehaviour": { - "title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n \n \n \n \n\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n \n \n\n" - }, - "$:/core/ui/ControlPanel/Settings/MissingLinks": { - "title": "$:/core/ui/ControlPanel/Settings/MissingLinks", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><> \n\n" - }, - "$:/core/ui/ControlPanel/Settings/NavigationAddressBar": { - "title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <> \n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <> \n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <> \n" - }, - "$:/core/ui/ControlPanel/Settings/NavigationHistory": { - "title": "$:/core/ui/ControlPanel/Settings/NavigationHistory", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <> \n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <> \n" - }, - "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": { - "title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><> \n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><> \n" - }, - "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": { - "title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><> \n" - }, - "$:/core/ui/ControlPanel/Settings/TitleLinks": { - "title": "$:/core/ui/ControlPanel/Settings/TitleLinks", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <> \n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <> \n" - }, - "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": { - "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n\n\n\n" - }, - "$:/core/ui/ControlPanel/Settings/ToolbarButtons": { - "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons", - "tags": "$:/tags/ControlPanel/Settings", - "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><> \n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><> \n" - }, - "$:/core/ui/ControlPanel/Settings": { - "title": "$:/core/ui/ControlPanel/Settings", - "tags": "$:/tags/ControlPanel", - "caption": "{{$:/language/ControlPanel/Settings/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n
\n\n!! <$link><$transclude field=\"caption\"/>\n\n<$transclude/>\n\n
\n\n\n" - }, - "$:/core/ui/ControlPanel/StoryView": { - "title": "$:/core/ui/ControlPanel/StoryView", - "tags": "$:/tags/ControlPanel/Appearance", - "caption": "{{$:/language/ControlPanel/StoryView/Caption}}", - "text": "{{$:/snippets/viewswitcher}}\n" - }, - "$:/core/ui/ControlPanel/Stylesheets": { - "title": "$:/core/ui/ControlPanel/Stylesheets", - "tags": "$:/tags/ControlPanel/Advanced", - "caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<>\n\n{{$:/snippets/peek-stylesheets}}\n" - }, - "$:/core/ui/ControlPanel/Theme": { - "title": "$:/core/ui/ControlPanel/Theme", - "tags": "$:/tags/ControlPanel/Appearance", - "caption": "{{$:/language/ControlPanel/Theme/Caption}}", - "text": "{{$:/snippets/themeswitcher}}\n" - }, - "$:/core/ui/ControlPanel/TiddlerFields": { - "title": "$:/core/ui/ControlPanel/TiddlerFields", - "tags": "$:/tags/ControlPanel/Advanced", - "caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<>\n\n{{$:/snippets/allfields}}" - }, - "$:/core/ui/ControlPanel/Toolbars/EditToolbar": { - "title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar", - "tags": "$:/tags/ControlPanel/Toolbars", - "caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n\n\n" - }, - "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": { - "title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate", - "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<>>\n<$checkbox tiddler=<> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler={{!!icon}}/> <$transclude field=\"caption\"/> -- <$transclude field=\"description\"/>\n\n" - }, - "$:/core/ui/ControlPanel/Toolbars/EditorToolbar": { - "title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar", - "tags": "$:/tags/ControlPanel/Toolbars", - "caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n" - }, - "$:/core/ui/ControlPanel/Toolbars/ItemTemplate": { - "title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate", - "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<>>\n<$checkbox tiddler=<> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude field=\"caption\"/> -- <$transclude field=\"description\"/>\n\n" - }, - "$:/core/ui/ControlPanel/Toolbars/PageControls": { - "title": "$:/core/ui/ControlPanel/Toolbars/PageControls", - "tags": "$:/tags/ControlPanel/Toolbars", - "caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n\n\n\n" - }, - "$:/core/ui/ControlPanel/Toolbars/ViewToolbar": { - "title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar", - "tags": "$:/tags/ControlPanel/Toolbars", - "caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n\n\n\n" - }, - "$:/core/ui/ControlPanel/Toolbars": { - "title": "$:/core/ui/ControlPanel/Toolbars", - "tags": "$:/tags/ControlPanel/Appearance", - "caption": "{{$:/language/ControlPanel/Toolbars/Caption}}", - "text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n
\n<>\n
\n" - }, - "$:/ControlPanel": { - "title": "$:/ControlPanel", - "icon": "$:/core/images/options-button", - "color": "#bbb", - "text": "
\n<>\n
\n" - }, - "$:/core/ui/DefaultSearchResultList": { - "title": "$:/core/ui/DefaultSearchResultList", - "tags": "$:/tags/SearchResults", - "caption": "{{$:/language/Search/DefaultResults/Caption}}", - "text": "\\define searchResultList()\n//{{$:/language/Search/Matches/Title}}//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//{{$:/language/Search/Matches/All}}//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<>\n" - }, - "$:/core/ui/EditTemplate/body/preview/diffs-current": { - "title": "$:/core/ui/EditTemplate/body/preview/diffs-current", - "tags": "$:/tags/EditPreview", - "caption": "differences from current", - "list-after": "$:/core/ui/EditTemplate/body/preview/output", - "text": "<$list filter=\"[!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<>/>\n\n\n\n" - }, - "$:/core/ui/EditTemplate/body/preview/diffs-shadow": { - "title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow", - "tags": "$:/tags/EditPreview", - "caption": "differences from shadow (if any)", - "list-after": "$:/core/ui/EditTemplate/body/preview/output", - "text": "<$list filter=\"[!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<>/>\n\n\n\n" - }, - "$:/core/ui/EditTemplate/body/preview/output": { - "title": "$:/core/ui/EditTemplate/body/preview/output", - "tags": "$:/tags/EditPreview", - "caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}", - "text": "<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n\n" - }, - "$:/state/showeditpreview": { - "title": "$:/state/showeditpreview", - "text": "no" - }, - "$:/core/ui/EditTemplate/body/editor": { - "title": "$:/core/ui/EditTemplate/body/editor", - "text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n\n><$set\n\n name=\"targetTiddler\"\n value=<>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/>\n" - }, - "$:/core/ui/EditTemplate/body/toolbar/button": { - "title": "$:/core/ui/EditTemplate/body/toolbar/button", - "text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<>\n actions={{!!actions}}\n\n><><$transclude\n\n tiddler=<>\n field=\"text\"\n\n/><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<>\n\n><$button\n\n popup=<>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<>\n actions={{!!actions}}\n\n><><$transclude\n\n tiddler=<>\n field=\"text\"\n\n/><$reveal\n\n state=<>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/>
\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><>\n\\end\n\n<>" - }, - "$:/core/ui/EditTemplate/body": { - "title": "$:/core/ui/EditTemplate/body", - "tags": "$:/tags/EditTemplate", - "text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n
\n\n<>\n\n<$text text={{!!_canonical_uri}}/>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\">\n\n
\n\n\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n
\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n
\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n\n\n
\n\n
\n\n\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n\n\n\n" - }, - "$:/core/ui/EditTemplate/controls": { - "title": "$:/core/ui/EditTemplate/controls", - "tags": "$:/tags/EditTemplate", - "text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n
\n<$view field=\"title\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<> text=\"hide\"><$transclude tiddler=<>/>\n
\n
\n" - }, - "$:/core/ui/EditTemplate/fields": { - "title": "$:/core/ui/EditTemplate/fields", - "tags": "$:/tags/EditTemplate", - "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define new-field()\n<$vars name={{$:/temp/newfieldname}}>\n<$reveal type=\"nomatch\" text=\"\" default=<>>\n<$button>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<>\n$value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<>\n\n\n<$reveal type=\"match\" text=\"\" default=<>>\n<$button>\n<>\n\n\n\n\\end\n\n
\n\n\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\">\n<$list filter=<> variable=\"temp\">\n\n\n\n\n\n\n\n\n
\n<$text text=<>/>:\n<$edit-text tiddler=<> field=<> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\n\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<>/>\n{{$:/core/images/delete-button}}\n\n
\n
\n\n<$fieldmangler>\n
\n\n<>\n\n\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<> class=\"tc-edit-texteditor tc-popup-handle\"/>\n\n<$button popup=<> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}\n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\">\n
\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/newfieldname\">\n
\n<>\n
\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title{$:/temp/newfieldname}sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$link to=<>>\n<>\n\n\n
\n<>\n
\n<$list filter=\"[fields[]search:title{$:/temp/newfieldname}sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<>>\n<>\n\n\n\n\n
\n\n\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\"/>\n\n\n<$macrocall $name=\"new-field\"/>\n\n
\n\n" - }, - "$:/core/ui/EditTemplate/shadow": { - "title": "$:/core/ui/EditTemplate/shadow", - "tags": "$:/tags/EditTemplate", - "text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<>>\n
\n\n<>\n\n
\n\n\n\n\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<>>\n
\n\n<>\n\n
\n\n\n\n" - }, - "$:/core/ui/EditTemplate/tags": { - "title": "$:/core/ui/EditTemplate/tags", - "tags": "$:/tags/EditTemplate", - "text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon)\n\\whitespace trim\n<$vars foregroundColor=<> backgroundColor=\"\"\"$colour$\"\"\">\n> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/> <$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">×\n\n\n\\end\n\n\\define tag-body(colour,palette,icon)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\"/>\n\\end\n\n\\define tag-picker-actions()\n<$action-listops\n\t$tiddler=<>\n\t$field=\"tags\"\n\t$subfilter=\"[] [all[current]tags[]]\"\n/>\n\\end\n\n
\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}}/>\n\n\n<$macrocall $name=\"tag-picker\" actions=<>/>\n
\n" - }, - "$:/core/ui/EditTemplate/title": { - "title": "$:/core/ui/EditTemplate/title", - "tags": "$:/tags/EditTemplate", - "text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\"/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title]\" variable=\"listItem\">\n\n
\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n
\n\n\n\n\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n
\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n
\n\n\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}\n\n<$list filter=\"[titlebacklinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<> >\n\n<$reveal type=\"nomatch\" state=<> text=\"show\">\n<$button set=<> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<>\n\n<$reveal type=\"match\" state=<> text=\"show\">\n<$button set=<> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<>\n\n\n<$reveal type=\"match\" state=<> text=\"show\">\n<$tiddler tiddler=<> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "$:/core/ui/EditTemplate/type": { - "title": "$:/core/ui/EditTemplate/type", - "tags": "$:/tags/EditTemplate", - "text": "\\define lingo-base() $:/language/EditTemplate/\n
<$fieldmangler>\n<> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<> class=\"tc-edit-typeeditor tc-popup-handle\"/> <$button popup=<> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}} <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}\n
\n\n
\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\">\n
\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n
\n<$text text={{!!group}}/>\n
\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)\n\n\n\n
\n\n\n
\n" - }, - "$:/core/ui/EditTemplate": { - "title": "$:/core/ui/EditTemplate", - "text": "\\define actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n\\define frame-classes()\ntc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n
> data-tiddler-title=<>>\n<$fieldmangler>\n<$set name=\"storyTiddler\" value=<>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[] [encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<>/>\n\n\n\n\n\n\n
\n" - }, - "$:/core/ui/Buttons/cancel": { - "title": "$:/core/ui/Buttons/cancel", - "tags": "$:/tags/EditToolbar", - "caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}", - "description": "{{$:/language/Buttons/Cancel/Hint}}", - "text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/cancel-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Cancel/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/delete": { - "title": "$:/core/ui/Buttons/delete", - "tags": "$:/tags/EditToolbar $:/tags/ViewToolbar", - "caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}", - "description": "{{$:/language/Buttons/Delete/Hint}}", - "text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/delete-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Delete/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/save": { - "title": "$:/core/ui/Buttons/save", - "tags": "$:/tags/EditToolbar", - "caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}", - "description": "{{$:/language/Buttons/Save/Hint}}", - "text": "<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<>>\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/done-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Save/Caption}}/>\n\n\n" - }, - "$:/core/ui/EditorToolbar/bold": { - "title": "$:/core/ui/EditorToolbar/bold", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/bold", - "caption": "{{$:/language/Buttons/Bold/Caption}}", - "description": "{{$:/language/Buttons/Bold/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((bold))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/clear-dropdown": { - "title": "$:/core/ui/EditorToolbar/clear-dropdown", - "text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n
\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n\"\"\"/>\n\n
\n" - }, - "$:/core/ui/EditorToolbar/clear": { - "title": "$:/core/ui/EditorToolbar/clear", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/erase", - "caption": "{{$:/language/Buttons/Clear/Caption}}", - "description": "{{$:/language/Buttons/Clear/Hint}}", - "condition": "[is[image]]", - "dropdown": "$:/core/ui/EditorToolbar/clear-dropdown", - "text": "" - }, - "$:/core/ui/EditorToolbar/editor-height-dropdown": { - "title": "$:/core/ui/EditorToolbar/editor-height-dropdown", - "text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/>\n" - }, - "$:/core/ui/EditorToolbar/editor-height": { - "title": "$:/core/ui/EditorToolbar/editor-height", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/fixed-height", - "custom-icon": "yes", - "caption": "{{$:/language/Buttons/EditorHeight/Caption}}", - "description": "{{$:/language/Buttons/EditorHeight/Hint}}", - "condition": "[type[]] [get[type]prefix[text/]] +[first[]]", - "dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown", - "text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n\n" - }, - "$:/core/ui/EditorToolbar/excise-dropdown": { - "title": "$:/core/ui/EditorToolbar/excise-dropdown", - "text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<>''\n\n<> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[is[tiddler]]\"\"\">\n
\n<>\n
\n\n\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <>\n\n<> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n\n\n\n\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n<>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<>/>\n" - }, - "$:/core/ui/EditorToolbar/excise": { - "title": "$:/core/ui/EditorToolbar/excise", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/excise", - "caption": "{{$:/language/Buttons/Excise/Caption}}", - "description": "{{$:/language/Buttons/Excise/Hint}}", - "condition": "[type[]] [type[text/vnd.tiddlywiki]] +[first[]]", - "shortcuts": "((excise))", - "dropdown": "$:/core/ui/EditorToolbar/excise-dropdown", - "text": "" - }, - "$:/core/ui/EditorToolbar/heading-1": { - "title": "$:/core/ui/EditorToolbar/heading-1", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/heading-1", - "caption": "{{$:/language/Buttons/Heading1/Caption}}", - "description": "{{$:/language/Buttons/Heading1/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "button-classes": "tc-text-editor-toolbar-item-start-group", - "shortcuts": "((heading-1))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/heading-2": { - "title": "$:/core/ui/EditorToolbar/heading-2", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/heading-2", - "caption": "{{$:/language/Buttons/Heading2/Caption}}", - "description": "{{$:/language/Buttons/Heading2/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((heading-2))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/heading-3": { - "title": "$:/core/ui/EditorToolbar/heading-3", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/heading-3", - "caption": "{{$:/language/Buttons/Heading3/Caption}}", - "description": "{{$:/language/Buttons/Heading3/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((heading-3))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/heading-4": { - "title": "$:/core/ui/EditorToolbar/heading-4", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/heading-4", - "caption": "{{$:/language/Buttons/Heading4/Caption}}", - "description": "{{$:/language/Buttons/Heading4/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((heading-4))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/heading-5": { - "title": "$:/core/ui/EditorToolbar/heading-5", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/heading-5", - "caption": "{{$:/language/Buttons/Heading5/Caption}}", - "description": "{{$:/language/Buttons/Heading5/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((heading-5))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/heading-6": { - "title": "$:/core/ui/EditorToolbar/heading-6", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/heading-6", - "caption": "{{$:/language/Buttons/Heading6/Caption}}", - "description": "{{$:/language/Buttons/Heading6/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((heading-6))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/italic": { - "title": "$:/core/ui/EditorToolbar/italic", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/italic", - "caption": "{{$:/language/Buttons/Italic/Caption}}", - "description": "{{$:/language/Buttons/Italic/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((italic))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/line-width-dropdown": { - "title": "$:/core/ui/EditorToolbar/line-width-dropdown", - "text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n
\n\n\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n\n\n\n\n\n\\end\n\n''<>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<>\n\n\n" - }, - "$:/core/ui/EditorToolbar/line-width": { - "title": "$:/core/ui/EditorToolbar/line-width", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/line-width", - "caption": "{{$:/language/Buttons/LineWidth/Caption}}", - "description": "{{$:/language/Buttons/LineWidth/Hint}}", - "condition": "[is[image]]", - "dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown", - "text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>" - }, - "$:/core/ui/EditorToolbar/link-dropdown": { - "title": "$:/core/ui/EditorToolbar/link-dropdown", - "text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $tiddler=<> />\n<$action-deletetiddler $tiddler=<> />\n<$action-deletetiddler $tiddler=<> />\n\\end\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<>>\n{{$:/core/images/chevron-right}}\n\n\\end\n\n\\define body(config-title)\n''<>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" >\n\n<$vars linkTiddler=<>>\n<$keyboard key=\"ENTER\" actions=<>>\n<$edit-text tiddler=<> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<> type=\"nomatch\" text=\"\">\n<>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<> text=\"\" />\n{{$:/core/images/close-button}}\n\n\n\n\n\n<$reveal tag=\"div\" state=<> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<> to=<>>\n\n{{$:/core/ui/SearchResults}}\n\n\n\n\n\n\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<>/>" - }, - "$:/core/ui/EditorToolbar/link": { - "title": "$:/core/ui/EditorToolbar/link", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/link", - "caption": "{{$:/language/Buttons/Link/Caption}}", - "description": "{{$:/language/Buttons/Link/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "button-classes": "tc-text-editor-toolbar-item-start-group", - "shortcuts": "((link))", - "dropdown": "$:/core/ui/EditorToolbar/link-dropdown", - "text": "" - }, - "$:/core/ui/EditorToolbar/linkify": { - "title": "$:/core/ui/EditorToolbar/linkify", - "caption": "{{$:/language/Buttons/Linkify/Caption}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "description": "{{$:/language/Buttons/Linkify/Hint}}", - "icon": "$:/core/images/linkify", - "list-before": "$:/core/ui/EditorToolbar/mono-block", - "shortcuts": "((linkify))", - "tags": "$:/tags/EditorToolbar", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/list-bullet": { - "title": "$:/core/ui/EditorToolbar/list-bullet", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/list-bullet", - "caption": "{{$:/language/Buttons/ListBullet/Caption}}", - "description": "{{$:/language/Buttons/ListBullet/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((list-bullet))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/list-number": { - "title": "$:/core/ui/EditorToolbar/list-number", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/list-number", - "caption": "{{$:/language/Buttons/ListNumber/Caption}}", - "description": "{{$:/language/Buttons/ListNumber/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((list-number))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/mono-block": { - "title": "$:/core/ui/EditorToolbar/mono-block", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/mono-block", - "caption": "{{$:/language/Buttons/MonoBlock/Caption}}", - "description": "{{$:/language/Buttons/MonoBlock/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "button-classes": "tc-text-editor-toolbar-item-start-group", - "shortcuts": "((mono-block))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/mono-line": { - "title": "$:/core/ui/EditorToolbar/mono-line", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/mono-line", - "caption": "{{$:/language/Buttons/MonoLine/Caption}}", - "description": "{{$:/language/Buttons/MonoLine/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((mono-line))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/more-dropdown": { - "title": "$:/core/ui/EditorToolbar/more-dropdown", - "text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<> field=\"description\"/>\n\n\\end\n\n
\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<> text=\"hide\" tag=\"div\">\n<>\n\n\n
\n" - }, - "$:/core/ui/EditorToolbar/more": { - "title": "$:/core/ui/EditorToolbar/more", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/down-arrow", - "caption": "{{$:/language/Buttons/More/Caption}}", - "description": "{{$:/language/Buttons/More/Hint}}", - "condition": "[]", - "dropdown": "$:/core/ui/EditorToolbar/more-dropdown", - "text": "" - }, - "$:/core/ui/EditorToolbar/opacity-dropdown": { - "title": "$:/core/ui/EditorToolbar/opacity-dropdown", - "text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n
\n\n\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n\n\n\n\n\n\\end\n\n\\define toolbar-opacity()\n''<>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<>\n\n\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<>\n\n\n\n\n" - }, - "$:/core/ui/EditorToolbar/opacity": { - "title": "$:/core/ui/EditorToolbar/opacity", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/opacity", - "caption": "{{$:/language/Buttons/Opacity/Caption}}", - "description": "{{$:/language/Buttons/Opacity/Hint}}", - "condition": "[is[image]]", - "dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown", - "text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n" - }, - "$:/core/ui/EditorToolbar/paint-dropdown": { - "title": "$:/core/ui/EditorToolbar/paint-dropdown", - "text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n\"\"\"/>\n" - }, - "$:/core/ui/EditorToolbar/paint": { - "title": "$:/core/ui/EditorToolbar/paint", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/paint", - "caption": "{{$:/language/Buttons/Paint/Caption}}", - "description": "{{$:/language/Buttons/Paint/Hint}}", - "condition": "[is[image]]", - "dropdown": "$:/core/ui/EditorToolbar/paint-dropdown", - "text": "\\define toolbar-paint()\n
\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<>\n\n" - }, - "$:/core/ui/EditorToolbar/picture-dropdown": { - "title": "$:/core/ui/EditorToolbar/picture-dropdown", - "text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n\"\"\"/>\n" - }, - "$:/core/ui/EditorToolbar/picture": { - "title": "$:/core/ui/EditorToolbar/picture", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/picture", - "caption": "{{$:/language/Buttons/Picture/Caption}}", - "description": "{{$:/language/Buttons/Picture/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((picture))", - "dropdown": "$:/core/ui/EditorToolbar/picture-dropdown", - "text": "" - }, - "$:/core/ui/EditorToolbar/preview-type-dropdown": { - "title": "$:/core/ui/EditorToolbar/preview-type-dropdown", - "text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n<$transclude tiddler=<> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<> field=\"title\" mode=\"inline\"/>\n\n \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n\n\n\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<>\n\n\n" - }, - "$:/core/ui/EditorToolbar/preview-type": { - "title": "$:/core/ui/EditorToolbar/preview-type", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/chevron-down", - "caption": "{{$:/language/Buttons/PreviewType/Caption}}", - "description": "{{$:/language/Buttons/PreviewType/Hint}}", - "condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]", - "button-classes": "tc-text-editor-toolbar-item-adjunct", - "dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown" - }, - "$:/core/ui/EditorToolbar/preview": { - "title": "$:/core/ui/EditorToolbar/preview", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/preview-open", - "custom-icon": "yes", - "caption": "{{$:/language/Buttons/Preview/Caption}}", - "description": "{{$:/language/Buttons/Preview/Hint}}", - "condition": "[]", - "button-classes": "tc-text-editor-toolbar-item-start-group", - "shortcuts": "((preview))", - "text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n\n" - }, - "$:/core/ui/EditorToolbar/quote": { - "title": "$:/core/ui/EditorToolbar/quote", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/quote", - "caption": "{{$:/language/Buttons/Quote/Caption}}", - "description": "{{$:/language/Buttons/Quote/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((quote))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/rotate-left": { - "title": "$:/core/ui/EditorToolbar/rotate-left", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/rotate-left", - "caption": "{{$:/language/Buttons/RotateLeft/Caption}}", - "description": "{{$:/language/Buttons/RotateLeft/Hint}}", - "condition": "[is[image]]", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/size-dropdown": { - "title": "$:/core/ui/EditorToolbar/size-dropdown", - "text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<>/> × <$text text=<>/>\n\n\n\n\n\n\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<> focus=\"true\" size=\"8\"/> <> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n
\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n\n\n
\n\n\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n<>\n\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<>/>\n" - }, - "$:/core/ui/EditorToolbar/size": { - "title": "$:/core/ui/EditorToolbar/size", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/size", - "caption": "{{$:/language/Buttons/Size/Caption}}", - "description": "{{$:/language/Buttons/Size/Hint}}", - "condition": "[is[image]]", - "dropdown": "$:/core/ui/EditorToolbar/size-dropdown", - "text": "" - }, - "$:/core/ui/EditorToolbar/stamp-dropdown": { - "title": "$:/core/ui/EditorToolbar/stamp-dropdown", - "text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n<$view tiddler=<> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<> field=\"title\" mode=\"inline\"/>\n\n\n\n\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<>\n\n\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<>\n/>\n\n\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n\n\n\n" - }, - "$:/core/ui/EditorToolbar/stamp": { - "title": "$:/core/ui/EditorToolbar/stamp", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/stamp", - "caption": "{{$:/language/Buttons/Stamp/Caption}}", - "description": "{{$:/language/Buttons/Stamp/Hint}}", - "condition": "[type[]] [get[type]prefix[text/]] +[first[]]", - "shortcuts": "((stamp))", - "dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown", - "text": "" - }, - "$:/core/ui/EditorToolbar/strikethrough": { - "title": "$:/core/ui/EditorToolbar/strikethrough", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/strikethrough", - "caption": "{{$:/language/Buttons/Strikethrough/Caption}}", - "description": "{{$:/language/Buttons/Strikethrough/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((strikethrough))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/subscript": { - "title": "$:/core/ui/EditorToolbar/subscript", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/subscript", - "caption": "{{$:/language/Buttons/Subscript/Caption}}", - "description": "{{$:/language/Buttons/Subscript/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((subscript))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/superscript": { - "title": "$:/core/ui/EditorToolbar/superscript", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/superscript", - "caption": "{{$:/language/Buttons/Superscript/Caption}}", - "description": "{{$:/language/Buttons/Superscript/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((superscript))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/transcludify": { - "title": "$:/core/ui/EditorToolbar/transcludify", - "caption": "{{$:/language/Buttons/Transcludify/Caption}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "description": "{{$:/language/Buttons/Transcludify/Hint}}", - "icon": "$:/core/images/transcludify", - "list-before": "$:/core/ui/EditorToolbar/mono-block", - "shortcuts": "((transcludify))", - "tags": "$:/tags/EditorToolbar", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n" - }, - "$:/core/ui/EditorToolbar/underline": { - "title": "$:/core/ui/EditorToolbar/underline", - "tags": "$:/tags/EditorToolbar", - "icon": "$:/core/images/underline", - "caption": "{{$:/language/Buttons/Underline/Caption}}", - "description": "{{$:/language/Buttons/Underline/Hint}}", - "condition": "[!has[type]] [type[text/vnd.tiddlywiki]]", - "shortcuts": "((underline))", - "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n" - }, - "$:/core/Filters/AllTags": { - "title": "$:/core/Filters/AllTags", - "tags": "$:/tags/Filter", - "filter": "[tags[]!is[system]sort[title]]", - "description": "{{$:/language/Filters/AllTags}}", - "text": "" - }, - "$:/core/Filters/AllTiddlers": { - "title": "$:/core/Filters/AllTiddlers", - "tags": "$:/tags/Filter", - "filter": "[!is[system]sort[title]]", - "description": "{{$:/language/Filters/AllTiddlers}}", - "text": "" - }, - "$:/core/Filters/Drafts": { - "title": "$:/core/Filters/Drafts", - "tags": "$:/tags/Filter", - "filter": "[has[draft.of]sort[title]]", - "description": "{{$:/language/Filters/Drafts}}", - "text": "" - }, - "$:/core/Filters/Missing": { - "title": "$:/core/Filters/Missing", - "tags": "$:/tags/Filter", - "filter": "[all[missing]sort[title]]", - "description": "{{$:/language/Filters/Missing}}", - "text": "" - }, - "$:/core/Filters/Orphans": { - "title": "$:/core/Filters/Orphans", - "tags": "$:/tags/Filter", - "filter": "[all[orphans]sort[title]]", - "description": "{{$:/language/Filters/Orphans}}", - "text": "" - }, - "$:/core/Filters/OverriddenShadowTiddlers": { - "title": "$:/core/Filters/OverriddenShadowTiddlers", - "tags": "$:/tags/Filter", - "filter": "[is[shadow]]", - "description": "{{$:/language/Filters/OverriddenShadowTiddlers}}", - "text": "" - }, - "$:/core/Filters/RecentSystemTiddlers": { - "title": "$:/core/Filters/RecentSystemTiddlers", - "tags": "$:/tags/Filter", - "filter": "[has[modified]!sort[modified]limit[50]]", - "description": "{{$:/language/Filters/RecentSystemTiddlers}}", - "text": "" - }, - "$:/core/Filters/RecentTiddlers": { - "title": "$:/core/Filters/RecentTiddlers", - "tags": "$:/tags/Filter", - "filter": "[!is[system]has[modified]!sort[modified]limit[50]]", - "description": "{{$:/language/Filters/RecentTiddlers}}", - "text": "" - }, - "$:/core/Filters/SessionTiddlers": { - "title": "$:/core/Filters/SessionTiddlers", - "tags": "$:/tags/Filter", - "filter": "[haschanged[]]", - "description": "{{$:/language/Filters/SessionTiddlers}}", - "text": "" - }, - "$:/core/Filters/ShadowTiddlers": { - "title": "$:/core/Filters/ShadowTiddlers", - "tags": "$:/tags/Filter", - "filter": "[all[shadows]sort[title]]", - "description": "{{$:/language/Filters/ShadowTiddlers}}", - "text": "" - }, - "$:/core/Filters/StoryList": { - "title": "$:/core/Filters/StoryList", - "tags": "$:/tags/Filter", - "filter": "[list[$:/StoryList]] -$:/AdvancedSearch", - "description": "{{$:/language/Filters/StoryList}}", - "text": "" - }, - "$:/core/Filters/SystemTags": { - "title": "$:/core/Filters/SystemTags", - "tags": "$:/tags/Filter", - "filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]", - "description": "{{$:/language/Filters/SystemTags}}", - "text": "" - }, - "$:/core/Filters/SystemTiddlers": { - "title": "$:/core/Filters/SystemTiddlers", - "tags": "$:/tags/Filter", - "filter": "[is[system]sort[title]]", - "description": "{{$:/language/Filters/SystemTiddlers}}", - "text": "" - }, - "$:/core/Filters/TypedTiddlers": { - "title": "$:/core/Filters/TypedTiddlers", - "tags": "$:/tags/Filter", - "filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]", - "description": "{{$:/language/Filters/TypedTiddlers}}", - "text": "" - }, - "$:/core/ui/ImportListing": { - "title": "$:/core/ui/ImportListing", - "text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n\n\\end\n\n\n\n\n\n\n\n\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n\n\n\n\n\n\n\n\n\n\n
\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<>>\n<>\n\n\n<>\n\n<>\n
\n<$checkbox field=<> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n\n<$reveal type=\"nomatch\" stateTitle=<> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<> setTo=\"yes\">\n{{$:/core/images/right-arrow}} <$text text=<>/>\n\n\n<$reveal type=\"match\" stateTitle=<> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<> setTo=\"no\">\n{{$:/core/images/down-arrow}} <$text text=<>/>\n\n\n\n<$view field=<>/>\n
\n<$reveal type=\"match\" text=\"yes\" stateTitle=<> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n\n\n
\n" - }, - "$:/core/ui/ImportPreviews/Diff": { - "title": "$:/core/ui/ImportPreviews/Diff", - "tags": "$:/tags/ImportPreview", - "caption": "{{$:/language/Import/Listing/Preview/Diff}}", - "text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<> destTiddlerTitle=<> destSubTiddlerTitle=<>/>\n" - }, - "$:/core/ui/ImportPreviews/DiffFields": { - "title": "$:/core/ui/ImportPreviews/DiffFields", - "tags": "$:/tags/ImportPreview", - "caption": "{{$:/language/Import/Listing/Preview/DiffFields}}", - "text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<> destTiddlerTitle=<> destSubTiddlerTitle=<> exclude=\"text\"/>\n" - }, - "$:/core/ui/ImportPreviews/Fields": { - "title": "$:/core/ui/ImportPreviews/Fields", - "tags": "$:/tags/ImportPreview", - "caption": "{{$:/language/Import/Listing/Preview/Fields}}", - "text": "\n\n<$list filter=\"[subtiddlerfieldssort[]] -text\" variable=\"fieldName\">\n\n\n\n\n\n\n
\n<$text text=<>/>\n\n<$view field=<> tiddler=<> subtiddler=<>/>\n
\n" - }, - "$:/core/ui/ImportPreviews/Text": { - "title": "$:/core/ui/ImportPreviews/Text", - "tags": "$:/tags/ImportPreview", - "caption": "{{$:/language/Import/Listing/Preview/Text}}", - "text": "<$transclude tiddler=<> subtiddler=<> mode=\"block\"/>\n" - }, - "$:/core/ui/ImportPreviews/TextRaw": { - "title": "$:/core/ui/ImportPreviews/TextRaw", - "tags": "$:/tags/ImportPreview", - "caption": "{{$:/language/Import/Listing/Preview/TextRaw}}", - "text": "
<$view tiddler=<> subtiddler=<> />
" - }, - "$:/core/ui/KeyboardShortcuts/new-image": { - "title": "$:/core/ui/KeyboardShortcuts/new-image", - "tags": "$:/tags/KeyboardShortcut", - "key": "((new-image))", - "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n\n" - }, - "$:/core/ui/KeyboardShortcuts/new-journal": { - "title": "$:/core/ui/KeyboardShortcuts/new-journal", - "tags": "$:/tags/KeyboardShortcut", - "key": "((new-journal))", - "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n\n" - }, - "$:/core/ui/KeyboardShortcuts/new-tiddler": { - "title": "$:/core/ui/KeyboardShortcuts/new-tiddler", - "tags": "$:/tags/KeyboardShortcut", - "key": "((new-tiddler))", - "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n\n" - }, - "$:/core/ui/ListItemTemplate": { - "title": "$:/core/ui/ListItemTemplate", - "text": "
\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n\n
" - }, - "$:/Manager/ItemMain/Fields": { - "title": "$:/Manager/ItemMain/Fields", - "tags": "$:/tags/Manager/ItemMain", - "caption": "{{$:/language/Manager/Item/Fields}}", - "text": "\n\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n\n
\n" - }, - "$:/Manager/ItemMain/RawText": { - "title": "$:/Manager/ItemMain/RawText", - "tags": "$:/tags/Manager/ItemMain", - "caption": "{{$:/language/Manager/Item/RawText}}", - "text": "
<$view/>
\n" - }, - "$:/Manager/ItemMain/WikifiedText": { - "title": "$:/Manager/ItemMain/WikifiedText", - "tags": "$:/tags/Manager/ItemMain", - "caption": "{{$:/language/Manager/Item/WikifiedText}}", - "text": "<$transclude mode=\"block\"/>\n" - }, - "$:/Manager/ItemSidebar/Colour": { - "title": "$:/Manager/ItemSidebar/Colour", - "tags": "$:/tags/Manager/ItemSidebar", - "caption": "{{$:/language/Manager/Item/Colour}}", - "text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n

>/>\n\n

\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n

\n" - }, - "$:/Manager/ItemSidebar/Icon": { - "title": "$:/Manager/ItemSidebar/Icon", - "tags": "$:/tags/Manager/ItemSidebar", - "caption": "{{$:/language/Manager/Item/Icon}}", - "text": "

\n

\n<$button popup=<> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n\n\n
\n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n
\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<>/>\n<$action-deletetiddler $tiddler=<>/>\n\"\"\"/>\n
\n\n
\n
\n

\n" - }, - "$:/Manager/ItemSidebar/Tags": { - "title": "$:/Manager/ItemSidebar/Tags", - "tags": "$:/tags/Manager/ItemSidebar", - "caption": "{{$:/language/Manager/Item/Tags}}", - "text": "\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<>\n<$action-listops\n\t$tiddler=<>\n\t$field=\"tags\"\n\t$subfilter=\"[] [all[current]tags[]]\"\n/>\n\\end\n\n

\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\">\n

\n<$checkbox tiddler=<> tag=<> actions=<>>\n<$macrocall $name=\"tag-pill\" tag=<>/>\n\n
\n\n

\n

\n<$macrocall $name=\"tag-picker\" actions=<>/>\n

\n" - }, - "$:/Manager/ItemSidebar/Tools": { - "title": "$:/Manager/ItemSidebar/Tools", - "tags": "$:/tags/Manager/ItemSidebar", - "caption": "{{$:/language/Manager/Item/Tools}}", - "text": "

\n<$button to=<>>{{$:/core/images/link}} open\n

\n

\n<$button message=\"tm-edit-tiddler\" param=<>>{{$:/core/images/edit-button}} edit\n

\n" - }, - "$:/Manager": { - "title": "$:/Manager", - "icon": "$:/core/images/list", - "color": "#bbb", - "text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n
\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<> field=\"caption\"/>\n\t\t\t\n\t\t\n\t\t<$reveal state=<> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<> field=\"caption\"/>\n\t\t\t\n\t\t\n\t\t<$reveal state=<> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<>/>\n\t\t\n\t\n
\n\\end\n\n
\n\t
\n\t\t
\n\t\t\t<> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t<> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t
\n\t\t
\n\t\t\t<> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t<> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<>\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t\n\t\t
\n\t
\n\t
\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<>>\n\t\t\t\t
\n\t\t\t\t\t<$button popup=<> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<>/>\n\t\t\t\t\t\n\t\t\t\t\t<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t\n\t
\n
\n" - }, - "$:/core/ui/MissingTemplate": { - "title": "$:/core/ui/MissingTemplate", - "text": "
\n<$button popup=<> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n
\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n
\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n
\n\n
\n" - }, - "$:/core/ui/MoreSideBar/All": { - "title": "$:/core/ui/MoreSideBar/All", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/All/Caption}}", - "text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/MoreSideBar/Drafts": { - "title": "$:/core/ui/MoreSideBar/Drafts", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Drafts/Caption}}", - "text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/MoreSideBar/Explorer": { - "title": "$:/core/ui/MoreSideBar/Explorer", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Explorer/Caption}}", - "text": "<>\n" - }, - "$:/core/ui/MoreSideBar/Missing": { - "title": "$:/core/ui/MoreSideBar/Missing", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Missing/Caption}}", - "text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n" - }, - "$:/core/ui/MoreSideBar/Orphans": { - "title": "$:/core/ui/MoreSideBar/Orphans", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Orphans/Caption}}", - "text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/MoreSideBar/Plugins": { - "title": "$:/core/ui/MoreSideBar/Plugins", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/ControlPanel/Plugins/Caption}}", - "text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<>\n" - }, - "$:/core/ui/MoreSideBar/Recent": { - "title": "$:/core/ui/MoreSideBar/Recent", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Recent/Caption}}", - "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n" - }, - "$:/core/ui/MoreSideBar/Shadows": { - "title": "$:/core/ui/MoreSideBar/Shadows", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Shadows/Caption}}", - "text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/MoreSideBar/System": { - "title": "$:/core/ui/MoreSideBar/System", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/System/Caption}}", - "text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/MoreSideBar/Tags": { - "title": "$:/core/ui/MoreSideBar/Tags", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Tags/Caption}}", - "text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n\n\n\n\n\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n\n\n
\n\n{{$:/core/ui/UntaggedTemplate}}\n" - }, - "$:/core/ui/MoreSideBar/Types": { - "title": "$:/core/ui/MoreSideBar/Types", - "tags": "$:/tags/MoreSideBar", - "caption": "{{$:/language/SideBar/Types/Caption}}", - "text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n
\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n
\n<$link to={{!!title}}><$view field=\"title\"/>\n
\n\n
\n\n" - }, - "$:/core/ui/MoreSideBar/Plugins/Languages": { - "title": "$:/core/ui/MoreSideBar/Plugins/Languages", - "tags": "$:/tags/MoreSideBar/Plugins", - "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}", - "text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n" - }, - "$:/core/ui/MoreSideBar/Plugins/Plugins": { - "title": "$:/core/ui/MoreSideBar/Plugins/Plugins", - "tags": "$:/tags/MoreSideBar/Plugins", - "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}", - "text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n" - }, - "$:/core/ui/MoreSideBar/Plugins/Theme": { - "title": "$:/core/ui/MoreSideBar/Plugins/Theme", - "tags": "$:/tags/MoreSideBar/Plugins", - "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}", - "text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n" - }, - "$:/core/ui/Buttons/advanced-search": { - "title": "$:/core/ui/Buttons/advanced-search", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}", - "description": "{{$:/language/Buttons/AdvancedSearch/Hint}}", - "text": "\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/advanced-search-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/>\n\n\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<>>\n<>\n\n" - }, - "$:/core/ui/Buttons/close-all": { - "title": "$:/core/ui/Buttons/close-all", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}", - "description": "{{$:/language/Buttons/CloseAll/Hint}}", - "text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/close-all-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/CloseAll/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/control-panel": { - "title": "$:/core/ui/Buttons/control-panel", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}", - "description": "{{$:/language/Buttons/ControlPanel/Hint}}", - "text": "\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/options-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/ControlPanel/Caption}}/>\n\n\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<>>\n<>\n\n" - }, - "$:/core/ui/Buttons/encryption": { - "title": "$:/core/ui/Buttons/encryption", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}", - "description": "{{$:/language/Buttons/Encryption/Hint}}", - "text": "<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/locked-padlock}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/>\n\n\n\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/export-page": { - "title": "$:/core/ui/Buttons/export-page", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}", - "description": "{{$:/language/Buttons/ExportPage/Hint}}", - "text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>" - }, - "$:/core/ui/Buttons/fold-all": { - "title": "$:/core/ui/Buttons/fold-all", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}", - "description": "{{$:/language/Buttons/FoldAll/Hint}}", - "text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/FoldAll/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/full-screen": { - "title": "$:/core/ui/Buttons/full-screen", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}", - "description": "{{$:/language/Buttons/FullScreen/Hint}}", - "text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/full-screen-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/FullScreen/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/home": { - "title": "$:/core/ui/Buttons/home", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}", - "description": "{{$:/language/Buttons/Home/Hint}}", - "text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/home-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Home/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/import": { - "title": "$:/core/ui/Buttons/import", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}", - "description": "{{$:/language/Buttons/Import/Hint}}", - "text": "
\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/import-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Import/Caption}}/>\n\n\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n
" - }, - "$:/core/ui/Buttons/language": { - "title": "$:/core/ui/Buttons/language", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}", - "description": "{{$:/language/Buttons/Language/Hint}}", - "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$button popup=<> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<> selectedClass=\"tc-selected\">\n<$list filter=\"[prefix[yes]]\">\n\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<>/>\n\n\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Language/Caption}}/>\n\n\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n
\n{{$:/snippets/languageswitcher}}\n
\n" - }, - "$:/core/ui/Buttons/manager": { - "title": "$:/core/ui/Buttons/manager", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}", - "description": "{{$:/language/Buttons/Manager/Hint}}", - "text": "\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/list}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Manager/Caption}}/>\n\n\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<>>\n<>\n\n" - }, - "$:/core/ui/Buttons/more-page-actions": { - "title": "$:/core/ui/Buttons/more-page-actions", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}", - "description": "{{$:/language/Buttons/More/Hint}}", - "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<> selectedClass=\"tc-selected\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/More/Caption}}/>\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n\n
\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[] [encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<> mode=\"inline\"/>\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n" - }, - "$:/core/ui/Buttons/new-image": { - "title": "$:/core/ui/Buttons/new-image", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}", - "description": "{{$:/language/Buttons/NewImage/Hint}}", - "text": "<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/new-image-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/NewImage/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/new-journal": { - "title": "$:/core/ui/Buttons/new-journal", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}", - "description": "{{$:/language/Buttons/NewJournal/Hint}}", - "text": "\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/NewJournal/Caption}}/>\n\n\n\\end\n<>\n" - }, - "$:/core/ui/Buttons/new-tiddler": { - "title": "$:/core/ui/Buttons/new-tiddler", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}", - "description": "{{$:/language/Buttons/NewTiddler/Hint}}", - "text": "<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/new-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/NewTiddler/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/palette": { - "title": "$:/core/ui/Buttons/palette", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}", - "description": "{{$:/language/Buttons/Palette/Hint}}", - "text": "\n<$button popup=<> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<> selectedClass=\"tc-selected\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/palette}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Palette/Caption}}/>\n\n\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n
\n{{$:/snippets/paletteswitcher}}\n
\n" - }, - "$:/core/ui/Buttons/print": { - "title": "$:/core/ui/Buttons/print", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}", - "description": "{{$:/language/Buttons/Print/Hint}}", - "text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/print-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Print/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/refresh": { - "title": "$:/core/ui/Buttons/refresh", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}", - "description": "{{$:/language/Buttons/Refresh/Hint}}", - "text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/refresh-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Refresh/Caption}}/>\n\n" - }, - "$:/core/ui/Buttons/save-wiki": { - "title": "$:/core/ui/Buttons/save-wiki", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}", - "description": "{{$:/language/Buttons/SaveWiki/Hint}}", - "text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<>/>\n\n\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/save-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/SaveWiki/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/storyview": { - "title": "$:/core/ui/Buttons/storyview", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}", - "description": "{{$:/language/Buttons/StoryView/Hint}}", - "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n\n<$button popup=<> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<> selectedClass=\"tc-selected\">\n<$list filter=\"[prefix[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<>/>\n\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/StoryView/Caption}}/>\n\n\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n
\n{{$:/snippets/viewswitcher}}\n
\n" - }, - "$:/core/ui/Buttons/tag-manager": { - "title": "$:/core/ui/Buttons/tag-manager", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}", - "description": "{{$:/language/Buttons/TagManager/Hint}}", - "text": "\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/tag-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/TagManager/Caption}}/>\n\n\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<>>\n<>\n\n" - }, - "$:/core/ui/Buttons/theme": { - "title": "$:/core/ui/Buttons/theme", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}", - "description": "{{$:/language/Buttons/Theme/Hint}}", - "text": "\n<$button popup=<> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<> selectedClass=\"tc-selected\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/theme-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Theme/Caption}}/>\n\n\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n
\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n\n
\n" - }, - "$:/core/ui/Buttons/timestamp": { - "title": "$:/core/ui/Buttons/timestamp", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}", - "description": "{{$:/language/Buttons/Timestamp/Hint}}", - "text": "<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/timestamp-on}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Timestamp/On/Caption}}/>\n\n\n\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/timestamp-off}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/unfold-all": { - "title": "$:/core/ui/Buttons/unfold-all", - "tags": "$:/tags/PageControls", - "caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}", - "description": "{{$:/language/Buttons/UnfoldAll/Hint}}", - "text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$:/language/Buttons/UnfoldAll/Caption}}/>\n\n" - }, - "$:/core/ui/PageTemplate/pagecontrols": { - "title": "$:/core/ui/PageTemplate/pagecontrols", - "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n
\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$reveal type=\"nomatch\" state=<> text=\"hide\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[] [encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<> mode=\"inline\"/>\n\n\n\n
\n\n" - }, - "$:/core/ui/PageStylesheet": { - "title": "$:/core/ui/PageStylesheet", - "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n\n\n\n\n\n" - }, - "$:/core/ui/PageTemplate/alerts": { - "title": "$:/core/ui/PageTemplate/alerts", - "tags": "$:/tags/PageTemplate", - "text": "
\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n
\n" - }, - "$:/core/ui/PageTemplate/drafts": { - "title": "$:/core/ui/PageTemplate/drafts", - "tags": "$:/tags/PageTemplate", - "text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<>/>\n\n\n\n" - }, - "$:/core/ui/PageTemplate/pluginreloadwarning": { - "title": "$:/core/ui/PageTemplate/pluginreloadwarning", - "tags": "$:/tags/PageTemplate", - "text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[has[plugin-type]haschanged[]!plugin-type[import]limit[1]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n
\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}\n\n\n\n
\n\n\n\n\n" - }, - "$:/core/ui/PageTemplate/sidebar": { - "title": "$:/core/ui/PageTemplate/sidebar", - "tags": "$:/tags/PageTemplate", - "text": "\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n
\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<> text=\"hide\" tag=\"div\">\n\n<$transclude tiddler=<> mode=\"block\"/>\n\n\n\n\n\n\n\n
\n\n" - }, - "$:/core/ui/PageTemplate/story": { - "title": "$:/core/ui/PageTemplate/story", - "tags": "$:/tags/PageTemplate", - "text": "
\n\n
\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n\n\n
\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/ui/EditTemplate\" storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n
\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n\n\n
\n\n
\n" - }, - "$:/core/ui/PageTemplate/topleftbar": { - "title": "$:/core/ui/PageTemplate/topleftbar", - "tags": "$:/tags/PageTemplate", - "text": "\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<> mode=\"inline\"/>\n\n\n\n\n" - }, - "$:/core/ui/PageTemplate/toprightbar": { - "title": "$:/core/ui/PageTemplate/toprightbar", - "tags": "$:/tags/PageTemplate", - "text": "\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<> mode=\"inline\"/>\n\n\n\n\n" - }, - "$:/core/ui/PageTemplate": { - "title": "$:/core/ui/PageTemplate", - "text": "\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=\"\">\n\n
>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<>/>\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - }, - "$:/core/ui/PluginInfo": { - "title": "$:/core/ui/PluginInfo", - "text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<> mode=\"block\">\n<$transclude tiddler=<> subtiddler=<> mode=\"block\">\n<$transclude tiddler=<> subtiddler=<> mode=\"block\">\n<$transclude tiddler=<> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n\n\n\n\n" - }, - "$:/core/ui/PluginInfo/Default/contents": { - "title": "$:/core/ui/PluginInfo/Default/contents", - "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<>\n
    \n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<>>\n
  • \n<$link to={{!!title}}>\n<$view field=\"title\"/>\n\n
  • \n\n
\n" - }, - "$:/core/ui/PluginListItemTemplate": { - "title": "$:/core/ui/PluginListItemTemplate", - "text": "
\n<$link to={{!!title}}>\n<$view field=\"description\">\n<$view field=\"title\"/>\n\n\n
" - }, - "$:/core/ui/SearchResults": { - "title": "$:/core/ui/SearchResults", - "text": "
\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n\n\n
\n" - }, - "$:/core/ui/SideBar/More": { - "title": "$:/core/ui/SideBar/More", - "tags": "$:/tags/SideBar", - "caption": "{{$:/language/SideBar/More/Caption}}", - "text": "
\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical\" />\n
" - }, - "$:/core/ui/SideBar/Open": { - "title": "$:/core/ui/SideBar/Open", - "tags": "$:/tags/SideBar", - "caption": "{{$:/language/SideBar/Open/Caption}}", - "text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=\"$:/StoryList\" $subfilter=\"+[insertbefore:currentTiddler]\"/>\n\\end\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" storyview=\"pop\">\n
\n<$droppable actions=<>>\n
\n \n
\n
\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">× <$link to={{!!title}}><$view field=\"title\"/>\n
\n\n
\n\n<$tiddler tiddler=\"\">\n<$droppable actions=<>>\n
\n \n
\n<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><>\n\n\n" - }, - "$:/core/ui/SideBar/Recent": { - "title": "$:/core/ui/SideBar/Recent", - "tags": "$:/tags/SideBar", - "caption": "{{$:/language/SideBar/Recent/Caption}}", - "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n" - }, - "$:/core/ui/SideBar/Tools": { - "title": "$:/core/ui/SideBar/Tools", - "tags": "$:/tags/SideBar", - "caption": "{{$:/language/SideBar/Tools/Caption}}", - "text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<> <>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n
encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<>/> <$transclude tiddler=<> field=\"description\"/>\n\n
\n\n\n\n\n\n\n\n\n" - }, - "$:/core/ui/SideBarLists": { - "title": "$:/core/ui/SideBarLists", - "text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n" - }, - "$:/core/ui/SideBarSegments/page-controls": { - "title": "$:/core/ui/SideBarSegments/page-controls", - "tags": "$:/tags/SideBarSegment", - "text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n" - }, - "$:/core/ui/SideBarSegments/search": { - "title": "$:/core/ui/SideBarSegments/search", - "tags": "$:/tags/SideBarSegment", - "text": "
\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n
\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n\n<$button popup=<> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"searchTerm\" value={{{ [get[text]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n\n\n\n\n\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n\n\n
\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<> type=\"nomatch\" text=\"\" default=\"\">\n\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"
{{$:/language/Search/Search/TooShort}}
\"\"\" variable=\"listItem\">\n\n{{$:/core/ui/SearchResults}}\n\n\n\n\n\n\n\n\n\n
\n" - }, - "$:/core/ui/SideBarSegments/site-subtitle": { - "title": "$:/core/ui/SideBarSegments/site-subtitle", - "tags": "$:/tags/SideBarSegment", - "text": "
\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n
\n" - }, - "$:/core/ui/SideBarSegments/site-title": { - "title": "$:/core/ui/SideBarSegments/site-title", - "tags": "$:/tags/SideBarSegment", - "text": "

\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n

\n" - }, - "$:/core/ui/SideBarSegments/tabs": { - "title": "$:/core/ui/SideBarSegments/tabs", - "tags": "$:/tags/SideBarSegment", - "text": "
\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" />\n\n
\n" - }, - "$:/TagManager": { - "title": "$:/TagManager", - "icon": "$:/core/images/tag-button", - "color": "#bbb", - "text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n\n\n\\end\n\\define iconEditor(title)\n
\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n
\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<>/>\"\"\">\n<>\n
\n<>\n\n
\n\n
\n\\end\n\\define toggleButton(state)\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n\n\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n\n\n\\end\n\n\n\n\n\n\n\n\n\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<><><><><>
<$edit-text field=\"color\" tag=\"input\" type=\"color\"/>{{||$:/core/ui/TagTemplate}}<$count filter=\"[all[current]tagging[]]\"/>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix] }}} /> \n
\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix] }}} type=\"match\" text=\"open\" default=\"\">\n\n\n\n\n\n
<><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>
<><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/>
\n\n
\n{{$:/core/ui/UntaggedTemplate}}\n\n<$count filter=\"[untagged[]!is[system]] -[tags[]]\"/>\n
\n" - }, - "$:/core/ui/TagTemplate": { - "title": "$:/core/ui/TagTemplate", - "text": "\\whitespace trim\n\n<$set name=\"transclusion\" value=<>>\n<$macrocall $name=\"tag-pill-body\" tag=<> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<>/> \n\n
\n<$macrocall $name=\"list-tagged-draggable\" tag=<>/>\n\n\n
\n" - }, - "$:/core/ui/TiddlerFieldTemplate": { - "title": "$:/core/ui/TiddlerFieldTemplate", - "text": "\n\n<$text text=<>/>\n\n\n<$view field=<>/>\n\n" - }, - "$:/core/ui/TiddlerFields": { - "title": "$:/core/ui/TiddlerFields", - "text": "\n\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n\n
\n" - }, - "$:/core/ui/TiddlerInfo/Advanced/PluginInfo": { - "title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo", - "tags": "$:/tags/TiddlerInfo/Advanced", - "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <>\n\n<>\n
    \n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<>>\n
  • \n<$link to={{!!title}}>\n<$view field=\"title\"/>\n\n
  • \n\n
\n\n\n" - }, - "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": { - "title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo", - "tags": "$:/tags/TiddlerInfo/Advanced", - "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<>>\n\n''<>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<>\n\n\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<>>\n<>\n\n\n\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<>\n\n\n\n\n\n\n" - }, - "$:/core/ui/TiddlerInfo/Advanced": { - "title": "$:/core/ui/TiddlerInfo/Advanced", - "tags": "$:/tags/TiddlerInfo", - "caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}", - "text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<>/>\n\n\n" - }, - "$:/core/ui/TiddlerInfo/Fields": { - "title": "$:/core/ui/TiddlerInfo/Fields", - "tags": "$:/tags/TiddlerInfo", - "caption": "{{$:/language/TiddlerInfo/Fields/Caption}}", - "text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n" - }, - "$:/core/ui/TiddlerInfo/List": { - "title": "$:/core/ui/TiddlerInfo/List", - "tags": "$:/tags/TiddlerInfo", - "caption": "{{$:/language/TiddlerInfo/List/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<> template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/TiddlerInfo/Listed": { - "title": "$:/core/ui/TiddlerInfo/Listed", - "tags": "$:/tags/TiddlerInfo", - "caption": "{{$:/language/TiddlerInfo/Listed/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<> template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/TiddlerInfo/References": { - "title": "$:/core/ui/TiddlerInfo/References", - "tags": "$:/tags/TiddlerInfo", - "caption": "{{$:/language/TiddlerInfo/References/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<> template=\"$:/core/ui/ListItemTemplate\">\n" - }, - "$:/core/ui/TiddlerInfo/Tagging": { - "title": "$:/core/ui/TiddlerInfo/Tagging", - "tags": "$:/tags/TiddlerInfo", - "caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<> template=\"$:/core/ui/ListItemTemplate\"/>\n" - }, - "$:/core/ui/TiddlerInfo/Tools": { - "title": "$:/core/ui/TiddlerInfo/Tools", - "tags": "$:/tags/TiddlerInfo", - "caption": "{{$:/language/TiddlerInfo/Tools/Caption}}", - "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<>/> <$transclude tiddler=<> field=\"description\"/>\n\n\n\n\n\n\n\n\n" - }, - "$:/core/ui/TiddlerInfo": { - "title": "$:/core/ui/TiddlerInfo", - "text": "
\n
\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n\n\n
\n
\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>" - }, - "$:/core/ui/TopBar/menu": { - "title": "$:/core/ui/TopBar/menu", - "tags": "$:/tags/TopRightBar", - "text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}\n\n" - }, - "$:/core/ui/UntaggedTemplate": { - "title": "$:/core/ui/UntaggedTemplate", - "text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<>\n\n<$reveal state=<> type=\"popup\" position=\"below\">\n
\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n
\n\n" - }, - "$:/core/ui/ViewTemplate/body": { - "title": "$:/core/ui/ViewTemplate/body", - "tags": "$:/tags/ViewTemplate", - "text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n\n\n\n\n\n" - }, - "$:/core/ui/ViewTemplate/classic": { - "title": "$:/core/ui/ViewTemplate/classic", - "tags": "$:/tags/ViewTemplate $:/tags/EditTemplate", - "text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n
\n\n<>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><>\n\n
\n\n" - }, - "$:/core/ui/ViewTemplate/import": { - "title": "$:/core/ui/ViewTemplate/import", - "tags": "$:/tags/ViewTemplate", - "text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<>><>\n<$button message=\"tm-perform-import\" param=<>><>\n<> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n\n\n\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n
\n\n<>\n\n<>\n\n{{||$:/core/ui/ImportListing}}\n\n<>\n\n
\n\n\n" - }, - "$:/core/ui/ViewTemplate/plugin": { - "title": "$:/core/ui/ViewTemplate/plugin", - "tags": "$:/tags/ViewTemplate", - "text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<>>\n{{||$:/core/ui/Components/plugin-info}}\n\n\n\n\n" - }, - "$:/core/ui/ViewTemplate/subtitle": { - "title": "$:/core/ui/ViewTemplate/subtitle", - "tags": "$:/tags/ViewTemplate", - "text": "<$reveal type=\"nomatch\" stateTitle=<> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n
\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n
\n\n" - }, - "$:/core/ui/ViewTemplate/tags": { - "title": "$:/core/ui/ViewTemplate/tags", - "tags": "$:/tags/ViewTemplate", - "text": "<$reveal type=\"nomatch\" stateTitle=<> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n
<$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/>
\n\n" - }, - "$:/core/ui/ViewTemplate/title": { - "title": "$:/core/ui/ViewTemplate/title", - "tags": "$:/tags/ViewTemplate", - "text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n
\n
\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[] [encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<>/>\n\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n>>\n<$transclude tiddler={{!!icon}}/>\n\n\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n

\n$:/<$text text=<>/>\n

\n\n<$list filter=\"[all[current]!prefix[$:/]]\">\n

\n<$view field=\"title\"/>\n

\n\n\n\n
\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<> mode=\"block\"/>\n\n\n
" - }, - "$:/core/ui/ViewTemplate/unfold": { - "title": "$:/core/ui/ViewTemplate/unfold", - "tags": "$:/tags/ViewTemplate", - "text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<> foldedState=<>/>\n{{$:/core/images/chevron-up}}\n\n\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<> foldedState=<>/>\n{{$:/core/images/chevron-down}}\n\n\n\n" - }, - "$:/core/ui/ViewTemplate": { - "title": "$:/core/ui/ViewTemplate", - "text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$ $(userClass)$\n\\end\n\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n<$vars storyTiddler=<> tiddlerInfoState=<> userClass={{!!class}}><$tiddler tiddler=<>>
> data-tags={{!!tags}} class=<>><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<>/>\n
\n\n" - }, - "$:/core/ui/Buttons/clone": { - "title": "$:/core/ui/Buttons/clone", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}", - "description": "{{$:/language/Buttons/Clone/Hint}}", - "text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/clone-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/close-others": { - "title": "$:/core/ui/Buttons/close-others", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}", - "description": "{{$:/language/Buttons/CloseOthers/Hint}}", - "text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/close-others-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/close": { - "title": "$:/core/ui/Buttons/close", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}", - "description": "{{$:/language/Buttons/Close/Hint}}", - "text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/close-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/edit": { - "title": "$:/core/ui/Buttons/edit", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}", - "description": "{{$:/language/Buttons/Edit/Hint}}", - "text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/edit-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/export-tiddler": { - "title": "$:/core/ui/Buttons/export-tiddler", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}", - "description": "{{$:/language/Buttons/ExportTiddler/Hint}}", - "text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<>/>" - }, - "$:/core/ui/Buttons/fold-bar": { - "title": "$:/core/ui/Buttons/fold-bar", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}", - "description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}", - "text": "" - }, - "$:/core/ui/Buttons/fold-others": { - "title": "$:/core/ui/Buttons/fold-others", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}", - "description": "{{$:/language/Buttons/FoldOthers/Hint}}", - "text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/fold": { - "title": "$:/core/ui/Buttons/fold", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}", - "description": "{{$:/language/Buttons/Fold/Hint}}", - "text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<> foldedState=<>/>\n<$list filter=\"[prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n\n\n\n\n<$reveal type=\"match\" stateTitle=<> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<> foldedState=<>/>\n<$list filter=\"[prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n\n\n\n\n" - }, - "$:/core/ui/Buttons/info": { - "title": "$:/core/ui/Buttons/info", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}", - "description": "{{$:/language/Buttons/Info/Hint}}", - "text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/info-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n\n\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n\n\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<> type=\"match\" text=\"\" default=\"\">\n<$button set=<> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n\n\n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n\n\n" - }, - "$:/core/ui/Buttons/more-tiddler-actions": { - "title": "$:/core/ui/Buttons/more-tiddler-actions", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}", - "description": "{{$:/language/Buttons/More/Hint}}", - "text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<> selectedClass=\"tc-selected\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n\n\n\n<$reveal state=<> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n
\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[] [encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<> mode=\"inline\"/>\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n" - }, - "$:/core/ui/Buttons/new-here": { - "title": "$:/core/ui/Buttons/new-here", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}", - "description": "{{$:/language/Buttons/NewHere/Hint}}", - "text": "\\whitespace trim\n\\define newHereButtonTags()\n[[$(currentTiddler)$]]\n\\end\n\\define newHereButton()\n<$button tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<>>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<>/>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/new-here-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n\n\n\n\\end\n<>" - }, - "$:/core/ui/Buttons/new-journal-here": { - "title": "$:/core/ui/Buttons/new-journal-here", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}", - "description": "{{$:/language/Buttons/NewJournalHere/Hint}}", - "text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<> tags=<>/>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n\n\n\n\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<>>\n<>\n\n\n" - }, - "$:/core/ui/Buttons/open-window": { - "title": "$:/core/ui/Buttons/open-window", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}", - "description": "{{$:/language/Buttons/OpenWindow/Hint}}", - "text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/open-window}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/permalink": { - "title": "$:/core/ui/Buttons/permalink", - "tags": "$:/tags/ViewToolbar", - "caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}", - "description": "{{$:/language/Buttons/Permalink/Hint}}", - "text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/permalink-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n\n\n" - }, - "$:/core/ui/Buttons/permaview": { - "title": "$:/core/ui/Buttons/permaview", - "tags": "$:/tags/ViewToolbar $:/tags/PageControls", - "caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}", - "description": "{{$:/language/Buttons/Permaview/Hint}}", - "text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<>>\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/permaview-button}}\n\n<$list filter=\"[prefix[yes]]\">\n\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n\n\n" - }, - "$:/DefaultTiddlers": { - "title": "$:/DefaultTiddlers", - "text": "GettingStarted\n" - }, - "$:/temp/advancedsearch": { - "title": "$:/temp/advancedsearch", - "text": "" - }, - "$:/snippets/allfields": { - "title": "$:/snippets/allfields", - "text": "\\define renderfield(title)\n''$title$''://{{$:/language/Docs/Fields/$title$}}//\n\\end\n<$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<>/>\n
\n" - }, - "$:/config/AnimationDuration": { - "title": "$:/config/AnimationDuration", - "text": "400" - }, - "$:/config/AutoSave": { - "title": "$:/config/AutoSave", - "text": "yes" - }, - "$:/config/BitmapEditor/Colour": { - "title": "$:/config/BitmapEditor/Colour", - "text": "#444" - }, - "$:/config/BitmapEditor/ImageSizes": { - "title": "$:/config/BitmapEditor/ImageSizes", - "text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]" - }, - "$:/config/BitmapEditor/LineWidth": { - "title": "$:/config/BitmapEditor/LineWidth", - "text": "3px" - }, - "$:/config/BitmapEditor/LineWidths": { - "title": "$:/config/BitmapEditor/LineWidths", - "text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px" - }, - "$:/config/BitmapEditor/Opacities": { - "title": "$:/config/BitmapEditor/Opacities", - "text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0" - }, - "$:/config/BitmapEditor/Opacity": { - "title": "$:/config/BitmapEditor/Opacity", - "text": "1.0" - }, - "$:/config/DefaultMoreSidebarTab": { - "title": "$:/config/DefaultMoreSidebarTab", - "text": "$:/core/ui/MoreSideBar/Tags" - }, - "$:/config/DefaultSidebarTab": { - "title": "$:/config/DefaultSidebarTab", - "text": "$:/core/ui/SideBar/Open" - }, - "$:/config/DownloadSaver/AutoSave": { - "title": "$:/config/DownloadSaver/AutoSave", - "text": "no" - }, - "$:/config/Drafts/TypingTimeout": { - "title": "$:/config/Drafts/TypingTimeout", - "text": "400" - }, - "$:/config/EditTemplateFields/Visibility/title": { - "title": "$:/config/EditTemplateFields/Visibility/title", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/tags": { - "title": "$:/config/EditTemplateFields/Visibility/tags", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/text": { - "title": "$:/config/EditTemplateFields/Visibility/text", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/creator": { - "title": "$:/config/EditTemplateFields/Visibility/creator", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/created": { - "title": "$:/config/EditTemplateFields/Visibility/created", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/modified": { - "title": "$:/config/EditTemplateFields/Visibility/modified", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/modifier": { - "title": "$:/config/EditTemplateFields/Visibility/modifier", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/type": { - "title": "$:/config/EditTemplateFields/Visibility/type", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/draft.title": { - "title": "$:/config/EditTemplateFields/Visibility/draft.title", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/draft.of": { - "title": "$:/config/EditTemplateFields/Visibility/draft.of", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/revision": { - "title": "$:/config/EditTemplateFields/Visibility/revision", - "text": "hide" - }, - "$:/config/EditTemplateFields/Visibility/bag": { - "title": "$:/config/EditTemplateFields/Visibility/bag", - "text": "hide" - }, - "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": { - "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4", - "text": "hide" - }, - "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": { - "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5", - "text": "hide" - }, - "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": { - "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6", - "text": "hide" - }, - "$:/config/EditorTypeMappings/image/gif": { - "title": "$:/config/EditorTypeMappings/image/gif", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/image/webp": { - "title": "$:/config/EditorTypeMappings/image/webp", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/image/heic": { - "title": "$:/config/EditorTypeMappings/image/heic", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/image/heif": { - "title": "$:/config/EditorTypeMappings/image/heif", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/image/jpeg": { - "title": "$:/config/EditorTypeMappings/image/jpeg", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/image/jpg": { - "title": "$:/config/EditorTypeMappings/image/jpg", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/image/png": { - "title": "$:/config/EditorTypeMappings/image/png", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/image/x-icon": { - "title": "$:/config/EditorTypeMappings/image/x-icon", - "text": "bitmap" - }, - "$:/config/EditorTypeMappings/text/vnd.tiddlywiki": { - "title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki", - "text": "text" - }, - "$:/config/Manager/Show": { - "title": "$:/config/Manager/Show", - "text": "tiddlers" - }, - "$:/config/Manager/Filter": { - "title": "$:/config/Manager/Filter", - "text": "" - }, - "$:/config/Manager/Order": { - "title": "$:/config/Manager/Order", - "text": "forward" - }, - "$:/config/Manager/Sort": { - "title": "$:/config/Manager/Sort", - "text": "title" - }, - "$:/config/Manager/System": { - "title": "$:/config/Manager/System", - "text": "system" - }, - "$:/config/Manager/Tag": { - "title": "$:/config/Manager/Tag", - "text": "" - }, - "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": { - "title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText", - "text": "hide" - }, - "$:/config/MissingLinks": { - "title": "$:/config/MissingLinks", - "text": "yes" - }, - "$:/config/Navigation/UpdateAddressBar": { - "title": "$:/config/Navigation/UpdateAddressBar", - "text": "no" - }, - "$:/config/Navigation/UpdateHistory": { - "title": "$:/config/Navigation/UpdateHistory", - "text": "no" - }, - "$:/config/NewImageType": { - "title": "$:/config/NewImageType", - "text": "jpeg" - }, - "$:/config/OfficialPluginLibrary": { - "title": "$:/config/OfficialPluginLibrary", - "tags": "$:/tags/PluginLibrary", - "url": "https://tiddlywiki.com/library/v5.1.19/index.html", - "caption": "{{$:/language/OfficialPluginLibrary}}", - "text": "{{$:/language/OfficialPluginLibrary/Hint}}\n" - }, - "$:/config/Navigation/openLinkFromInsideRiver": { - "title": "$:/config/Navigation/openLinkFromInsideRiver", - "text": "below" - }, - "$:/config/Navigation/openLinkFromOutsideRiver": { - "title": "$:/config/Navigation/openLinkFromOutsideRiver", - "text": "top" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme", - "text": "hide" - }, - "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": { - "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all", - "text": "hide" - }, - "$:/config/Performance/Instrumentation": { - "title": "$:/config/Performance/Instrumentation", - "text": "no" - }, - "$:/config/SaveWikiButton/Template": { - "title": "$:/config/SaveWikiButton/Template", - "text": "$:/core/save/all" - }, - "$:/config/SaverFilter": { - "title": "$:/config/SaverFilter", - "text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]" - }, - "$:/config/Search/AutoFocus": { - "title": "$:/config/Search/AutoFocus", - "text": "true" - }, - "$:/config/Search/MinLength": { - "title": "$:/config/Search/MinLength", - "text": "3" - }, - "$:/config/SearchResults/Default": { - "title": "$:/config/SearchResults/Default", - "text": "$:/core/ui/DefaultSearchResultList" - }, - "$:/config/ShortcutInfo/bold": { - "title": "$:/config/ShortcutInfo/bold", - "text": "{{$:/language/Buttons/Bold/Hint}}" - }, - "$:/config/ShortcutInfo/cancel-edit-tiddler": { - "title": "$:/config/ShortcutInfo/cancel-edit-tiddler", - "text": "{{$:/language/Buttons/Cancel/Hint}}" - }, - "$:/config/ShortcutInfo/excise": { - "title": "$:/config/ShortcutInfo/excise", - "text": "{{$:/language/Buttons/Excise/Hint}}" - }, - "$:/config/ShortcutInfo/heading-1": { - "title": "$:/config/ShortcutInfo/heading-1", - "text": "{{$:/language/Buttons/Heading1/Hint}}" - }, - "$:/config/ShortcutInfo/heading-2": { - "title": "$:/config/ShortcutInfo/heading-2", - "text": "{{$:/language/Buttons/Heading2/Hint}}" - }, - "$:/config/ShortcutInfo/heading-3": { - "title": "$:/config/ShortcutInfo/heading-3", - "text": "{{$:/language/Buttons/Heading3/Hint}}" - }, - "$:/config/ShortcutInfo/heading-4": { - "title": "$:/config/ShortcutInfo/heading-4", - "text": "{{$:/language/Buttons/Heading4/Hint}}" - }, - "$:/config/ShortcutInfo/heading-5": { - "title": "$:/config/ShortcutInfo/heading-5", - "text": "{{$:/language/Buttons/Heading5/Hint}}" - }, - "$:/config/ShortcutInfo/heading-6": { - "title": "$:/config/ShortcutInfo/heading-6", - "text": "{{$:/language/Buttons/Heading6/Hint}}" - }, - "$:/config/ShortcutInfo/italic": { - "title": "$:/config/ShortcutInfo/italic", - "text": "{{$:/language/Buttons/Italic/Hint}}" - }, - "$:/config/ShortcutInfo/link": { - "title": "$:/config/ShortcutInfo/link", - "text": "{{$:/language/Buttons/Link/Hint}}" - }, - "$:/config/ShortcutInfo/list-bullet": { - "title": "$:/config/ShortcutInfo/list-bullet", - "text": "{{$:/language/Buttons/ListBullet/Hint}}" - }, - "$:/config/ShortcutInfo/list-number": { - "title": "$:/config/ShortcutInfo/list-number", - "text": "{{$:/language/Buttons/ListNumber/Hint}}" - }, - "$:/config/ShortcutInfo/mono-block": { - "title": "$:/config/ShortcutInfo/mono-block", - "text": "{{$:/language/Buttons/MonoBlock/Hint}}" - }, - "$:/config/ShortcutInfo/mono-line": { - "title": "$:/config/ShortcutInfo/mono-line", - "text": "{{$:/language/Buttons/MonoLine/Hint}}" - }, - "$:/config/ShortcutInfo/new-image": { - "title": "$:/config/ShortcutInfo/new-image", - "text": "{{$:/language/Buttons/NewImage/Hint}}" - }, - "$:/config/ShortcutInfo/new-journal": { - "title": "$:/config/ShortcutInfo/new-journal", - "text": "{{$:/language/Buttons/NewJournal/Hint}}" - }, - "$:/config/ShortcutInfo/new-tiddler": { - "title": "$:/config/ShortcutInfo/new-tiddler", - "text": "{{$:/language/Buttons/NewTiddler/Hint}}" - }, - "$:/config/ShortcutInfo/picture": { - "title": "$:/config/ShortcutInfo/picture", - "text": "{{$:/language/Buttons/Picture/Hint}}" - }, - "$:/config/ShortcutInfo/preview": { - "title": "$:/config/ShortcutInfo/preview", - "text": "{{$:/language/Buttons/Preview/Hint}}" - }, - "$:/config/ShortcutInfo/quote": { - "title": "$:/config/ShortcutInfo/quote", - "text": "{{$:/language/Buttons/Quote/Hint}}" - }, - "$:/config/ShortcutInfo/save-tiddler": { - "title": "$:/config/ShortcutInfo/save-tiddler", - "text": "{{$:/language/Buttons/Save/Hint}}" - }, - "$:/config/ShortcutInfo/stamp": { - "title": "$:/config/ShortcutInfo/stamp", - "text": "{{$:/language/Buttons/Stamp/Hint}}" - }, - "$:/config/ShortcutInfo/strikethrough": { - "title": "$:/config/ShortcutInfo/strikethrough", - "text": "{{$:/language/Buttons/Strikethrough/Hint}}" - }, - "$:/config/ShortcutInfo/subscript": { - "title": "$:/config/ShortcutInfo/subscript", - "text": "{{$:/language/Buttons/Subscript/Hint}}" - }, - "$:/config/ShortcutInfo/superscript": { - "title": "$:/config/ShortcutInfo/superscript", - "text": "{{$:/language/Buttons/Superscript/Hint}}" - }, - "$:/config/ShortcutInfo/underline": { - "title": "$:/config/ShortcutInfo/underline", - "text": "{{$:/language/Buttons/Underline/Hint}}" - }, - "$:/config/SyncFilter": { - "title": "$:/config/SyncFilter", - "text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]" - }, - "$:/config/Tags/MinLength": { - "title": "$:/config/Tags/MinLength", - "text": "0" - }, - "$:/config/TextEditor/EditorHeight/Height": { - "title": "$:/config/TextEditor/EditorHeight/Height", - "text": "400px" - }, - "$:/config/TextEditor/EditorHeight/Mode": { - "title": "$:/config/TextEditor/EditorHeight/Mode", - "text": "auto" - }, - "$:/config/TiddlerInfo/Default": { - "title": "$:/config/TiddlerInfo/Default", - "text": "$:/core/ui/TiddlerInfo/Fields" - }, - "$:/config/TiddlerInfo/Mode": { - "title": "$:/config/TiddlerInfo/Mode", - "text": "popup" - }, - "$:/config/Tiddlers/TitleLinks": { - "title": "$:/config/Tiddlers/TitleLinks", - "text": "no" - }, - "$:/config/Toolbar/ButtonClass": { - "title": "$:/config/Toolbar/ButtonClass", - "text": "tc-btn-invisible" - }, - "$:/config/Toolbar/Icons": { - "title": "$:/config/Toolbar/Icons", - "text": "yes" - }, - "$:/config/Toolbar/Text": { - "title": "$:/config/Toolbar/Text", - "text": "no" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions", - "text": "show" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar", - "text": "hide" - }, - "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": { - "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others", - "text": "hide" - }, - "$:/config/shortcuts-mac/bold": { - "title": "$:/config/shortcuts-mac/bold", - "text": "meta-B" - }, - "$:/config/shortcuts-mac/italic": { - "title": "$:/config/shortcuts-mac/italic", - "text": "meta-I" - }, - "$:/config/shortcuts-mac/underline": { - "title": "$:/config/shortcuts-mac/underline", - "text": "meta-U" - }, - "$:/config/shortcuts-mac/new-image": { - "title": "$:/config/shortcuts-mac/new-image", - "text": "ctrl-I" - }, - "$:/config/shortcuts-mac/new-journal": { - "title": "$:/config/shortcuts-mac/new-journal", - "text": "ctrl-J" - }, - "$:/config/shortcuts-mac/new-tiddler": { - "title": "$:/config/shortcuts-mac/new-tiddler", - "text": "ctrl-N" - }, - "$:/config/shortcuts-not-mac/bold": { - "title": "$:/config/shortcuts-not-mac/bold", - "text": "ctrl-B" - }, - "$:/config/shortcuts-not-mac/italic": { - "title": "$:/config/shortcuts-not-mac/italic", - "text": "ctrl-I" - }, - "$:/config/shortcuts-not-mac/underline": { - "title": "$:/config/shortcuts-not-mac/underline", - "text": "ctrl-U" - }, - "$:/config/shortcuts-not-mac/new-image": { - "title": "$:/config/shortcuts-not-mac/new-image", - "text": "alt-I" - }, - "$:/config/shortcuts-not-mac/new-journal": { - "title": "$:/config/shortcuts-not-mac/new-journal", - "text": "alt-J" - }, - "$:/config/shortcuts-not-mac/new-tiddler": { - "title": "$:/config/shortcuts-not-mac/new-tiddler", - "text": "alt-N" - }, - "$:/config/shortcuts/cancel-edit-tiddler": { - "title": "$:/config/shortcuts/cancel-edit-tiddler", - "text": "escape" - }, - "$:/config/shortcuts/excise": { - "title": "$:/config/shortcuts/excise", - "text": "ctrl-E" - }, - "$:/config/shortcuts/heading-1": { - "title": "$:/config/shortcuts/heading-1", - "text": "ctrl-1" - }, - "$:/config/shortcuts/heading-2": { - "title": "$:/config/shortcuts/heading-2", - "text": "ctrl-2" - }, - "$:/config/shortcuts/heading-3": { - "title": "$:/config/shortcuts/heading-3", - "text": "ctrl-3" - }, - "$:/config/shortcuts/heading-4": { - "title": "$:/config/shortcuts/heading-4", - "text": "ctrl-4" - }, - "$:/config/shortcuts/heading-5": { - "title": "$:/config/shortcuts/heading-5", - "text": "ctrl-5" - }, - "$:/config/shortcuts/heading-6": { - "title": "$:/config/shortcuts/heading-6", - "text": "ctrl-6" - }, - "$:/config/shortcuts/link": { - "title": "$:/config/shortcuts/link", - "text": "ctrl-L" - }, - "$:/config/shortcuts/linkify": { - "title": "$:/config/shortcuts/linkify", - "text": "alt-shift-L" - }, - "$:/config/shortcuts/list-bullet": { - "title": "$:/config/shortcuts/list-bullet", - "text": "ctrl-shift-L" - }, - "$:/config/shortcuts/list-number": { - "title": "$:/config/shortcuts/list-number", - "text": "ctrl-shift-N" - }, - "$:/config/shortcuts/mono-block": { - "title": "$:/config/shortcuts/mono-block", - "text": "ctrl-shift-M" - }, - "$:/config/shortcuts/mono-line": { - "title": "$:/config/shortcuts/mono-line", - "text": "ctrl-M" - }, - "$:/config/shortcuts/picture": { - "title": "$:/config/shortcuts/picture", - "text": "ctrl-shift-I" - }, - "$:/config/shortcuts/preview": { - "title": "$:/config/shortcuts/preview", - "text": "alt-P" - }, - "$:/config/shortcuts/quote": { - "title": "$:/config/shortcuts/quote", - "text": "ctrl-Q" - }, - "$:/config/shortcuts/save-tiddler": { - "title": "$:/config/shortcuts/save-tiddler", - "text": "ctrl+enter" - }, - "$:/config/shortcuts/stamp": { - "title": "$:/config/shortcuts/stamp", - "text": "ctrl-S" - }, - "$:/config/shortcuts/strikethrough": { - "title": "$:/config/shortcuts/strikethrough", - "text": "ctrl-T" - }, - "$:/config/shortcuts/subscript": { - "title": "$:/config/shortcuts/subscript", - "text": "ctrl-shift-B" - }, - "$:/config/shortcuts/superscript": { - "title": "$:/config/shortcuts/superscript", - "text": "ctrl-shift-P" - }, - "$:/config/shortcuts/transcludify": { - "title": "$:/config/shortcuts/transcludify", - "text": "alt-shift-T" - }, - "$:/config/WikiParserRules/Inline/wikilink": { - "title": "$:/config/WikiParserRules/Inline/wikilink", - "text": "enable" - }, - "$:/snippets/currpalettepreview": { - "title": "$:/snippets/currpalettepreview", - "text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}\n>
> title=<>/>\n\\end\n
<$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><>
" - }, - "$:/snippets/download-wiki-button": { - "title": "$:/snippets/download-wiki-button", - "text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<> {{$:/core/images/save-button}}\n" - }, - "$:/language": { - "title": "$:/language", - "text": "$:/languages/en-GB" - }, - "$:/snippets/languageswitcher": { - "title": "$:/snippets/languageswitcher", - "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n
\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\">
>>\n<$link>\n\n<$set name=\"languagePluginTitle\" value=<>>\n<$transclude subtiddler=<>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n\n\n\n\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n\n\n\n
\n\n\n
\n" - }, - "$:/core/macros/CSS": { - "title": "$:/core/macros/CSS", - "tags": "$:/tags/Macro", - "text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"/>\n\\end\n\n\\define color(name)\n<>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$\n\\end\n" - }, - "$:/core/macros/colour-picker": { - "title": "$:/core/macros/colour-picker", - "tags": "$:/tags/Macro", - "text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n
\n\n\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define colour-picker(actions)\n
\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/> \n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n\n\n
\n\n\\end\n" - }, - "$:/core/macros/copy-to-clipboard": { - "title": "$:/core/macros/copy-to-clipboard", - "tags": "$:/tags/Macro", - "text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n
\n
\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n
\n
\n\\end\n\n" - }, - "$:/core/macros/diff": { - "title": "$:/core/macros/diff", - "tags": "$:/tags/Macro", - "text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<> dest=<>/>\n\n\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n\n\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist] [enlist] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n\n\n\n\n\n\n\n\n
\n<$text text=<>/> \n\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<>>\n<$diff-text source=<> dest=<>>\n\n\n\n
\n\\end\n" - }, - "$:/core/macros/export": { - "title": "$:/core/macros/export", - "tags": "$:/tags/Macro", - "text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<$button popup=<> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<> selectedClass=\"tc-selected\">\n<$list filter=\"[prefix[yes]]\">\n{{$:/core/images/export-button}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text={{$lingoBase$Caption}}/>\n\n<$reveal state=<> type=\"popup\" position=\"below\" animate=\"yes\">\n
\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<>/>\n<$action-deletetiddler $tiddler=<>/>\n<$transclude field=\"description\"/>\n\n\n\n
\n\n\\end\n" - }, - "$:/core/macros/image-picker": { - "title": "$:/core/macros/image-picker", - "created": "20170715180840889", - "modified": "20170715180914005", - "tags": "$:/tags/Macro", - "type": "text/vnd.tiddlywiki", - "text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<>/>\n\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n
\n<$vars state-system=<>>\n<$checkbox tiddler=<> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n\n<$reveal state=<> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\n<$reveal state=<> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\n\n
\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n" - }, - "$:/core/macros/lingo": { - "title": "$:/core/macros/lingo", - "tags": "$:/tags/Macro", - "text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n" - }, - "$:/core/macros/list": { - "title": "$:/core/macros/list", - "tags": "$:/tags/Macro", - "text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n\n\n\n\n\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<> $field=<> $subfilter=\"+[insertbefore:currentTiddler]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<> tag=\"\"\"$subtype$\"\"\">\n
\n \n
\n
\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n\n\n\n
\n\n\n\n<$tiddler tiddler=\"\">\n<$droppable actions=<> tag=\"div\">\n
\n \n
\n
\n\n\n\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n\n\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist] +[insertbefore:currentTiddler]\"/>\n\n\n\n\n<$list filter=\"[!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n\n\n\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\")\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\">\n<$elementTag$ class=\"tc-droppable-placeholder\">\n \n\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n\n\n\n\n\n\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\">\n<$elementTag$ class=\"tc-droppable-placeholder\">\n \n\n<$elementTag$ style=\"height:0.5em;\">\n\n\n\n\n\\end\n" - }, - "$:/core/macros/tabs": { - "title": "$:/core/macros/tabs", - "tags": "$:/tags/Macro", - "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain)\n
\n
\n<$list filter=\"$tabsList$\" variable=\"currentTab\"><$set name=\"save-currentTiddler\" value=<>><$tiddler tiddler=<>><$button set=<> setTo=<> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n\n\n
\n
\n
\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<> text=<> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<> mode=\"block\"/>\n\n\n\n\n\n\n
\n
\n\\end\n" - }, - "$:/core/macros/tag-picker": { - "title": "$:/core/macros/tag-picker", - "tags": "$:/tags/Macro", - "text": "\\define add-tag-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n\\end\n\n\\define add-tag-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n\\end\n\n\\define tag-button()\n<$button class=\"tc-btn-invisible\" tag=\"a\">\n$(actions)$\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$macrocall $name=\"tag-pill\" tag=<>/>\n\n\\end\n\n\\define tag-picker(actions)\n<$set name=\"actions\" value=\"\"\"$actions$\"\"\">\n
\n\n<$keyboard key=\"ENTER\" actions=<>>\n<$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<> class=\"tc-edit-texteditor tc-popup-handle\"/>\n\n <$button popup=<> class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}} \n<$set name=\"tag\" value={{$:/temp/NewTagName}}>\n<$button set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n$actions$\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n\n\n\n
\n
\n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\">\n
\n<$list filter=\"[{$:/temp/NewTagName}minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"
{{$:/language/Search/Search/TooShort}}
\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]!is[system]search:title{$:/temp/NewTagName}sort[]]\" variable=\"tag\">\n<>\n\n
\n<$list filter=\"[{$:/temp/NewTagName}minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"
{{$:/language/Search/Search/TooShort}}
\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]is[system]search:title{$:/temp/NewTagName}sort[]]\" variable=\"tag\">\n<>\n\n
\n\n
\n\n\\end\n" - }, - "$:/core/macros/tag": { - "title": "$:/core/macros/tag", - "tags": "$:/tags/Macro", - "text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/> <$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n\n\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n" - }, - "$:/core/macros/thumbnails": { - "title": "$:/core/macros/thumbnails", - "tags": "$:/tags/Macro", - "text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\">
\n
<$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n<$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\">
\n$icon$\n
\n$caption$\n
\n
\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n
<>
\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/>\n\\end\n" - }, - "$:/core/macros/timeline": { - "title": "$:/core/macros/timeline", - "created": "20141212105914482", - "modified": "20141212110330815", - "tags": "$:/tags/Macro", - "text": "\\define timeline-title()\n\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n
\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n
\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n
\n<$link to={{!!title}}>\n<>\n\n
\n\n
\n\n
\n\\end\n" - }, - "$:/core/macros/toc": { - "title": "$:/core/macros/toc", - "tags": "$:/tags/Macro", - "text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n <$transclude field=\"caption\">\n <$view field=\"title\"/>\n \n\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n
    \n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$vars item=<> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}} excluded=\"\"\"[enlist<__exclude__>] -[<__tag__>]\"\"\">\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item\" value=\"toc-item-selected\">\n
  1. >>\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/>\">\n <>\n \n <$macrocall $name=\"toc-body\" tag=<> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<> path=<>/>\n
  2. \n \n \n \n
\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\" \")\n<$macrocall $name=\"toc-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item\" value=\"toc-item-selected\">\n
  • >>\n <$link>\n <$reveal type=\"nomatch\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n \n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n \n \n <>\n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n \n
  • \n \n\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item\" value=\"toc-item-selected\">\n
  • >>\n <$reveal type=\"nomatch\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <>\n \n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <>\n \n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n \n
  • \n \n\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<> sort=<> itemClassFilter=<> exclude=<> path=<>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> excluded=\"\"\"[enlist<__exclude__>] -[<__tag__>]\"\"\" path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n
      \n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<> >\n <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<> path=<> />\n \n \n
    \n\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item\" value=\"toc-item-selected\" >\n
  • >>\n <$link>\n <$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}\">\n <$reveal type=\"nomatch\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n \n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n \n \n \n <>\n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n \n
  • \n \n\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter:\" \",exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item\" value=\"toc-item-selected\">\n
  • >>\n <$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}} <$view field='caption'><$view field='title'/>\">\n <$reveal type=\"nomatch\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <>\n \n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$button setTitle=<> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <>\n \n \n \n <$reveal type=\"match\" stateTitle=<> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n \n
  • \n \n\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<> sort=<> itemClassFilter=<> exclude=<> path=<>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> excluded=\"\"\"[enlist<__exclude__>] -[<__tag__>]\"\"\" path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n
      \n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<> >\n <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<> path=<>/>\n \n \n
    \n\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n
    \n <$linkcatcher to=<<__selectedTiddler__>>>\n
    \n <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]field:title<__selectedTiddler__>]\"/>\n
    \n \n
    \n <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=<<__template__>>>\n

    <>

    \n <$transclude mode=\"block\">$missingText$\n \n \n <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n $unselectedText$\n \n
    \n
    \n\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n\n\\end\n\n" - }, - "$:/core/macros/translink": { - "title": "$:/core/macros/translink", - "tags": "$:/tags/Macro", - "text": "\\define translink(title,mode:\"block\")\n
    \n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n\n
    \n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n\n
    \n
    \n\\end\n" - }, - "$:/core/macros/tree": { - "title": "$:/core/macros/tree", - "tags": "$:/tags/Macro", - "text": "\\define leaf-link(full-title, chunk)\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/>\n\\end\n\n\\define leaf-node(prefix, chunk)\n
  • \n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[removeprefix<__prefix__>]\" variable=\"chunk\">\n{{$:/core/images/file}} <$macrocall $name=\"leaf-link\" full-title=<> chunk=<>/>\n\n\n
  • \n\\end\n\n\\define branch-node(prefix, chunk)\n
  • \n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<> text=\"show\">\n<$button setTitle=<> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n\n\n<$reveal type=\"match\" stateTitle=<> text=\"show\">\n<$button setTitle=<> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n\n\n(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)\n<$reveal type=\"match\" stateTitle=<> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}}/>\n\n\n
  • \n\\end\n\n\\define tree-node(prefix)\n
      \n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore[/]sort[]!suffix[/]]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<>/>\n\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore[/]sort[]suffix[/]]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<>/>\n\n
    \n\\end\n\n\\define tree(prefix: \"$:/\")\n
    \n<$text text=<<__prefix__>>/>\n
    \n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>>/>\n
    \n
    \n\\end\n" - }, - "$:/snippets/minilanguageswitcher": { - "title": "$:/snippets/minilanguageswitcher", - "text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n\n\n" - }, - "$:/snippets/minithemeswitcher": { - "title": "$:/snippets/minithemeswitcher", - "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n\n\n" - }, - "$:/snippets/modules": { - "title": "$:/snippets/modules", - "text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<>/>\n\n
      <$list filter=\"[all[current]modules[]]\">
    • <$link><>\n
    • \n\n
    \n\n" - }, - "$:/palette": { - "title": "$:/palette", - "text": "$:/palettes/Vanilla" - }, - "$:/snippets/paletteeditor": { - "title": "$:/snippets/paletteeditor", - "text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><>\n\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<>\n\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><>\n\n\n\n<$list filter=\"[all[current]indexes[]]\" variable=\"colourName\">\n\n\n\n\n\n\n
    \n''<$macrocall $name=\"describePaletteColour\" colour=<>/>''
    \n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n
    \n<$edit-text index=<> tag=\"input\"/>\n
    \n<$edit-text index=<> type=\"color\" tag=\"input\"/>\n
    \n\n" - }, - "$:/snippets/palettepreview": { - "title": "$:/snippets/palettepreview", - "text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n\n" - }, - "$:/snippets/paletteswitcher": { - "title": "$:/snippets/paletteswitcher", - "text": "<$linkcatcher to=\"$:/palette\">\n
    <$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[description]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\">
    >><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}\n
    \n\n
    \n" - }, - "$:/snippets/peek-stylesheets": { - "title": "$:/snippets/peek-stylesheets", - "text": "\\define expandable-stylesheets-list()\n
      \n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<>>\n<$set name=\"state\" value={{{ [addsuffix] }}}>\n
    1. \n<$reveal type=\"match\" state=<> text=\"yes\" tag=\"span\">\n<$button set=<> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n\n\n<$reveal type=\"nomatch\" state=<> text=\"yes\" tag=\"span\">\n<$button set=<> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n\n\n<$link>\n<$view field=\"title\"/>\n\n<$reveal type=\"match\" state=<> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<>>\n<$wikify name=\"styles\" text=<>>\n
      \n\n<$text text=<>/>\n\n
      \n\n\n\n
    2. \n\n\n\n
    \n\\end\n\n\\define stylesheets-list()\n
      \n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n
    1. \n<$link>\n<$view field=\"title\"/>\n\n<$set name=\"source\" tiddler=<>>\n<$wikify name=\"styles\" text=<>>\n
      \n\n<$text text=<>/>\n\n
      \n\n\n
    2. \n\n
    \n\\end\n\n<$vars modeState=<>>\n\n<$reveal type=\"nomatch\" state=<> text=\"expanded\" tag=\"div\">\n<$button set=<> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}\n\n<$reveal type=\"match\" state=<> text=\"expanded\" tag=\"div\">\n<$button set=<> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}\n\n\n<$reveal type=\"nomatch\" state=<> text=\"expanded\" tag=\"div\">\n<>\n\n<$reveal type=\"match\" state=<> text=\"expanded\" tag=\"div\">\n<>\n\n\n\n" - }, - "$:/temp/search": { - "title": "$:/temp/search", - "text": "" - }, - "$:/tags/AdvancedSearch": { - "title": "$:/tags/AdvancedSearch", - "list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]" - }, - "$:/tags/AdvancedSearch/FilterButton": { - "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" - }, - "$:/tags/ControlPanel": { - "title": "$:/tags/ControlPanel", - "list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals" - }, - "$:/tags/ControlPanel/Info": { - "title": "$:/tags/ControlPanel/Info", - "list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced" - }, - "$:/tags/ControlPanel/Plugins": { - "title": "$:/tags/ControlPanel/Plugins", - "list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]" - }, - "$:/tags/EditTemplate": { - "title": "$:/tags/EditTemplate", - "list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]" - }, - "$:/tags/EditToolbar": { - "title": "$:/tags/EditToolbar", - "list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]" - }, - "$:/tags/EditorToolbar": { - "title": "$:/tags/EditorToolbar", - "list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type" - }, - "$:/tags/Manager/ItemMain": { - "title": "$:/tags/Manager/ItemMain", - "list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields" - }, - "$:/tags/Manager/ItemSidebar": { - "title": "$:/tags/Manager/ItemSidebar", - "list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools" - }, - "$:/tags/MoreSideBar": { - "title": "$:/tags/MoreSideBar", - "list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]", - "text": "" - }, - "$:/tags/PageControls": { - "title": "$:/tags/PageControls", - "list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]" - }, - "$:/tags/PageTemplate": { - "title": "$:/tags/PageTemplate", - "list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]", - "text": "" - }, - "$:/tags/SideBar": { - "title": "$:/tags/SideBar", - "list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]", - "text": "" - }, - "$:/tags/SideBarSegment": { - "title": "$:/tags/SideBarSegment", - "list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]" - }, - "$:/tags/TiddlerInfo": { - "title": "$:/tags/TiddlerInfo", - "list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]", - "text": "" - }, - "$:/tags/TiddlerInfo/Advanced": { - "title": "$:/tags/TiddlerInfo/Advanced", - "list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]" - }, - "$:/tags/ViewTemplate": { - "title": "$:/tags/ViewTemplate", - "list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]" - }, - "$:/tags/ViewToolbar": { - "title": "$:/tags/ViewToolbar", - "list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]" - }, - "$:/snippets/themeswitcher": { - "title": "$:/snippets/themeswitcher", - "text": "<$linkcatcher to=\"$:/theme\">\n
    <$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\">
    >><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/>
    \n\n\n
    \n" - }, - "$:/core/wiki/title": { - "title": "$:/core/wiki/title", - "text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}" - }, - "$:/view": { - "title": "$:/view", - "text": "classic" - }, - "$:/snippets/viewswitcher": { - "title": "$:/snippets/viewswitcher", - "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n
    \n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\">
    >>\n<$link to=<>>\n<$transclude tiddler=<>/>\n<$text text=<>/>\n\n
    \n\n\n
    \n" - } - } -} \ No newline at end of file diff --git a/tiddlers/$__favicon.ico.meta b/tiddlers/$__favicon.ico.meta index 640ccd7..fcb260f 100644 --- a/tiddlers/$__favicon.ico.meta +++ b/tiddlers/$__favicon.ico.meta @@ -1,7 +1,7 @@ created: 20181214161558647 creator: Mohammad -modified: 20190216180307726 +modified: 20190704155012488 modifier: Mohammad tags: title: $:/favicon.ico -type: image/x-icon +type: image/x-icon \ No newline at end of file diff --git a/tiddlers/TWDark.css b/tiddlers/$__highlight.js_theme_twdark.css similarity index 94% rename from tiddlers/TWDark.css rename to tiddlers/$__highlight.js_theme_twdark.css index 9ea5889..131c07f 100644 --- a/tiddlers/TWDark.css +++ b/tiddlers/$__highlight.js_theme_twdark.css @@ -28,10 +28,13 @@ Mohammad Rahmani } .hljs-selector-attr, +.hljs-selector-class, .hljs-selector-pseudo { - color: #f99157; + color: #ffffff; } + + .hljs-number{ color: #7FB347; } @@ -92,8 +95,8 @@ Mohammad Rahmani .hljs-emphasis { font-style: italic; } + /*correctio of tex tags*/ -.hljs-tag, -.hljs-section { - color: #ff0000; +.hljs-tag { + color: #b5bd68; } \ No newline at end of file diff --git a/tiddlers/TWDark.css.meta b/tiddlers/$__highlight.js_theme_twdark.css.meta similarity index 52% rename from tiddlers/TWDark.css.meta rename to tiddlers/$__highlight.js_theme_twdark.css.meta index 2f85598..ec32773 100644 --- a/tiddlers/TWDark.css.meta +++ b/tiddlers/$__highlight.js_theme_twdark.css.meta @@ -1,7 +1,7 @@ created: 20180419120729037 creator: Mohammad -modified: 20190224163836845 +modified: 20190704155012482 modifier: Mohammad tags: $:/tags/Stylesheet -title: TWDark -type: text/css +title: $:/highlight.js/theme/twdark.css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__kookma_demo_dbadge.tid b/tiddlers/$__kookma_demo_dbadge.tid index 4a1c8e7..9d6bed5 100644 --- a/tiddlers/$__kookma_demo_dbadge.tid +++ b/tiddlers/$__kookma_demo_dbadge.tid @@ -1,6 +1,6 @@ created: 20181204193605622 creator: Mohammad -modified: 20190406122513583 +modified: 20190704155012471 modifier: Mohammad tags: badge title: $:/kookma/demo/dbadge diff --git a/tiddlers/$__kookma_macro_dbadge.tid b/tiddlers/$__kookma_macro_dbadge.tid index 9a9a9aa..7409a50 100644 --- a/tiddlers/$__kookma_macro_dbadge.tid +++ b/tiddlers/$__kookma_macro_dbadge.tid @@ -1,6 +1,6 @@ created: 20181203212737578 creator: Mohammad -modified: 20190406122513576 +modified: 20190704155012467 modifier: Mohammad tags: $:/tags/Macro badge title: $:/kookma/macro/dbadge diff --git a/tiddlers/$__kookma_stylesheet_dbadge.css.meta b/tiddlers/$__kookma_stylesheet_dbadge.css.meta index 33a458c..88b053a 100644 --- a/tiddlers/$__kookma_stylesheet_dbadge.css.meta +++ b/tiddlers/$__kookma_stylesheet_dbadge.css.meta @@ -1,7 +1,7 @@ created: 20181204192835967 creator: Mohammad -modified: 20190406122513568 +modified: 20190704155012462 modifier: Mohammad tags: badge $:/tags/Stylesheet title: $:/kookma/stylesheet/dbadge -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__palette.tid b/tiddlers/$__palette.tid index 43e18e1..ca88d9d 100644 --- a/tiddlers/$__palette.tid +++ b/tiddlers/$__palette.tid @@ -1,6 +1,6 @@ created: 20190331154905061 creator: Mohammad -modified: 20190406122513560 +modified: 20190704155012457 modifier: Mohammad title: $:/palette type: text/vnd.tiddlywiki diff --git a/tiddlers/$__plugins_.mr_shiraz_images_view-fields.svg.tid b/tiddlers/$__plugins_.mr_shiraz_images_view-fields.svg.tid index 7d1e180..e0ce909 100644 --- a/tiddlers/$__plugins_.mr_shiraz_images_view-fields.svg.tid +++ b/tiddlers/$__plugins_.mr_shiraz_images_view-fields.svg.tid @@ -1,6 +1,6 @@ created: 20181010193706723 creator: Mohammad -modified: 20190216180307700 +modified: 20190704155012451 modifier: Mohammad tags: title: $:/plugins/.mr/shiraz/images/view-fields.svg diff --git a/tiddlers/$__plugins_.mr_shiraz_macro_alerts.tid b/tiddlers/$__plugins_.mr_shiraz_macro_alerts.tid index fac1e2d..a91e1c5 100644 --- a/tiddlers/$__plugins_.mr_shiraz_macro_alerts.tid +++ b/tiddlers/$__plugins_.mr_shiraz_macro_alerts.tid @@ -1,6 +1,6 @@ created: 20180821095049685 creator: Mohammad -modified: 20190216180307694 +modified: 20190704155012446 modifier: Mohammad tags: $:/tags/Macro title: $:/plugins/.mr/shiraz/macro/alerts diff --git a/tiddlers/$__plugins_.mr_shiraz_macro_utility.tid b/tiddlers/$__plugins_.mr_shiraz_macro_utility.tid index 098a254..14fa6ad 100644 --- a/tiddlers/$__plugins_.mr_shiraz_macro_utility.tid +++ b/tiddlers/$__plugins_.mr_shiraz_macro_utility.tid @@ -1,6 +1,6 @@ created: 20170629183034888 creator: Mohammad -modified: 20190216180307683 +modified: 20190704155012442 modifier: Mohammad tags: $:/tags/Macro title: $:/plugins/.mr/shiraz/macro/utility diff --git a/tiddlers/$__plugins_.mr_shiraz_macro_wikitext-macros.tid b/tiddlers/$__plugins_.mr_shiraz_macro_wikitext-macros.tid index 5d67a64..59b6801 100644 --- a/tiddlers/$__plugins_.mr_shiraz_macro_wikitext-macros.tid +++ b/tiddlers/$__plugins_.mr_shiraz_macro_wikitext-macros.tid @@ -1,6 +1,6 @@ created: 20150117184156000 creator: Mohammad -modified: 20190216180307676 +modified: 20190704155012436 modifier: Mohammad tags: $:/tags/Macro title: $:/plugins/.mr/shiraz/macro/wikitext-macros diff --git a/tiddlers/$__plugins_.mr_shiraz_pagecontrol_view-fields.tid b/tiddlers/$__plugins_.mr_shiraz_pagecontrol_view-fields.tid index c969095..cb866c4 100644 --- a/tiddlers/$__plugins_.mr_shiraz_pagecontrol_view-fields.tid +++ b/tiddlers/$__plugins_.mr_shiraz_pagecontrol_view-fields.tid @@ -1,7 +1,7 @@ created: 20181010190533135 creator: Mohammad description: Show a toggle button for view fields -modified: 20190216180307667 +modified: 20190704155012431 modifier: Mohammad tags: $:/tags/PageControls kookma title: $:/plugins/.mr/shiraz/pagecontrol/view-fields diff --git a/tiddlers/$__plugins_.mr_shiraz_snippet_alert.tid b/tiddlers/$__plugins_.mr_shiraz_snippet_alert.tid index cf7e917..3525f83 100644 --- a/tiddlers/$__plugins_.mr_shiraz_snippet_alert.tid +++ b/tiddlers/$__plugins_.mr_shiraz_snippet_alert.tid @@ -1,7 +1,7 @@ caption: Alert created: 20180905115529625 creator: Mohammad -modified: 20190216180307662 +modified: 20190704155012425 modifier: Mohammad tags: $:/tags/TextEditor/Snippet title: $:/plugins/.mr/shiraz/snippet/alert diff --git a/tiddlers/$__plugins_.mr_shiraz_stylesheet_alerts-leftbar.css.meta b/tiddlers/$__plugins_.mr_shiraz_stylesheet_alerts-leftbar.css.meta index d60e283..6f84d37 100644 --- a/tiddlers/$__plugins_.mr_shiraz_stylesheet_alerts-leftbar.css.meta +++ b/tiddlers/$__plugins_.mr_shiraz_stylesheet_alerts-leftbar.css.meta @@ -1,7 +1,7 @@ created: 20181208184228896 creator: Mohammad -modified: 20190216180307656 +modified: 20190704155012420 modifier: Mohammad tags: $:/tags/Stylesheet title: $:/plugins/.mr/shiraz/stylesheet/alerts-leftbar -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__plugins_.mr_shiraz_stylesheet_bs_alerts.css.meta b/tiddlers/$__plugins_.mr_shiraz_stylesheet_bs_alerts.css.meta index ec755cd..67e1ac7 100644 --- a/tiddlers/$__plugins_.mr_shiraz_stylesheet_bs_alerts.css.meta +++ b/tiddlers/$__plugins_.mr_shiraz_stylesheet_bs_alerts.css.meta @@ -1,7 +1,7 @@ created: 20180820171551129 creator: Mohammad -modified: 20190216180307651 +modified: 20190704155012415 modifier: Mohammad tags: $:/tags/Stylesheet title: $:/plugins/.mr/shiraz/stylesheet/bs/alerts -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__plugins_.mr_shiraz_stylesheet_tw-adjustment.css.meta b/tiddlers/$__plugins_.mr_shiraz_stylesheet_tw-adjustment.css.meta index 6e9903b..6df0d48 100644 --- a/tiddlers/$__plugins_.mr_shiraz_stylesheet_tw-adjustment.css.meta +++ b/tiddlers/$__plugins_.mr_shiraz_stylesheet_tw-adjustment.css.meta @@ -1,7 +1,7 @@ created: 20170625125742486 creator: Mohammad -modified: 20190216180307646 +modified: 20190704155012411 modifier: Mohammad tags: $:/tags/Stylesheet kookma title: $:/plugins/.mr/shiraz/stylesheet/tw-adjustment -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__plugins_.mr_shiraz_stylesheet_view-fields.css.meta b/tiddlers/$__plugins_.mr_shiraz_stylesheet_view-fields.css.meta index 026148f..37a64a9 100644 --- a/tiddlers/$__plugins_.mr_shiraz_stylesheet_view-fields.css.meta +++ b/tiddlers/$__plugins_.mr_shiraz_stylesheet_view-fields.css.meta @@ -1,7 +1,7 @@ created: 20181112065101520 creator: Mohammad -modified: 20190216180307640 +modified: 20190704155012406 modifier: Mohammad tags: $:/tags/Stylesheet title: $:/plugins/.mr/shiraz/stylesheet/view-fields -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__plugins_.mr_shiraz_stylesheet_wikitext-macro.css.meta b/tiddlers/$__plugins_.mr_shiraz_stylesheet_wikitext-macro.css.meta index 6615ac3..5c21ebc 100644 --- a/tiddlers/$__plugins_.mr_shiraz_stylesheet_wikitext-macro.css.meta +++ b/tiddlers/$__plugins_.mr_shiraz_stylesheet_wikitext-macro.css.meta @@ -1,7 +1,7 @@ created: 20180909042646908 creator: Mohammad -modified: 20190216180307634 +modified: 20190704155012402 modifier: Mohammad tags: $:/tags/Stylesheet kookma title: $:/plugins/.mr/shiraz/stylesheet/wikitext-macro -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__plugins_.mr_shiraz_viewtemplate_view-fields.tid b/tiddlers/$__plugins_.mr_shiraz_viewtemplate_view-fields.tid index cde8d85..9ed98d8 100644 --- a/tiddlers/$__plugins_.mr_shiraz_viewtemplate_view-fields.tid +++ b/tiddlers/$__plugins_.mr_shiraz_viewtemplate_view-fields.tid @@ -2,7 +2,7 @@ created: 20181010162537613 creator: Mohammad description: Toggle field handling in view mode list-after: $:/core/ui/ViewTemplate/tags -modified: 20190216180307625 +modified: 20190704155012396 modifier: Mohammad tags: kookma title: $:/plugins/.mr/shiraz/viewtemplate/view-fields diff --git a/tiddlers/$__plugins_.mr_slider_stylesheet_slide-background-class.css.meta b/tiddlers/$__plugins_.mr_slider_stylesheet_slide-background-class.css.meta index af0d963..47eb837 100644 --- a/tiddlers/$__plugins_.mr_slider_stylesheet_slide-background-class.css.meta +++ b/tiddlers/$__plugins_.mr_slider_stylesheet_slide-background-class.css.meta @@ -1,7 +1,7 @@ created: 20181029071532524 creator: Mohammad -modified: 20190216180307617 +modified: 20190704155012391 modifier: Mohammad tags: $:/tags/Stylesheet title: $:/plugins/.mr/slider/stylesheet/slide-background-class -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__plugins_.mr_solution.tid b/tiddlers/$__plugins_.mr_solution.json similarity index 97% rename from tiddlers/$__plugins_.mr_solution.tid rename to tiddlers/$__plugins_.mr_solution.json index 4d2c9f5..4d570e5 100644 --- a/tiddlers/$__plugins_.mr_solution.tid +++ b/tiddlers/$__plugins_.mr_solution.json @@ -1,18 +1,3 @@ -author: Mohammad Rahmani -core-version: 5.1.17 -created: 20181115112823991 -creator: Mohammad -description: Solution -list: readme license release -modified: 20190216180307610 -modifier: Mohammad -name: Solution -plugin-type: plugin -source: https://github.com/kookma/Solution -title: $:/plugins/.mr/solution -type: application/json -version: 1.0.4 - { "tiddlers": { "$:/plugins/.mr/solution/image/question-circle.svg": { diff --git a/tiddlers/$__plugins_.mr_solution.json.meta b/tiddlers/$__plugins_.mr_solution.json.meta new file mode 100644 index 0000000..6621be8 --- /dev/null +++ b/tiddlers/$__plugins_.mr_solution.json.meta @@ -0,0 +1,14 @@ +author: Mohammad Rahmani +core-version: 5.1.17 +created: 20181115112823991 +creator: Mohammad +description: Solution +list: readme license release +modified: 20190704155012387 +modifier: Mohammad +name: Solution +plugin-type: plugin +source: https://github.com/kookma/Solution +title: $:/plugins/.mr/solution +type: application/json +version: 1.0.4 \ No newline at end of file diff --git a/tiddlers/$__plugins_.mr_utility_stylesheet_mbox-colors.css.meta b/tiddlers/$__plugins_.mr_utility_stylesheet_mbox-colors.css.meta index 7a71ac7..69757d7 100644 --- a/tiddlers/$__plugins_.mr_utility_stylesheet_mbox-colors.css.meta +++ b/tiddlers/$__plugins_.mr_utility_stylesheet_mbox-colors.css.meta @@ -1,7 +1,7 @@ created: 20181001193352558 creator: Mohammad -modified: 20190216180307601 +modified: 20190704155012382 modifier: Mohammad tags: $:/tags/Stylesheet title: $:/plugins/.mr/utility/stylesheet/mbox-colors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/$__plugins_TWaddle_LeftBar.tid b/tiddlers/$__plugins_TWaddle_LeftBar.json similarity index 96% rename from tiddlers/$__plugins_TWaddle_LeftBar.tid rename to tiddlers/$__plugins_TWaddle_LeftBar.json index 760bcc3..07809b7 100644 --- a/tiddlers/$__plugins_TWaddle_LeftBar.tid +++ b/tiddlers/$__plugins_TWaddle_LeftBar.json @@ -1,16 +1,3 @@ -author: Mat von TWaddle -core-version: >=5.1.16 -created: 20180905142253202 -creator: Mat von TWaddle -description: LeftBar - a menu type sidebar, on the left -list: contents readme -modified: 20190216180307483 -modifier: Mat von TWaddle -plugin-type: plugin -title: $:/plugins/TWaddle/LeftBar -type: application/json -version: 2.1.4 - { "tiddlers": { "$:/plugins/TWaddle/LeftBar/Toggle": { diff --git a/tiddlers/$__plugins_TWaddle_LeftBar.json.meta b/tiddlers/$__plugins_TWaddle_LeftBar.json.meta new file mode 100644 index 0000000..f7934e0 --- /dev/null +++ b/tiddlers/$__plugins_TWaddle_LeftBar.json.meta @@ -0,0 +1,12 @@ +author: Mat von TWaddle +core-version: >=5.1.16 +created: 20180905142253202 +creator: Mat von TWaddle +description: LeftBar - a menu type sidebar, on the left +list: contents readme +modified: 20190704155012263 +modifier: Mat von TWaddle +plugin-type: plugin +title: $:/plugins/TWaddle/LeftBar +type: application/json +version: 2.1.4 \ No newline at end of file diff --git a/tiddlers/$__plugins_TWaddle_LeftBar_Menu.tid b/tiddlers/$__plugins_TWaddle_LeftBar_Menu.tid index d1c7b37..ea52750 100644 --- a/tiddlers/$__plugins_TWaddle_LeftBar_Menu.tid +++ b/tiddlers/$__plugins_TWaddle_LeftBar_Menu.tid @@ -1,6 +1,6 @@ created: 20180616073109854 creator: Mohammad -modified: 20190216180307477 +modified: 20190704155012257 modifier: Mohammad tags: title: $:/plugins/TWaddle/LeftBar/Menu diff --git a/tiddlers/$__plugins_TWaddle_LeftBar_Stylesheet.tid b/tiddlers/$__plugins_TWaddle_LeftBar_Stylesheet.tid index 0643dc6..e375823 100644 --- a/tiddlers/$__plugins_TWaddle_LeftBar_Stylesheet.tid +++ b/tiddlers/$__plugins_TWaddle_LeftBar_Stylesheet.tid @@ -2,7 +2,7 @@ created: 20170430122213416 creator: Mat von TWaddle display: block hover-to-display-as: none -modified: 20190216180307472 +modified: 20190704155012253 modifier: Mat von TWaddle position: fixed tags: $:/tags/Stylesheet diff --git a/tiddlers/$__plugins_ajh_favorites.tid b/tiddlers/$__plugins_ajh_favorites.json similarity index 91% rename from tiddlers/$__plugins_ajh_favorites.tid rename to tiddlers/$__plugins_ajh_favorites.json index b373ef9..326dd37 100644 --- a/tiddlers/$__plugins_ajh_favorites.tid +++ b/tiddlers/$__plugins_ajh_favorites.json @@ -1,17 +1,3 @@ -core-version: >=5.1.14 -created: 20150902052640307 -creator: Andrew Harrison -dependents: $:/language/Buttons/Choose/Caption $:/language/Buttons/Choose/Hint $:/language/Buttons/Favorites/Caption $:/language/Buttons/Favorites/Hint $:/language/SideBar/Favorites/Caption $:/plugins/ajh/favorites/icon $:/plugins/ajh/favorites/readme $:/plugins/ajh/favorites/SideBar $:/plugins/ajh/favorites/image $:/plugins/ajh/favorites/stylesheet $:/plugins/ajh/favorites/template -description: Favorites -list: readme -modified: 20190216180307595 -modifier: Andrew Harrison -plugin-type: plugin -source: http://favorites.tiddlyspot.com -title: $:/plugins/ajh/favorites -type: application/json -version: 3.0.11 - { "tiddlers": { "$:/language/Buttons/Choose/Caption": { diff --git a/tiddlers/$__plugins_ajh_favorites.json.meta b/tiddlers/$__plugins_ajh_favorites.json.meta new file mode 100644 index 0000000..5f6c84e --- /dev/null +++ b/tiddlers/$__plugins_ajh_favorites.json.meta @@ -0,0 +1,13 @@ +core-version: >=5.1.14 +created: 20150902052640307 +creator: Andrew Harrison +dependents: $:/language/Buttons/Choose/Caption $:/language/Buttons/Choose/Hint $:/language/Buttons/Favorites/Caption $:/language/Buttons/Favorites/Hint $:/language/SideBar/Favorites/Caption $:/plugins/ajh/favorites/icon $:/plugins/ajh/favorites/readme $:/plugins/ajh/favorites/SideBar $:/plugins/ajh/favorites/image $:/plugins/ajh/favorites/stylesheet $:/plugins/ajh/favorites/template +description: Favorites +list: readme +modified: 20190704155012378 +modifier: Andrew Harrison +plugin-type: plugin +source: http://favorites.tiddlyspot.com +title: $:/plugins/ajh/favorites +type: application/json +version: 3.0.11 \ No newline at end of file diff --git a/tiddlers/$__plugins_ajh_favorites_list.tid b/tiddlers/$__plugins_ajh_favorites_list.tid index 26b9ca2..1eb04ce 100644 --- a/tiddlers/$__plugins_ajh_favorites_list.tid +++ b/tiddlers/$__plugins_ajh_favorites_list.tid @@ -1,9 +1,8 @@ created: 20190117104703657 creator: Mohammad -list: [[Worth Reading]] Sandbox $:/.mr/macro/utility [[Tips: Advanced Search with Search Operator]] [[Variables vs. Parameters]] [[Variable Textual Substitution]] [[Shorthand Syntax Summary]] myTemplate/help/xxx [[Jeremy Solution ii]] -modified: 20190316114911720 +list: $:/Commander [[Worth Reading]] Sandbox $:/.mr/macro/utility [[Tips: Advanced Search with Search Operator]] [[Variables vs. Parameters]] [[Variable Textual Substitution]] [[Shorthand Syntax Summary]] myTemplate/help/xxx viewtemplate/tagging svg-image +modified: 20190704155012372 modifier: Mohammad tags: title: $:/plugins/ajh/favorites/list -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/$__plugins_danielo_encryptTiddler.tid b/tiddlers/$__plugins_danielo_encryptTiddler.json similarity index 97% rename from tiddlers/$__plugins_danielo_encryptTiddler.tid rename to tiddlers/$__plugins_danielo_encryptTiddler.json index d1a3dfe..d0b916b 100644 --- a/tiddlers/$__plugins_danielo_encryptTiddler.tid +++ b/tiddlers/$__plugins_danielo_encryptTiddler.json @@ -1,16 +1,3 @@ -author: DanieloRodrigez -core-version: >=5.1.1 -created: 20190216180307581 -dependents: -description: adds the ability to encrypt single tiddlers -list: Encrypt-Tiddler Changelog -modified: 20190216180307581 -plugin-type: plugin -source: https://github.com/danielo515/TIddlywiki5-EncryptTiddlerPlugin -title: $:/plugins/danielo/encryptTiddler -type: application/json -version: 2.1 - { "tiddlers": { "$:/plugins/danielo/encryptTiddler/Changelog": { diff --git a/tiddlers/$__plugins_danielo_encryptTiddler.json.meta b/tiddlers/$__plugins_danielo_encryptTiddler.json.meta new file mode 100644 index 0000000..7260c3d --- /dev/null +++ b/tiddlers/$__plugins_danielo_encryptTiddler.json.meta @@ -0,0 +1,12 @@ +author: DanieloRodrigez +core-version: >=5.1.1 +created: 20190704155012368 +dependents: +description: adds the ability to encrypt single tiddlers +list: Encrypt-Tiddler Changelog +modified: 20190704155012368 +plugin-type: plugin +source: https://github.com/danielo515/TIddlywiki5-EncryptTiddlerPlugin +title: $:/plugins/danielo/encryptTiddler +type: application/json +version: 2.1 \ No newline at end of file diff --git a/tiddlers/$__plugins_kookma_commander.json b/tiddlers/$__plugins_kookma_commander.json new file mode 100644 index 0000000..b57609e --- /dev/null +++ b/tiddlers/$__plugins_kookma_commander.json @@ -0,0 +1 @@ +{"tiddlers":{"$:/plugins/kookma/commander/stylesheet/tabs":{"title":"$:/plugins/kookma/commander/stylesheet/tabs","created":"20190212114811859","creator":"Mohammad","modified":"20190405075952135","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":"/* .cmd-tab-colorful .tc-tab-buttons button {color:blue;} */\n.cmd-tab-colorful .tc-tab-buttons button.tc-tab-selected {\n background: none;\n/*\n border: none;\n border-bottom: solid 1px #737373 !important; \n*/\n font-weight: bold;\n color: #DB4C3F !important;\n}\n\n/* disabled to work on small screen\n.cmd-tab-wd .tc-tab-buttons button{\n width:140px;\n*/\n}"},"$:/plugins/kookma/commander/stylesheet/snr/form":{"title":"$:/plugins/kookma/commander/stylesheet/snr/form","created":"20190306191714819","creator":"Mohammad","modified":"20190405070935468","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":".cmd-snr-form{\n width:100%;\n}\n\n.cmd-snr-textbox {\n width:100%;\n box-sizing: border-box;\n max-width:40ch;\n }\n\n.cmd-snr-form select, .cmd-snr-form input{\n margin: 0.2rem;\n}\n.cmd-snr-form legend{\n background: #f5f5f5;\n padding: 3px 6px;\n}\n\n.cmd-snr-form { padding:20px; }\n.cmd-snr-form .item { padding: 2px; margin:2px; }\n.cmd-snr-form .item label { display:inline-block; width:100px; margin-left:5px; }\n.cmd-snr-form .item input { display:inline-block; }\n.cmd-snr-form .item select { display:inline-block; }\n\n\n\n "},"$:/plugins/kookma/commander/stylesheet/snr/flexbox":{"title":"$:/plugins/kookma/commander/stylesheet/snr/flexbox","created":"20190306203517655","creator":"Mohammad","modified":"20190331061107514","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":".cmd-snr-row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n width: 100%;\n}\n.cmd-snr-column {\n display: flex;\n flex-direction: column;\n flex-basis: 100%;\n flex: 1\n}\n\n.cmd-snr-double-column {\n display: flex;\n flex-direction: column;\n flex-basis: 100%;\n flex: 2\n}\n\n@media screen and (min-width: 800px) {\n .cmd-snr-column {\n flex: 1\n }\n\n .cmd-snr-double-column {\n flex: 2\n }\n}"},"$:/plugins/kookma/commander/stylesheet/compInspect/table":{"title":"$:/plugins/kookma/commander/stylesheet/compInspect/table","created":"20190308134702363","creator":"Mohammad","modified":"20190331061107524","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":"/*compInspect table*/\n.cmd-ci-table\n{border-collapse: collapse;}\n\n.cmd-ci-table .leftcol{\nwidth:20%;\nvertical-align: top;\ntext-align: right;\nbackground-color:#f0f0f0;\n}\n.cmd-ci-table .rightcol{\nwidth:650px;\n}\n"},"$:/plugins/kookma/commander/stylesheet/buttons":{"title":"$:/plugins/kookma/commander/stylesheet/buttons","created":"20190317080436103","creator":"Mohammad","modified":"20190331061107848","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":".cmd-btn{\n font-size:0.85em;\n font-size:300;\n color: #666666;\n background-color: #d8d8d8;\n padding: 3px 8px 3px 8px;\n border: 1px solid #a1a1a1;\n}\n"},"$:/plugins/kookma/commander/stylesheet/select-width":{"title":"$:/plugins/kookma/commander/stylesheet/select-width","created":"20190218214027079","creator":"Mohammad","modified":"20190331061108072","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":".cmd-sl{\n width:8ch;\n}\n\n.cmd-select-wd{\n min-width:15ch;\n}\n"},"$:/plugins/kookma/commander/snr/usage":{"title":"$:/plugins/kookma/commander/snr/usage","created":"20190307104654008","creator":"Mohammad","modified":"20190331061107533","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"!! Setup UI\n<<<\nSimply put the below command inside an empty tiddler\n\n```\n<>\n```\n<<<\n\n!! How to use?\n<<<\n* Enter a search filter in ''Filter search'' box like `[tag[myTag]]`\n* From ''Filter title'' drop down menu select a tiddler\n* From ''Field name'' drop down menu select a tiddler field like `text`\n* In the ''Search text'' type the search term for example `this`\n* In the ''Replace with'' type the term you want to replace with like `that`\n*Check the ''Differences'' and if you are satisfied with the result, press the `Replace?` button\n<<<\n\n!! Special characters\n<<<\nAs `SNR` uses ''regexp'' pattern to make search and replace, when special characters are used in the ''Search text'' box, they shall be escaped among them are `*`, `+`, `[`, ...\nTo use these characters do like below\n\n```\n\\[ \\* \\+\n```\n<<<\n\n!! Warning\n<<<\n* SNR replace the contents of tiddlers. //The action can not be undone//. So always make a backup before performing any replace action\n* It is not possible to selectively replace some occurrences and ignore some others in one run! That means you cannot skip some occurrences. \n<<<"},"$:/plugins/kookma/commander/setting/delete-all-temp-tiddlers":{"title":"$:/plugins/kookma/commander/setting/delete-all-temp-tiddlers","caption":"Temporary tiddlers","created":"20190301184304348","creator":"Mohammad","modified":"20190331061107543","modifier":"Mohammad","tags":"$:/tags/Commander/Setting","type":"text/vnd.tiddlywiki","text":"\\define delete-all-temps()\n<$action-deletetiddler $filter=\"[search:title[$:/temp/commander/]]\" />\n\\end\n\n<$set name=numTids value={{{ [search:title[$:/temp/commander/]count[]] }}}>\n<$reveal type=\"match\" text=\"0\" default=<> >\nNo temporary tiddlers is existed to delete!\n\n<$reveal type=\"gt\" text=\"0\" default=<> >\nNumber of temporary tiddlers (including log tiddlers): <>
    \n\n\n\n<$macrocall $name=\"compConfirmDelete\"\nbtnLabel=\"Delete temp tiddlers\" \nconfirmMessage=\"Are you sure you wish to delete\"\nstateTiddler=\"$:/state/commander/setting/delete-temps\"\ncountFilter=\"[search:title[$:/temp/commander/]]\"\nactionMacro=\"delete-all-temps\"/>"},"$:/plugins/kookma/commander/setting/snr":{"title":"$:/plugins/kookma/commander/setting/snr","caption":"Snr setting","created":"20190324051157188","creator":"Mohammad","modified":"20190331061108158","modifier":"Mohammad","tags":"$:/tags/Commander/Setting","type":"text/vnd.tiddlywiki","text":"<>\n
    \n\nThe cleanup attribute determines which optional post-processing should be applied to the diffs:\n\n* none: no cleanup is performed\n* semantic (default): rewrites the diffs for human readability\n* efficient: rewrites the diffs to minimise the number of operations for subsequent processing\n
    "},"$:/plugins/kookma/commander/macro/title-operation/suffix":{"title":"$:/plugins/kookma/commander/macro/title-operation/suffix","created":"20190212143639636","creator":"Mohammad","modified":"20190331061107553","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define log-changeSuffix(message, oldTitle, newTitle)\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"$message$. New title [[$newTitle$]]\"\"\" tidItem=<<__oldTitle__>> />\n\\end\n\n\\define addSuffix-to-tiltle-bulk(suffix:\"Empty\")\n<$list filter=\"[<__suffix__>] -Empty\" variable=null>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]]\">\n<$list filter=\"\"\"[addsuffix[$suffix$]] -[]\"\"\" variable=\"newTitle\">\n<$list filter=\"[] -[has[title]]\" variable=\"ignore\">\n <$action-setfield $tiddler=<> title=<> />\n <$action-deletetiddler $tiddler=<> />\n <$macrocall $name=log-changeSuffix message=\"title suffix: `$suffix$` added\" oldTitle=<> newTitle=<> />\n\n\n<$macrocall $name=\"compSelective-reset\" tiddler=\"$:/temp/commander/selected-titles\" filter=\"[subfilter{$:/temp/commander}] +[!is[missing]]\" />\n\n\n\n\\end\n\n\\define removeSuffix-from-tiltle-bulk(suffix:\"Empty\")\n<$list filter=\"[<__suffix__>] -Empty\" variable=null>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]]\">\n<$list filter=\"\"\"[removesuffix[$suffix$]] -[]\"\"\" variable=\"newTitle\">\n<$list filter=\"[] -[has[title]]\" variable=\"ignore\">\n <$action-setfield $tiddler=<> title=<> />\n <$action-deletetiddler $tiddler=<> />\n <$macrocall $name=log-changeSuffix message=\"title suffix: `$suffix$` removed\" oldTitle=<> newTitle=<> />\n\n\n<$macrocall $name=\"compSelective-reset\" tiddler=\"$:/temp/commander/selected-titles\" filter=\"[subfilter{$:/temp/commander}] +[!is[missing]]\" />\n\n\n\n\\end\n"},"$:/plugins/kookma/commander/macro/title-operation/remove-cahrs-start":{"title":"$:/plugins/kookma/commander/macro/title-operation/remove-cahrs-start","created":"20190218214608685","creator":"Mohammad","modified":"20190331061107563","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define suffix-actions()\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[suffix]\" variable=\"item\">\n <$action-setfield $tiddler=<> title=<> />\n <$action-deletetiddler $tiddler=<> />\n <$macrocall $name=\"log-add-single-operation\" msg=\"\"\"characters removed from start. New title [[$(sfx)$]]\"\"\" tidItem=<> />\n\n\\end\n\n\n\\define makelink() [[$(newTitle)$]]\n\n\\define generate-suffixes(n:\"0\")\n<$list filter=\"[<__n__>] -0\" variable=null>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[has[title]]\" variable=\"item\">\n<$list filter=\"\"\"[split[]rest[$n$]join[]trim[]]\"\"\" variable=\"newTitle\">\n<$text text=<>/>\n\n\n\n\\end\n\n\\define remove-chars-from-begining-tiltle-bulk(num:\"0\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__num__>] -0\" variable=null>\n<>\n<$vars n=<<__num__>> >\n<$wikify text=\"\"\"<>\"\"\" name=\"outputs\">\n <$list filter=\"[subfilter]\" variable=\"sfx\">\n <$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[suffixlimit[2]count[]regexp[2]]\" \n emptyMessage=<> variable=\"cnt\">\n \n \n\n\n<>\n\n\n\\end\n"},"$:/plugins/kookma/commander/macro/title-operation/remove-cahrs-end":{"title":"$:/plugins/kookma/commander/macro/title-operation/remove-cahrs-end","created":"20190218190318901","creator":"Mohammad","modified":"20190331061107572","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define suffix-actions2()\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[prefix]\" variable=\"item\">\n <$action-setfield $tiddler=<> title=<> />\n <$action-deletetiddler $tiddler=<> />\n <$macrocall $name=\"log-add-single-operation\" msg=\"\"\"characters removed from end. New title [[$(sfx)$]]\"\"\" tidItem=<> />\n\n\\end\n\n\n\\define makelink2() [[$(newTitle)$]]\n\n\\define generate-suffixes2(n:\"0\")\n<$list filter=\"[<__n__>] -0\" variable=null>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]]\" variable=\"item\">\n<$list filter=\"\"\"[split[]butlast[$n$]join[]trim[]]\"\"\" variable=\"newTitle\">\n<$text text=<>/>\n\n\n\n\\end\n\n\\define remove-chars-from-end-tiltle-bulk(num:\"0\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__num__>] -0\" variable=null>\n<>\n<$vars n=<<__num__>> >\n<$wikify text=\"\"\"<>\"\"\" name=\"outputs\">\n <$list filter=\"[subfilter]\" variable=\"sfx\">\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[prefixlimit[2]count[]regexp[2]]\" emptyMessage=<> variable=\"cnt\">\n\n\n\n\n<>\n\n\n\\end\n"},"$:/plugins/kookma/commander/macro/title-operation/prefix":{"title":"$:/plugins/kookma/commander/macro/title-operation/prefix","created":"20190212122742891","creator":"Mohammad","modified":"20190331061107583","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define log-changePrefix(message, oldTitle, newTitle)\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"$message$. New title [[$newTitle$]]\"\"\" tidItem=<<__oldTitle__>> />\n\\end\n\n\\define addPrefix-to-tiltle-bulk(prefix:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__prefix__>] -Empty\" variable=null>\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]]\">\n<$list filter=\"\"\"[addprefix[$prefix$]] -[]\"\"\" variable=\"newTitle\">\n<$list filter=\"[] -[has[title]]\" variable=\"ignore\">\n <$action-setfield $tiddler=<> title=<> />\n <$action-deletetiddler $tiddler=<> />\n <$macrocall $name=log-changePrefix message=\"title prefix: `$prefix$` added\" oldTitle=<> newTitle=<> />\n\n\n<>\n\n\n\n\\end\n\n\\define removePrefix-from-tiltle-bulk(prefix:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__prefix__>] -Empty\" variable=null>\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]]\">\n<$list filter=\"\"\"[removeprefix[$prefix$]] -[]\"\"\" variable=\"newTitle\">\n<$list filter=\"[] -[has[title]]\" variable=\"ignore\">\n <$action-setfield $tiddler=<> title=<> />\n <$action-deletetiddler $tiddler=<> />\n <$macrocall $name=log-changePrefix message=\"title prefix: `$prefix$` removed\" oldTitle=<> newTitle=<> />\n \n\n<>\n\n\n\n\\end\n"},"$:/plugins/kookma/commander/macro/tiddler-operation/delete":{"title":"$:/plugins/kookma/commander/macro/tiddler-operation/delete","created":"20190215195221625","creator":"Mohammad","modified":"20190331061107592","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define log-delete-selectively(item, msg:\"Tiddler deleted\")\n<$action-setfield $tiddler={{$:/state/commander/log-tiddler}} $index=<<__item__>> $value=\"$msg$\" />\n\\end\n\n\\define delete-tiddlers-selective-bulk()\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]]\" variable=\"Item\">\n<$action-deletetiddler $tiddler=<> />\n<$macrocall $name=\"log-delete-selectively\" item=<> />\n\n<>\n\n\\end"},"$:/plugins/kookma/commander/macro/tiddler-operation/create":{"title":"$:/plugins/kookma/commander/macro/tiddler-operation/create","created":"20190212125920722","creator":"Mohammad","modified":"20190331061107603","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define log-create(msg:\"Tiddler existed, operation ignored\")\n<$action-setfield $tiddler={{$:/state/commander/log-tiddler}} $index=\"$(newTitle)$\" $value=\"$msg$\" />\n\\end\n\n\\define bulk-tiddler-creator(baseTitle, baseTags, numberTiddler)\n<>\n<$list filter=\"[range[9]addprefix[00]] [range[10,99]addprefix[0]] [range[100,500]] +[limit<__numberTiddler__>]\" variable=\"L1\">\n<$list filter=\"[<__baseTitle__>addsuffix]\" variable=\"newTitle\">\n<$list filter=\"[] -[has[title]]\" variable=\"ignore\" emptyMessage=<> >\n<$action-createtiddler $basetitle=<> tags=<<__baseTags__>> /> \n<>\n\n\n\n\\end\n\n\\define oneTid-with-template(myTitle, myTags, myTemplate)\n<$tiddler tiddler=<<__myTitle__>> >\n <$action-setfield \n $tiddler=<<__myTemplate__>> \n title=<> /> \n <$fieldmangler>\n <$list filter=\"[enlist<__myTags__>]\" variable=newTag>\n <$action-sendmessage $message=\"tm-add-tag\" $param=<> />\n \n <$action-sendmessage $message=\"tm-remove-tag\" $param=\"$:/tags/Commander/Template\" />\n\n\n\\end\n\n\n\\define bulk-tiddler-with-template-creator(baseTitle, baseTags, numberTiddler, template)\n<>\n<$list filter=\"[range[9]addprefix[00]] [range[10,99]addprefix[0]] [range[100,500]] +[limit<__numberTiddler__>]\" variable=\"L1\">\n<$list filter=\"[<__baseTitle__>addsuffix]\" variable=\"newTitle\">\n<$list filter=\"[] -[has[title]]\" variable=\"ignore\" emptyMessage=<>>\n<$macrocall $name=\"oneTid-with-template\" \n myTitle=<> \n myTags=<<__baseTags__>> \n myTemplate=<<__template__>>\n />\n <>\n\n\n\n\\end\n\n"},"$:/plugins/kookma/commander/macro/tag-operation":{"title":"$:/plugins/kookma/commander/macro/tag-operation","created":"20190212063435548","creator":"Mohammad","modified":"20190331061107613","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define add-new-tag-bulk(newTag:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__newTag__>] -Empty\" variable=null>\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]] -[<__newTag__>tagging[]]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__newTag__>> />\n\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"new tag `$newTag$` added\"\"\" tidItem=<> />\n\n<>\n\n\n\\end\n\n\\define remove-old-tag-bulk(oldTag:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=ignore>\n<$list filter=\"[<__oldTag__>] -Empty\" variable=null>\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]] +[tag<__oldTag__>]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-remove-tag\" $param=<<__oldTag__>> />\n\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"old tag `$oldTag$` removed\"\"\" tidItem=<> />\n\n<>\n\n\n\\end\n\n\n\\define replace-tag-bulk(oldTag:\"Empty\", newTag:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__oldTag__>] -Empty\" variable=null>\n<$list filter=\"[<__newTag__>] -Empty\" variable=null>\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]] +[<__oldTag__>tagging[]]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__newTag__>> />\n<$action-sendmessage $message=\"tm-remove-tag\" $param=<<__oldTag__>> />\n\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"tag `$oldTag$` replaced with `$newTag$`\"\"\" tidItem=<> />\n\n<>\n\n\n\n\\end\n\n"},"$:/plugins/kookma/commander/macro/snr/ui/regexp-flags":{"title":"$:/plugins/kookma/commander/macro/snr/ui/regexp-flags","created":"20190306182052441","creator":"Mohammad","modified":"20190331061107622","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define snr-regexp-flags()\n\n
    \n
    \nSearch flags\n\n<$checkbox \n tiddler=\"$:/state/commander/snr/case-sensitive\" \n field=\"text\" \n checked=\"i\" \n unchecked=\"\"\n/>  ignore case
    \n\n<$checkbox \n tiddler=\"$:/state/commander/snr/whole-words\" \n field=\"text\" \n checked=\"words\" \n unchecked=\"characters\"\n/>  whole words
    \n\n
    \n\n<$radio\n tiddler=\"$:/state/commander/snr/gm\" \n field=\"text\" \n value=\"g\">  global match\n
    \n\n<$radio\n tiddler=\"$:/state/commander/snr/gm\" \n field=\"text\" \n value=\"m\">  multiline mode\n
    \n\n<$radio\n tiddler=\"$:/state/commander/snr/gm\" \n field=\"text\" \n value=\"\">  first match \n\n\n
    \n
    \n\\end"},"$:/plugins/kookma/commander/macro/snr/ui/inputs":{"title":"$:/plugins/kookma/commander/macro/snr/ui/inputs","created":"20190306203626597","creator":"Mohammad","modified":"20190401125648621","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define snr-ui-inputs()\n
    \n
    \n Search and Replace\n\n
    \n\n<$select tiddler=\"$:/state/commander/snr/select-tiddler\" default=\"\" class=\"cmd-snr-textbox\">\n\n\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]sort[]]\" >\n\n\n\n
    \n\n
    \n\n<$select tiddler=\"$:/state/commander/snr/select-tiddler/field\" default=\"text\">\n<$list filter=\"[{$:/state/commander/snr/select-tiddler}fields[]]\">\n\n\n\n
    \n\n
    \n\n<$edit-text \n tiddler=\"$:/state/commander/snr/replace-text\" \n tag=\"input\" \n default=\"\" \n placeholder=\" text to replace\"\n class=\"cmd-snr-textbox\"/>\n
    \n
    \n\n<$edit-text \n tiddler=\"$:/state/commander/snr/replace-text-with\" \n tag=\"input\" \n default=\"\" \n placeholder=\" new text\"\n class=\"cmd-snr-textbox\"/>\n
    \n
    \n
    \n\\end"},"$:/plugins/kookma/commander/macro/snr/ui/setting":{"title":"$:/plugins/kookma/commander/macro/snr/ui/setting","created":"20190324052145002","creator":"Mohammad","modified":"20190331061108122","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define snr-difftext-cleanup()\n\n
    \n
    \nDifftext cleanup\n\n<$radio\n tiddler=\"$:/state/commander/snr/setting/cleanup\" \n field=\"text\" \n value=\"none\">  none\n
    \n\n<$radio\n tiddler=\"$:/state/commander/snr/setting/cleanup\" \n field=\"text\" \n value=\"semantic\">  semantic\n
    \n\n<$radio\n tiddler=\"$:/state/commander/snr/setting/cleanup\" \n field=\"text\" \n value=\"efficient\">  efficient \n\n\n
    \n
    \n\\end"},"$:/plugins/kookma/commander/macro/snr/replace-text":{"title":"$:/plugins/kookma/commander/macro/snr/replace-text","created":"20190227134610136","creator":"Mohammad","modified":"20190405083025245","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define nothing-to-replace(tiddler, field) \n<$diff-text source={{{ [<__tiddler__>get<__field__>] }}} dest={{{ [<__tiddler__>get<__field__>] }}} />\n\\end\n\n\\define replace-text(tiddler:\"\",field:\"text\",replace:\"\",replaceWith:\"\",flags:\"\", wholeWords:\"\")\n\\whitespace trim\n<$wikify name=\"source\" text=\"\"\"<$view tiddler=<<__tiddler__>> field=<<__field__>> mode=\"block\" format=\"text\"/>\"\"\">\n<$wikify name=\"result\" \n text=\"\"\"<$macrocall $name=\"regexpsub\" $type=\"text/plain\" \n sourceText=<> \n searchValue=<<__replace__>> \n replaceValue=<<__replaceWith__>> \n flags=<<__flags__>> \n wholeWords=<<__wholeWords__>> />\"\"\" \n >\n<$text text=<>/>\n\n\n\\end\n\n\\define replace-text-diff(tiddler:\"\", field:\"text\", replace, replaceWith, flags:\"\", wholeWords:\"\")\n<$list filter=\"[<__tiddler__>get<__field__>minlength[1]]\" variable=null emptyMessage=\"No tiddler is selected, or tiddler is empty.\">\n<$list filter=\"[<__replace__>minlength[1]]\" variable=null emptyMessage=<> >\n\n<$wikify name=\"result\" \n text=\"\"\"<$macrocall $name=\"replace-text\" \n tiddler=<<__tiddler__>> field=<<__field__>> \n replace=<<__replace__>> \n replaceWith=<<__replaceWith__>> \n flags=<<__flags__>>\n wholeWords=<<__wholeWords__>> />\"\"\"\n >\n<$diff-text source={{{ [<__tiddler__>get<__field__>] }}} dest=<> cleanup={{$:/state/commander/snr/setting/cleanup}}/>\n\n\n\n\n\\end\n\n\\define replace-text-button(tiddler:\"\", field:\"text\", replace:\"\", replaceWith:\"\", flags:\"\", wholeWords:\"\")\n\\whitespace trim\n<$list filter=\"[<__tiddler__>get<__field__>minlength[1]]\" variable=null>\n<$list filter=\"[<__replace__>minlength[1]]\" variable=null>\n<$wikify name=\"result\" \n text=\"\"\"<$macrocall $name=\"replace-text\" \n tiddler=<<__tiddler__>> \n field=<<__field__>> \n replace=<<__replace__>> \n replaceWith=<<__replaceWith__>> \n flags=<<__flags__>>\n wholeWords=<<__wholeWords__>> />\"\"\"\n >\n<$reveal type=\"nomatch\" default=\"title\" text=<<__field__>> >\n <$action-setfield $tiddler=<<__tiddler__>> $field=<<__field__>> $value=<>/>\n\n<$reveal type=\"match\" default=\"title\" text=<<__field__>> >\n <$action-setfield $tiddler=<<__tiddler__>> $field=<<__field__>> $value=<>/>\n <$action-deletetiddler $tiddler=<<__tiddler__>> />\n\n\n\n\n\\end\n"},"$:/plugins/kookma/commander/macro/snr/ui":{"title":"$:/plugins/kookma/commander/macro/snr/ui","created":"20190306133310512","creator":"Mohammad","modified":"20190331061108171","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define snr-ui()\n\n
    \n
    \n<>\n
    \n
    \n<> \n
    \n
    \n<>\n<>\n\\end\n"},"$:/plugins/kookma/commander/macro/snr/regexpsub.js":{"title":"$:/plugins/kookma/commander/macro/snr/regexpsub.js","text":"/*\\\ncreated: 20190214160253135\ncreator: Mohammad\ntype: application/javascript\ntitle: $:/plugins/kookma/commander/macro/snr/regexpsub.js\ntags: snr\nmodifier: Mohammad\nmodified: 20190331061108203\nmodule-type: macro\ndescription: Developed by Mark S\n\nMake regular expression substitutions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"regexpsub\";\n\nexports.params = [\n\t{name: \"searchValue\"},\n\t{name: \"replaceValue\"},\n\t{name: \"sourceText\"},\n\t{name: \"flags\"},\n {name: \"wholeWords\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(searchValue, replaceValue, sourceText, flags = \"gi\", wholeWords = \"characters\") {\n \n try {\n \n\tvar searchText;\n if(wholeWords.toLowerCase() === 'words'){\n searchText = \"\\\\b\" + searchValue + \"\\\\b\";\n } else{\n searchText = searchValue;\n }\n searchText = new RegExp(searchText, flags);\n\n\t\n\treturn sourceText.replace(searchText,replaceValue);\n\n } \n catch(err) { \n return \"ERROR IN REG EXPRESSION. YOU MAY NEED TO ESCAPE VALUES\"; \n }\n \n };\n\n})();\n","created":"20190214160253135","creator":"Mohammad","type":"application/javascript","tags":"snr","modifier":"Mohammad","modified":"20190331061108203","module-type":"macro","description":"Developed by Mark S"},"$:/plugins/kookma/commander/macro/slider":{"title":"$:/plugins/kookma/commander/macro/slider","created":"20190212061854110","modified":"20190331061107642","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define slider-ii(title)\n<$set name=\"revealState\" value=<>>\n

    \n <$reveal type=\"nomatch\" state=<> text=\"yes\">\n <$button class=\"tc-btn-invisible tc-tiddlylink\" set=<> setTo=\"yes\">\n {{$:/core/images/right-arrow}}\n \n \n <$reveal type=\"match\" state=<> text=\"yes\">\n <$button class=\"tc-btn-invisible tc-tiddlylink\" set=<> setTo=\"no\">\n {{$:/core/images/down-arrow}}\n \n \n <$view tiddler=\"$title$\" field=\"caption\">\n <$view tiddler=\"$title$\" field=\"title\">\n \n \n

    \n\n<$reveal type=\"match\" state=<> text=\"yes\">\n<$transclude tiddler=\"$title$\" mode=\"block\" />\n\n\n\\end"},"$:/plugins/kookma/commander/macro/selection":{"title":"$:/plugins/kookma/commander/macro/selection","created":"20190303055230230","creator":"Mohammad","modified":"20190331061107365","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define title-selection-reset()\n<$macrocall $name=\"compSelective-reset\" \ntiddler=\"$:/temp/commander/selected-titles\" \nfilter=\"[subfilter{$:/temp/commander}] +[!is[missing]]\" />\n\\end"},"$:/plugins/kookma/commander/macro/logging":{"title":"$:/plugins/kookma/commander/macro/logging","created":"20190221163406469","creator":"Mohammad","modified":"20190331061107375","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define set-title() $:/temp/commander/logs/tid-{{{[tag[$:/tags/Commander/LogOps]count[]add[1]]}}}\n\n\\define create-log-tiddler(msg)\n<$wikify name=\"myTitle\" text=\"\"\"<>\"\"\">\n<$wikify name=\"myCaption\" text=\"\"\"<$macrocall $name=\"set-caption\" msg=<<__msg__>> />\"\"\">\n<$action-createtiddler $basetitle=<>\n$savetitle=\"$:/state/commander/log-tiddler\"\ntags=\"$:/tags/Commander/LogOps\"\ntype=\"application/json\"\ncaption=<<__msg__>>\n/>\n\n\n\\end\n\n\\define log-add-single-operation(msg:\"commander operation\", tidItem:\"no item\")\n<$action-setfield $tiddler={{$:/state/commander/log-tiddler}} $index=<<__tidItem__>> $value=\"\"\"$msg$\"\"\" />\n\\end\n\n\n\\define delete-all-log-tiddlers()\n<$action-deletetiddler $filter=\"[tag[$:/tags/Commander/LogOps]]\" />\n\\end"},"$:/plugins/kookma/commander/macro/filters":{"title":"$:/plugins/kookma/commander/macro/filters","created":"20190214142032323","creator":"Mohammad","modified":"20190331061107389","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define create-new-filter(description:\"Empty\")\n<$list filter=\"[<__description__>] -Empty\" variable=\"ignore\">\n<$action-createtiddler \n $basetitle=\"$:/plugins/kookma/commander/filters/yourFilter\"\n tags=\"$:/tags/Commander/Filter\"\n description=<<__description__>>\n filter={{$:/temp/commander/search-box}}\n /> \n\n\\end\n"},"$:/plugins/kookma/commander/macro/field-operation":{"title":"$:/plugins/kookma/commander/macro/field-operation","created":"20190212101155537","creator":"Mohammad","modified":"20190331061107400","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define add-new-field-bulk(newField:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__newField__>] -Empty\">\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]] -[has:field[$newField$]]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-add-field\" $param=<<__newField__>> />\n\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"new field `$newField$` added\"\"\" tidItem=<> />\n\n<>\n\n\n\\end\n\n\\define remove-old-field-bulk(oldField:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__oldField__>] -Empty\">\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]] +[has:field[$oldField$]]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-remove-field\" $param=<<__oldField__>> />\n\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"old field `$oldField$` removed\"\"\" tidItem=<> />\n\n<>\n\n\n\\end\n\n\\define set-field-value-bulk(fieldName:\"Empty\", fieldValue:\"Empty\")\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<$list filter=\"[<__fieldName__>] -Empty\">\n<$list filter=\"[<__fieldValue__>] -Empty\">\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]] -[$fieldName$[$fieldValue$]]\">\n<$action-setfield $field=<<__fieldName__>> $value=<<__fieldValue__>> />\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"field `$fieldName$` got a value\"\"\" tidItem=<> />\n\n<>\n\n\n\n\\end\n\n"},"$:/plugins/kookma/commander/macro/compSelective":{"title":"$:/plugins/kookma/commander/macro/compSelective","created":"20190301133121124","creator":"Mohammad","modified":"20190331061107413","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define compSelective(filter,tiddler)\n<$vars stateTid=<> >\n<$reveal type=\"nomatch\" state=<> text=\"hide\">\n<$button set=<> setTo=\"hide\"> Select all\n<$action-setfield $tiddler=<<__tiddler__>> $field=\"text\" $value=\"{}\"/>\n<$list filter=<<__filter__>> variable=\"Item\">\n<$action-setfield $tiddler=<<__tiddler__>> $index=<> $value=\"selected\"/>\n\n\n\n\n<$reveal type=\"match\" state=<> text=\"hide\">\n<$button set=<> setTo=\"show\"> Select none\n<$action-setfield $tiddler=<<__tiddler__>> $field=\"text\" $value=\"{}\"/>\n\n<$action-setfield $tiddler=\"$:/state/commander/snr/select-tiddler\" $field=\"text\" $value=\"\"/>\n\n<$action-setfield $tiddler=\"$:/state/compInspect/temp/commander/selectState-tiddler\" $field=\"text\" $value=\"\"/>\n\n\n\n
    \n<$count filter=\"[<__tiddler__>indexes[]]\" /> selected <$macrocall $name=\"display\" label=\"Show filter in use\" text={{$:/temp/commander}} />\n
    \n<$list filter=\"[subfilter<__filter__>] +[sort[title]]\" variable=\"Item\">\n<$checkbox tiddler=<<__tiddler__>> index=<> checked=\"selected\"> <$link to=<>><$text text=<> />
    \n\n\n\n\\end\n\n\\define state-tiddler-title(tiddler) $tiddler$-comp-selective\n\n\\define compSelective-reset(filter, tiddler)\n<$action-setfield $tiddler=<<__tiddler__>> $field=\"text\" $value=\"{}\"/>\n<$action-setfield $tiddler=<> $field=\"text\" $value=\"\"/>\n\\end"},"$:/plugins/kookma/commander/macro/compInspect/show-preview":{"title":"$:/plugins/kookma/commander/macro/compInspect/show-preview","created":"20190308070953891","creator":"Mohammad","modified":"20190331061107423","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define compInspect-show-preview(tiddler, commonFields:\"\")\n<$vars mainFields=\"title tags text\">\n\n\n\n\n\n\n\n\n\n\n\n<$list filter=\"[<__tiddler__>fields[]] -[enlist] -[enlist<__commonFields__>]\" variable=\"otherFld\">\n\n\n\n\n
    title<$link to=<<__tiddler__>> ><$text text=<<__tiddler__>> />
    tags<$macrocall $name=showTags tiddler=<<__tiddler__>> />
    text<$transclude tiddler=<<__tiddler__>> field=\"text\" mode=\"block\"/>
    <><$transclude tiddler=<<__tiddler__>> field=<> mode=\"inline\"/>
    \n\n\\end\n\n\\define showTags(tiddler)\n<$list filter=\"[<__tiddler__>tags[]]\" variable=tagItem >\n<$macrocall $name=tag tag=<> />\n\n\\end\n"},"$:/plugins/kookma/commander/macro/compInspect/edit-preview":{"title":"$:/plugins/kookma/commander/macro/compInspect/edit-preview","created":"20190308144706094","creator":"Mohammad","modified":"20190331061107434","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define compInspect-edit-preview(tiddler, commonFields:\"\")\n
    \n\n\n\n\n\n\n\n\n\n\n\n\n
    title:<$link to=<<__tiddler__>> ><$text text=<<__tiddler__>> />
    tags:<$macrocall $name=compInspect-get-field tiddler=<<__tiddler__>> field=\"tags\" />
    text:<$macrocall $name=compInspect-get-field tiddler=<<__tiddler__>> field=\"text\" tag=\"textarea\" />
    \n
    \n\n<$tiddler tiddler=<<__tiddler__>> >\n<$macrocall $name=\"compInspect-edit-fileds\" commonFields=<<__commonFields__>> />\n\n\\end\n\n\\define compInspect-get-field(tiddler, field, tag:\"input\") \n<$edit-text class=\"tc-edit-texteditor\" tiddler=<<__tiddler__>> field=<<__field__>> tag=<<__tag__>> default=\"\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\\end"},"$:/plugins/kookma/commander/macro/compInspect/edit-fileds":{"title":"$:/plugins/kookma/commander/macro/compInspect/edit-fileds","created":"20190313061511585","creator":"Mohammad","modified":"20190331061107881","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}] \n\\end\n\n\\define new-field()\n<$vars name={{$:/temp/newfieldname}}>\n<$reveal type=\"nomatch\" text=\"\" default=<>>\n<$button class=\"cmd-btn\">\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<>\n$value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<>\n\n\n<$reveal type=\"match\" text=\"\" default=<>>\n<$button class=\"cmd-btn\">\n<>\n\n\n\n\\end\n\n\\define compInspect-edit-fileds(commonFields:\"\")\n\n
    \n\n\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\">\n<$list filter=<> variable=\"temp\">\n\n\n\n\n\n\n\n\n\n<$list filter=\"created creator modified modifier -[enlist<__commonFields__>]\" variable=\"currentField\">\n\n\n\n\n\n\n\n\n\n\n\n
    \n<$text text=<>/>:\n<$edit-text tiddler=<> field=<> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\n\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<>/>\n{{$:/core/images/delete-button}}\n\n
    \n<$text text=<>/>:\n<$edit-text tiddler=<> field=<> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\n\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<>/>\n{{$:/core/images/delete-button}}\n\n
    \n
    \n\n<$fieldmangler>\n
    \n\n<>\n\n\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<> class=\"tc-edit-texteditor tc-popup-handle\"/>\n\n<$button popup=<> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}\n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\">\n
    \n<$linkcatcher to=\"$:/temp/newfieldname\">\n
    \n<>\n
    \n<$list filter=\"[!is[shadow]!is[system]fields[]search:title{$:/temp/newfieldname}sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$link to=<>>\n<>\n\n\n
    \n<>\n
    \n<$list filter=\"[fields[]search:title{$:/temp/newfieldname}sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<>>\n<>\n\n\n\n
    \n\n\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\"/>\n\n\n<$macrocall $name=\"new-field\"/>\n\n
    \n\n\\end"},"$:/plugins/kookma/commander/macro/compInspect":{"title":"$:/plugins/kookma/commander/macro/compInspect","created":"20190308151331101","creator":"Mohammad","modified":"20190331061107444","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define compInspect(filter, stateTiddler:\"thisTiddler\")\n<$set name=\"state\" \n value={{{ [[$:/state/compInspect/]addsuffix<__stateTiddler__>] }}}\n>\n<$vars\n slStateTid={{{ [addsuffix[/]addsuffix[selectState-tiddler]] }}}\n rvStateTid={{{ [addsuffix[/]addsuffix[revealState-tiddler]] }}}\n chStateTid={{{ [addsuffix[/]addsuffix[checkboxState-tiddler]] }}}\n>\n\nSelect tiddler  <$macrocall $name=compSelect filter=<<__filter__>> stateTiddler=<> />\n  \n<$macrocall $name=\"check-common-fields\" stateTiddler=<> />\n  \n<$reveal stateTitle=<> type=\"nomatch\" text=\"edit\">\n<$button class=\"tc-btn-invisible\" setTitle=<> setTo=\"edit\" tooltip=\"edit tiddler\">{{$:/core/images/edit-button}}\n<$macrocall $name=compInspect-show-preview tiddler={{{ [get[text]] }}} commonFields={{{ [get[text]] }}}/>\n\n<$reveal stateTitle=<> type=\"match\" text=\"edit\">\n<$button class=\"tc-btn-invisible\" setTitle=<> setTo=\"\" tooltip=\"confirm changes\">{{$:/core/images/done-button}}\n<$macrocall $name=compInspect-edit-preview tiddler={{{ [get[text]] }}} commonFields={{{ [get[text]] }}}/>\n\n\n\n\n\\end\n\n\\define check-common-fields(stateTiddler)\n<$checkbox \n tiddler=<<__stateTiddler__>>\n field=\"text\" \n checked=\"\" \n unchecked=\"created creator modified modifier\"\n> Include common fields?\n\\end"},"$:/plugins/kookma/commander/macro/compSelect":{"title":"$:/plugins/kookma/commander/macro/compSelect","created":"20190308070713468","creator":"Mohammad","modified":"20190331061107864","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define compSelect(filter:\"\", stateTiddler:\"\", default:\"\", class:\"\", showButtons:\"show\")\n<$select tiddler=<<__stateTiddler__>> default=<<__default__>> class=<<__class__>> >\n\n<$list filter=<<__filter__>> variable=item>\n\n\n\n<$reveal type=\"match\" text=\"show\" default=<<__showButtons__>> >\n<$vars myfilter=<<__filter__>> mystateTiddler=<<__stateTiddler__>> myitem={{{ [<__stateTiddler__>get[text]] }}} >\n<$button actions=<> class=\"cmd-btn\"> prev \n<$button actions=<> class=\"cmd-btn\"> next \n\n\n\\end\n\n\\define cs-prev-item()\n<$list filter=\"[subfilter] +[before]\" variable=\"prev-item\" >\n<$action-setfield $tiddler=<> text=<> />\n\n\\end\n\n\\define cs-next-item()\n<$list filter=\"[subfilter] +[after]\" variable=\"next-item\" >\n<$action-setfield $tiddler=<> text=<> />\n\n\\end"},"$:/plugins/kookma/commander/macro/snr-operation":{"title":"$:/plugins/kookma/commander/macro/snr-operation","created":"20190307164924193","creator":"Mohammad","modified":"20190405090608001","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define regexp-flags()\n{{$:/state/commander/snr/gm}}{{$:/state/commander/snr/case-sensitive}}\n\\end\n\n\\define snr-ui-show-diffs()\n
    \n
    \n Differences\nTiddler: <$link to={{$:/state/commander/snr/select-tiddler}}><$text text={{$:/state/commander/snr/select-tiddler}}/>\n\n<$wikify name=flags text=<> >\n\n<$macrocall $name=\"replace-text-diff\" \n tiddler={{$:/state/commander/snr/select-tiddler}} \n field={{$:/state/commander/snr/select-tiddler/field}} \n replace={{$:/state/commander/snr/replace-text}} \n replaceWith={{$:/state/commander/snr/replace-text-with}} \n flags=<> \n wholeWords={{$:/state/commander/snr/whole-words}}\n/>\n\n\n
    \n
    \n\\end\n\n\\define snr-check-diffs(tiddler:\"\", field:\"\")\n\\whitespace trim\n<$wikify name=flags text=<> >\n<$wikify name=\"result\" text=\"\"\"\n<$macrocall $name=\"replace-text\" \n tiddler=<<__tiddler__>>\n field=<<__field__>>\n replace={{$:/state/commander/snr/replace-text}} \n replaceWith={{$:/state/commander/snr/replace-text-with}} \n flags=<> \n wholeWords={{$:/state/commander/snr/whole-words}}\n/>\"\"\">\n<$reveal type=\"match\" text={{{ [<__tiddler__>get<__field__>] }}} default=<> >\nsame\n\n<$reveal type=\"nomatch\" text={{{ [<__tiddler__>get<__field__>] }}} default=<> >\ndifferent\n\n\n\n\\end\n\n\\define search-replace-in-tiddler-field(tiddler:\"\",field:\"\",replace:\"\",replaceWith:\"\")\n<$wikify name=ss text=<> >\n<$list filter=\"[] -same\" variable=ignore>\n\n<$wikify name=flags text=<> >\n<$macrocall $name=\"replace-text-button\" \n tiddler=<<__tiddler__>> \n field=<<__field__>>\n replace=<<__replace__>>\n replaceWith=<<__replaceWith__>> \n flags=<> \n wholeWords={{$:/state/commander/snr/whole-words}}\n/>\n<$macrocall $name=\"log-add-single-operation\" msg=\"\"\"`$field$` field has been changed\"\"\" tidItem=<<__tiddler__>> />\n\n\n\n\n\\end\n\n\\define search-replace-in-field-bulk()\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[count[]] -0\" variable=\"ignore\">\n<>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]]\">\n <$macrocall \n $name=\"search-replace-in-tiddler-field\"\n tiddler=<> \n field={{$:/state/commander/snr/select-tiddler/field}} \n replace={{$:/state/commander/snr/replace-text}} \n replaceWith={{$:/state/commander/snr/replace-text-with}} \n />\n\n\n\\end\n\n\\define search-replace-in-field-single-tiddler()\n<>\n <$macrocall \n $name=\"search-replace-in-tiddler-field\"\n tiddler={{$:/state/commander/snr/select-tiddler}}\n field={{$:/state/commander/snr/select-tiddler/field}} \n replace={{$:/state/commander/snr/replace-text}} \n replaceWith={{$:/state/commander/snr/replace-text-with}} \n />\n\\end\n\n\\define snr-actions()\n<$button actions=<> tooltip=\"search and replace in a single tiddler\" class=\"cmd-btn\">\nReplace?\n \n\n<$macrocall $name=\"compConfirmAction\"\ncountFilter=\"[[$:/temp/commander/selected-titles]indexes[]]\"\nactionMacro=\"search-replace-in-field-bulk\"\nstateTiddler=\"$:/state/commander/SelectiveReplaceAllDropdown\"\nconfirmMessage=\"Are you sure you wish to replace text in\" \nbtnLabel=\"Replace all?\"\n/>\n\n\n\\end"},"$:/plugins/kookma/commander/macro/compConfirmAction":{"title":"$:/plugins/kookma/commander/macro/compConfirmAction","created":"20190301145916990","creator":"Mohammad","modified":"20190405090324228","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define compConfirmAction(\nbtnLabel:\"Delete these tiddlers\", \nconfirmMessage:\"Are you sure you wish to delete\", \nstateTiddler:\"\"\ncountFilter:\"\", \nactionMacro:\"\")\n<$set name=resultCount value={{{ [subfilter<__countFilter__>count[]] }}} >\n<$reveal type=\"gt\" text=\"0\" default=<> >\n<$button popup=<> class=\"cmd-btn\">$btnLabel$\n\n<$reveal state=<> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n
    \n
    \n
    \n$confirmMessage$ <> tiddler(s)?\n
    \n
    \n<$button class=\"cmd-btn\"> $btnLabel$\n<$macrocall $name=<<__actionMacro__>> />\n\n
    \n
    \n
    \n\n\n\\end"},"$:/plugins/kookma/commander/help/snr":{"title":"$:/plugins/kookma/commander/help/snr","caption":"Search-n-Replace","created":"20190314084511720","creator":"Mohammad","modified":"20190331061107454","modifier":"Mohammad","tags":"$:/tags/Commander/Help","type":"text/vnd.tiddlywiki","text":"!! Regular Expressions Quick Reference\n\n|''FLAGS'' |<|<|h\n| i |ignore case|case insensitive matching|\n| |whole words|match strings of a-z, 0-9 and _|\n| g |global|field start=^, field end=$, all matches|\n| m |multi-line|line start=^, line end=$, first match|\n| |first match|field start=^, field end=$, first match|\n|''MATCH'' |<|<|h\n|''Anchors''|<|<|\n| ^ |start of scope|see Flags, match is zero length|\n| $ |end of scope|see Flags, match is zero length|\n| \\b |word boundary|anchor to edge of word, zero length|\n| \\B |not word boundary|anchor inside word, zero length|\n|''Character Classes''|<|<|\n| [c] |class of characters|any one matches, e.g. [abc123]|\n| [^c] |negated class of characters|any one doesn't match, e.g. [^abc123]|\n|''Shorthand Character Classes''|<|<|\n| . |any character except newline|same as [^\\n]|\n| \\d |decimal|same as [0-9]|\n| \\D |not decimal|same as [^0-9]|\n| \\s |white-space|same as [\\ \\t\\n]|\n| \\S |not white-space|same as [^\\ \\t\\n]|\n| \\t |tab|same as [\\t]|\n| \\n |newline|same as [\\n]|\n| \\w |word character|same as [a-zA-Z0-9_]|\n| \\W |not word character|same as [^a-zA-Z0-9_]|\n|''Capturing Groups''|<|<|\n| (match) |match placed in variable $x|can be used in Replace|\n| (\\x) |repeats match pattern of $x|can be used in Replace|\n|''Quantifiers''|<|<|\n| ? |single match|match 0 or 1 time|\n| * |greedy match 0+|match 0 or as many times as possible|\n| *? |lazy match 0+|match 0 or as few times as possible|\n| + |greedy match 1+|match 1 or as many times as possible|\n| +? |lazy match 1+|match 1 or as few times as possible|\n| {x} |match x times|match x times|\n| {x,y} |match x to y times|match x times to exactly y times|\n| {x,} |match x or more times|match x times or as many as possible|\n|''Escapes''|<|<|\n| \\ |escape special characters|add to \\ [ ] ( ) { } ^ $ . ? * + for literals|\n|''REPLACE'' |<|<|h\n| $& |return the full match|<|\n| $x |return $x where x is the numeric index of a Capturing Group|<|\n|''NOTE'' |<|<|h\n|This Reference supports most ordinary uses of regular expressions.
    For advanced options: [[MDN Reference|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Using_simple_patterns]]; examples: [[regular-expressions.info|https://www.regular-expressions.info/tutorial.html]].|<|<|\n\n"},"$:/plugins/kookma/commander/help/quick-tutorial":{"title":"$:/plugins/kookma/commander/help/quick-tutorial","caption":"Quick tutorial","created":"20190314050138754","creator":"Mohammad","modified":"20190331061106924","modifier":"Mohammad","tags":"$:/tags/Commander/Help","type":"text/vnd.tiddlywiki","text":"*Use ''Search via filter'' to list possible tiddlers\n*Use ''Select tiddlers'' for the resulting list to identify which specific tiddlers to do a batch operation on\n*From ''Batch operations tabs'' select the batch Operation you wish to perform on selected tiddlers\n\n*Notes:\n**Multiple batch operations can be done on the same set (unless you change something in the search criteria)\n**Sometimes it is useful to use an intermediate batch to help, like tag tiddlers with a \"working\" tag, using multiple searches, then then use the \"working\" tag to apply a batch operation to\n\n!!! Footenote\n# [[Use filter expression|https://tiddlywiki.com/prerelease/#Filters:Filters%20%5B%5BFilter%20Expression%5D%5D%20%5B%5BFilter%20Syntax%5D%5D%20%5B%5BFilter%20Operators%5D%5D%20%5B%5BFilter%20Parameter%5D%5D%20%5B%5BFilter%20Run%5D%5D%20%5B%5BFilter%20Step%5D%5D%20%5B%5BFilter%20Whitespace%5D%5D]]"},"$:/plugins/kookma/commander/help/batch-operation":{"title":"$:/plugins/kookma/commander/help/batch-operation","caption":"Batch operation","created":"20190315083511735","creator":"Mohammad","modified":"20190331061106943","modifier":"Mohammad","tags":"$:/tags/Commander/Help","type":"text/vnd.tiddlywiki","text":"Making the same changes to large numbers of tiddlers in TW5 can be repetetive and time consuming.\n\n* Batch operations work on groups of tiddlers at the same time and make changes 'in bulk', in one go.\n\n* Batch operations operate on groups of tiddlers that share matching criteria.\n\n* Tiddlers which share a common tag, a common field, a word in their title, or were created on the same day, month or year are all candidates for batch operations.\n\nAs a result batch operations can save users a great deal of time but, because they work on several tiddlers at once, the price of a mistake is multiplied! Back-up your wiki!\n\n!! Types of Batch operations :\n# Rename tiddlers\n#* use a totally new name\n#* add a suffix/prefix to title\n#* add prefix to title\n#* replace part of title\n#* add ordinal number to title \n#* Copy tiddlers (make duplicates)\n# Add/remove tag or any field\n# Change/replace the content of any field\n# Create multiple empty tiddlers (for lectures or a slideshow) with common properties (tag, field, part of text,...)\n# Capability to undo an operation at least one step back\n# Capability to get user confirmation before doing an operation\n"},"$:/plugins/kookma/commander/help/what-is-commander":{"title":"$:/plugins/kookma/commander/help/what-is-commander","caption":"What is Commander","created":"20190314134238047","creator":"Mohammad","modified":"20190331061108183","modifier":"Mohammad","tags":"$:/tags/Commander/Help","type":"text/vnd.tiddlywiki","text":"Tiddler Commander, in short ''Commander'' is a unique tool for batch operations on tiddlers. Commander has the below features\n\n* Bulk tiddler creation/deletion\n* Tag operation: add, remove, replace\n* Field operation: add, remove, set field value\n* ''SNR'', search and replace in all fields including text, tags, title, and common fields\n* ''Inspect'', to review and inspect tiddlers in one place, scroll among them and edit all fields (including common fields), tags, text (title is an exception!)\n* log, create logs of all operations\n* Search, //save and load// any combination of filter search\n\n<>"},"$:/plugins/kookma/commander/help/warning":{"title":"$:/plugins/kookma/commander/help/warning","caption":"Warning","created":"20190314050138754","creator":"Mohammad","modified":"20190405080858764","modifier":"Mohammad","tags":"$:/tags/Commander/Help","type":"text/vnd.tiddlywiki","text":"<>\n\n<>\n\n<>\n\n<>\n\n"},"$:/plugins/kookma/commander/filters/yourFilter":{"title":"$:/plugins/kookma/commander/filters/yourFilter","created":"20190214155104262","creator":"Mohammad","description":"Mohammad Filter","filter":"[search:title[filters/your]]","modified":"20190331061107204","modifier":"Mohammad","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/Test":{"title":"$:/plugins/kookma/commander/filters/Test","created":"20190214141452091","creator":"Mohammad","description":"Trial","filter":"[tag[xx]]","modified":"20190331061107215","modifier":"Mohammad","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/StoryList":{"title":"$:/plugins/kookma/commander/filters/StoryList","created":"20190214135246552","description":"{{$:/language/Filters/StoryList}}","filter":"[list[$:/StoryList]] -$:/AdvancedSearch","modified":"20190331061107225","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/SessionTiddlers":{"title":"$:/plugins/kookma/commander/filters/SessionTiddlers","created":"20190214135831279","description":"{{$:/language/Filters/SessionTiddlers}}","filter":"[haschanged[]]","modified":"20190331061107237","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/RecentTiddlers":{"title":"$:/plugins/kookma/commander/filters/RecentTiddlers","created":"20190214135912493","description":"{{$:/language/Filters/RecentTiddlers}}","filter":"[!is[system]has[modified]!sort[modified]limit[50]]","modified":"20190331061107256","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/RecentSystemTiddlers":{"title":"$:/plugins/kookma/commander/filters/RecentSystemTiddlers","created":"20190214135950458","description":"{{$:/language/Filters/RecentSystemTiddlers}}","filter":"[has[modified]!sort[modified]limit[50]]","modified":"20190331061107272","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/Orphans":{"title":"$:/plugins/kookma/commander/filters/Orphans","created":"20190214135426497","description":"{{$:/language/Filters/Orphans}}","filter":"[all[orphans]sort[title]]","modified":"20190331061107283","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/Missing":{"title":"$:/plugins/kookma/commander/filters/Missing","created":"20190214140029091","description":"{{$:/language/Filters/Missing}}","filter":"[all[missing]sort[title]]","modified":"20190331061107293","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/filters/Drafts":{"title":"$:/plugins/kookma/commander/filters/Drafts","created":"20190214135512125","description":"{{$:/language/Filters/Drafts}}","filter":"[has[draft.of]sort[title]]","modified":"20190331061107303","tags":"$:/tags/Commander/Filter","type":"text/vnd.tiddlywiki","text":""},"$:/plugins/kookma/commander/empty-tiddler":{"title":"$:/plugins/kookma/commander/empty-tiddler","created":"20190309033436758","creator":"Mohammad","modified":"20190331061107312","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"Dont delete. \nThis EMPTY tiddler is part of Tiddler Commander."},"$:/plugins/kookma/commander/config/AutoFocus":{"title":"$:/plugins/kookma/commander/config/AutoFocus","created":"20190212055413944","modified":"20190331061107322","tags":"","type":"text/vnd.tiddlywiki","text":"yes"},"$:/plugins/kookma/commander/license":{"title":"$:/plugins/kookma/commander/license","created":"20181101134530634","creator":"Mohammad","modified":"20190629100639521","modifier":"Mohammad","tags":"","type":"application/x-tiddler","text":"Distributed under an MIT license.\n\nCopyright (c) 2018-2019 [[Mohammad Rahmani|https://github.com/kookma]]\n\n<<<\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n<<<\n"},"$:/plugins/kookma/commander/readme":{"title":"$:/plugins/kookma/commander/readme","created":"20190212050942506","creator":"Mohammad","modified":"20190629100635582","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"!! What is Commander?\n{{$:/plugins/kookma/commander/help/what-is-commander}}\n\nFor help and instruction on usage, open [[Commander|$:/Commander]] help tab.\n\n!! References\n; Project code and demo\n* [[GitHub demo page|https://github.com/kookma/TW-Commander]]\n* [[GitHub code page|https://github.com/kookma/TW-Commander]]\n\n;Tiddler Commander at Tiddlywiki Google forum\n* [[Initial announcement|https://groups.google.com/d/msg/tiddlywiki/BxJsWuae-Uc/JapAx4mtBgAJ]]\n* [[Beta releases|https://groups.google.com/d/msg/tiddlywiki/w9Bv-WulKw8/CYf9D4H6BgAJ]]\n* [[Release candidate|https://groups.google.com/d/msg/tiddlywiki/Zw3F3iRtggA/qX2uWiBJBgAJ]]"},"$:/plugins/kookma/commander/authors":{"title":"$:/plugins/kookma/commander/authors","created":"20190212051153468","creator":"Mohammad","modified":"20190331061107353","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"!! Author\n* [[Mohammad Rahmani|https://github.com/kookma]]\n\n!! Contributors\n* [[@MarxSal|https://github.com/Marxsal]]\n* [[@BurningTreeC|https://github.com/BurningTreeC]]\n\n!! Acknowledgement\n* Jeremy Ruston\n* Rob Hoelz\n* Ton Gerner\n* Jed Carty\n* Tobias Beer\n* Anthony Muscio\n* Birthe C\n* Thomas Elmiger\n* Diego Messa\n* ~TiddlyTweeter\n* Watt"},"$:/plugins/kookma/commander/ui/textops/replace-text":{"title":"$:/plugins/kookma/commander/ui/textops/replace-text","caption":"Search and replace","created":"20190220211138573","creator":"Mohammad","icon":"$:/core/images/gitter","modified":"20190331061108139","modifier":"Mohammad","tags":"$:/tags/Commander/SnrOps","type":"text/vnd.tiddlywiki","text":"<>"},"$:/plugins/kookma/commander/ui/tiddlerops/create-tiddlers":{"title":"$:/plugins/kookma/commander/ui/tiddlerops/create-tiddlers","caption":"Create tiddlers","created":"20190213193004029","creator":"Mohammad","modified":"20190331061107896","modifier":"Mohammad","tags":"$:/tags/Commander/TiddlerOps","type":"text/vnd.tiddlywiki","text":"Base title  \n<$edit-text \n tiddler=\"$:/temp/commander/tiddler-base-title\" \n tag=\"input\" \n default=\"\"\n placeholder=\" base title\" \n class=\"cmd-txt-area\"/>  \nTags  \n<$edit-text \n tiddler=\"$:/temp/commander/tiddler-base-tags\" \n tag=\"input\" \n default=\"\"\n placeholder=\" tags\" \n class=\"cmd-txt-area\"\n/> \n\n \n<$checkbox \n tiddler=\"$:/state/commander/tiddler-template-status\" \n field=\"text\" \n checked=\"use-template\" \n unchecked=\"no-template\"\n> Use template?  \n<$reveal type=\"match\" text=\"use-template\" default={{$:/state/commander/tiddler-template-status}}>\nTemplate\n<$select tiddler=\"$:/temp/commander/template-newtiddler\" default='base'>\n<$list filter='[all[shadows+tiddlers]tag[$:/tags/Commander/Template]]'>\n\n\n\n\n\nNumber of tiddlers  \n<$select tiddler=\"$:/temp/commander/tiddler-base-number\" default='1'>\n<$list filter='[range[1,19, 1]] [range[20,50, 5]] [range[60,100,10]]'>\n\n\n\n\n<$reveal type=\"match\" text=\"use-template\" default={{$:/state/commander/tiddler-template-status}}>\n<$button class=\"cmd-btn\"> Create tiddlers\n<$macrocall $name=\"bulk-tiddler-with-template-creator\"\nbaseTitle={{$:/temp/commander/tiddler-base-title}}\nbaseTags={{$:/temp/commander/tiddler-base-tags}}\nnumberTiddler={{$:/temp/commander/tiddler-base-number}}\ntemplate={{$:/temp/commander/template-newtiddler}}\n/> \n\n\n<$reveal type=\"match\" text=\"no-template\" default={{$:/state/commander/tiddler-template-status}}>\n<$button class=\"cmd-btn\"> Create tiddlers\n<$macrocall $name=\"bulk-tiddler-creator\"\nbaseTitle={{$:/temp/commander/tiddler-base-title}}\nbaseTags={{$:/temp/commander/tiddler-base-tags}}\nnumberTiddler={{$:/temp/commander/tiddler-base-number}}\n/>\n\n\n"},"$:/plugins/kookma/commander/ui/tiddlerops/delete-tiddlers":{"title":"$:/plugins/kookma/commander/ui/tiddlerops/delete-tiddlers","caption":"Delete tiddlers","created":"20190301144408502","creator":"Mohammad","modified":"20190405090308772","modifier":"Mohammad","tags":"$:/tags/Commander/TiddlerOps","type":"text/vnd.tiddlywiki","text":"<$set name=numTids value={{{[[$:/temp/commander/selected-titles]indexes[]count[]] }}}>\n<$reveal type=\"match\" text=\"0\" default=<> >\nNo tiddlers is selected for deleteion!\n\n<$reveal type=\"gt\" text=\"0\" default=<> >\nNumber of tiddlers selected for deletion: <>
    \nNote that, the delete operation cannot be undone!!\n\n\n\n<$macrocall $name=\"compConfirmAction\"\ncountFilter=\"[[$:/temp/commander/selected-titles]indexes[]]\"\nactionMacro=\"delete-tiddlers-selective-bulk\"\nstateTiddler=\"$:/state/commander/SelectiveDeleteDropdown\"\n/>\n"},"$:/plugins/kookma/commander/ui/titleops/add-remove-chars":{"title":"$:/plugins/kookma/commander/ui/titleops/add-remove-chars","caption":"Remove chars","created":"20190217092719245","creator":"Mohammad","modified":"20190331061107928","modifier":"Mohammad","tags":"$:/tags/Commander/TitleOps","type":"text/vnd.tiddlywiki","text":"\\define rngcat() [range[0,$(minchars)$]] -0 \n\nNumber of characters\n<$select tiddler=\"$:/temp/commander/title-remove-chars\" default=\"0\" class=\"cmd-sl\">\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]] +[!is[missing]] +[length[]] +[minall[]] +[subtract[1]] -Infinity\" variable=\"minchars\">\n<$list filter=<> >\n\n\n\n  \n\n<$button class=\"cmd-btn\"> First n chars\n<$macrocall \n $name=\"remove-chars-from-begining-tiltle-bulk\" \n num={{$:/temp/commander/title-remove-chars}} \n/>\n\n<$button class=\"cmd-btn\"> Last n chars\n<$macrocall \n $name=\"remove-chars-from-end-tiltle-bulk\" \n num={{$:/temp/commander/title-remove-chars}} \n/>\n\n\n\n"},"$:/plugins/kookma/commander/ui/titleops/add-remove-prefix":{"title":"$:/plugins/kookma/commander/ui/titleops/add-remove-prefix","caption":"Add remove prefix","created":"20190212141758567","creator":"Mohammad","modified":"20190331061107951","modifier":"Mohammad","tags":"$:/tags/Commander/TitleOps","type":"text/vnd.tiddlywiki","text":"<$edit-text\ntiddler=\"$:/temp/commander/title-prefix\"\ntag=\"input\"\ndefault=\"\"\nclass=\"cmd-txt-area\"\nplaceholder=\" prefix\"\n/>   \n<$button class=\"cmd-btn\"> Add prefix\n<$macrocall \n $name=\"addPrefix-to-tiltle-bulk\" \n prefix={{$:/temp/commander/title-prefix}} \n/>\n\n<$button class=\"cmd-btn\"> Remove prefix\n<$macrocall \n $name=\"removePrefix-from-tiltle-bulk\" \n prefix={{$:/temp/commander/title-prefix}} \n/>\n\n\n"},"$:/plugins/kookma/commander/ui/titleops/add-remove-suffix":{"title":"$:/plugins/kookma/commander/ui/titleops/add-remove-suffix","caption":"Add remove suffix","created":"20190212143434676","creator":"Mohammad","modified":"20190331061107966","modifier":"Mohammad","tags":"$:/tags/Commander/TitleOps","type":"text/vnd.tiddlywiki","text":"<$edit-text\ntiddler=\"$:/temp/commander/title-suffix\"\ntag=\"input\"\ndefault=\"\"\nclass=\"cmd-txt-area\"\nplaceholder=\" suffix\"\n/>   \n<$button class=\"cmd-btn\"> Add suffix\n<$macrocall \n $name=\"addSuffix-to-tiltle-bulk\" \n suffix={{$:/temp/commander/title-suffix}} \n/>\n\n<$button class=\"cmd-btn\"> Remove suffix\n<$macrocall \n $name=\"removeSuffix-from-tiltle-bulk\" \n suffix={{$:/temp/commander/title-suffix}} \n/>\n\n\n"},"$:/plugins/kookma/commander/ui/tagops/add-remove-tags":{"title":"$:/plugins/kookma/commander/ui/tagops/add-remove-tags","caption":"Add remove tags","created":"20190212063924640","creator":"Mohammad","modified":"20190331061107982","modifier":"Mohammad","tags":"$:/tags/Commander/TagOps","type":"text/vnd.tiddlywiki","text":"<$edit-text\ntiddler=\"$:/temp/commander/tag-add-remove/new\"\ntag=\"input\"\ndefault=\"\"\nclass=\"cmd-txt-area\"\nplaceholder=\" new tag\"\n/>  \n<$button class=\"cmd-btn\"> Add new tag\n<$macrocall $name=\"add-new-tag-bulk\" newTag={{$:/temp/commander/tag-add-remove/new}} />\n\n\n<$button class=\"cmd-btn\"> Remove old tag\n<$macrocall $name=\"remove-old-tag-bulk\" oldTag={{$:/temp/commander/tag-add-remove/old}} />\n\n \n<$select class=\"cmd-select-wd\" tiddler=\"$:/temp/commander/tag-add-remove/old\" default=<>>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]tags[]sort[]]\" >\n\n\n\n\n"},"$:/plugins/kookma/commander/ui/tagops/replace-tags":{"title":"$:/plugins/kookma/commander/ui/tagops/replace-tags","caption":"Replace tags","created":"20190212080523588","creator":"Mohammad","modified":"20190331061107996","modifier":"Mohammad","tags":"$:/tags/Commander/TagOps","type":"text/vnd.tiddlywiki","text":"Old tag  \n<$select class=\"cmd-select-wd\" tiddler=\"$:/temp/commander/replace-tags/old\" default=<>>\n<$list filter=\"[[$:/temp/commander/selected-titles]indexes[]tags[]sort[]]\" >\n\n\n\n\nNew tag  \n<$edit-text\ntiddler=\"$:/temp/commander/replace-tags/new\"\ntag=\"input\"\ndefault=\"\"\nclass=\"cmd-txt-area\"\nplaceholder=\" new tag\"\n/>\n\n<$button class=\"cmd-btn\"> Replace tags\n<$macrocall $name=\"replace-tag-bulk\" \noldTag={{$:/temp/commander/replace-tags/old}} \nnewTag={{$:/temp/commander/replace-tags/new}} />\n\n\n"},"$:/plugins/kookma/commander/ui/fieldops/add-remove-fields":{"title":"$:/plugins/kookma/commander/ui/fieldops/add-remove-fields","caption":"Add remove fields","created":"20190314051054548","creator":"Mohammad","modified":"20190331061108010","modifier":"Mohammad","tags":"$:/tags/Commander/FieldOps","type":"text/vnd.tiddlywiki","text":"<$edit-text\ntiddler=\"$:/temp/commander/field-add\"\ntag=\"input\"\ndefault=\"\"\nclass=\"cmd-txt-area\"\nplaceholder=\" new field\"\n/> \n<$button class=\"cmd-btn\"> Add new field\n<$macrocall $name=\"add-new-field-bulk\" newField={{$:/temp/commander/field-add}} />\n\n\n<$button class=\"cmd-btn\"> Remove old field\n<$macrocall $name=\"remove-old-field-bulk\" oldField={{$:/temp/commander/field-remove}} />\n\n<$select class=\"cmd-select-wd\" tiddler=\"$:/temp/commander/field-remove\" default=<>>\n<$list filter=\"[subfilter{$:/state/commander/add-remove-fields/fields}]\" >\n\n\n   \n<$checkbox \n tiddler=\"$:/state/commander/add-remove-fields/fields\" \n field=\"text\" \n checked=\"[[$:/temp/commander/selected-titles]indexes[]fields[]sort[]] -title -tags\" \n unchecked=\"[[$:/temp/commander/selected-titles]indexes[]fields[]sort[]] -[[$:/plugins/kookma/commander/empty-tiddler]fields[]]\"\n> Include system fields?\n\n\n"},"$:/plugins/kookma/commander/ui/fieldops/set-field-value":{"title":"$:/plugins/kookma/commander/ui/fieldops/set-field-value","caption":"Set field value","created":"20190212120609737","creator":"Mohammad","modified":"20190331061108039","modifier":"Mohammad","tags":"$:/tags/Commander/FieldOps","type":"text/vnd.tiddlywiki","text":"Field name  \n<$select class=\"cmd-select-wd\" tiddler=\"$:/temp/commander/field-name\" default=<>>\n<$list filter=\"[subfilter{$:/state/commander/set-field-value/fields}]\" >\n\n\n   \n<$checkbox \n tiddler=\"$:/state/commander/set-field-value/fields\" \n field=\"text\" \n checked=\"[[$:/temp/commander/selected-titles]indexes[]fields[]sort[]] -tags -title\" \n unchecked=\"[[$:/temp/commander/selected-titles]indexes[]fields[]sort[]] -[[$:/plugins/kookma/commander/empty-tiddler]fields[]]\"\n> Include system fields?\n\nField value  <$edit-text\ntiddler=\"$:/temp/commander/field-value\"\ntag=\"input\"\ndefault=\"\"\nclass=\"cmd-txt-area\"\nplaceholder=\" field value\"\n/>   \n<$button class=\"cmd-btn\"> Set field value\n<$macrocall \n $name=\"set-field-value-bulk\" \n fieldName={{$:/temp/commander/field-name}} \n fieldValue={{$:/temp/commander/field-value}} \n/>\n"},"$:/plugins/kookma/commander/ui/snr-operation":{"title":"$:/plugins/kookma/commander/ui/snr-operation","caption":"Snr","created":"20190220210055713","creator":"Mohammad","icon":"$:/core/images/gitter","modified":"20190331061108085","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"Search and replcae in tiddler fields!\n\n<>\n\n"},"$:/plugins/kookma/commander/ui/title-operation":{"title":"$:/plugins/kookma/commander/ui/title-operation","caption":"Title","created":"20190212051704536","creator":"Mohammad","modified":"20190331061107700","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"Warning: These operation may overwritte existing tiddlers\n\n<>\n\n"},"$:/plugins/kookma/commander/ui/tiddler-selection":{"title":"$:/plugins/kookma/commander/ui/tiddler-selection","caption":"Select tiddlers","created":"20190301203327739","creator":"Mohammad","modified":"20190331061107721","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"
    \n<$list filter=\"[subfilter{$:/temp/commander}] +[!is[missing]] +[limit[1]]\" variable=\"null\">\n<$macrocall $name=compSelective\nfilter=\"[subfilter{$:/temp/commander}] +[!is[missing]]\"\ntiddler=\"$:/temp/commander/selected-titles\"\n/>\n\n
    \n\n"},"$:/plugins/kookma/commander/ui/tiddler-operation":{"title":"$:/plugins/kookma/commander/ui/tiddler-operation","caption":"Tiddler","created":"20190212125319261","creator":"Mohammad","modified":"20190331061107731","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"<>\n"},"$:/plugins/kookma/commander/ui/tag-operation":{"title":"$:/plugins/kookma/commander/ui/tag-operation","caption":"Tag","created":"20190212051852003","creator":"Mohammad","modified":"20190331061107741","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"<>\n\n"},"$:/plugins/kookma/commander/ui/setting":{"title":"$:/plugins/kookma/commander/ui/setting","caption":"Setting","created":"20190214140835173","creator":"Mohammad","icon":"$:/core/images/options-button","modified":"20190331061107752","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"<>\n"},"$:/plugins/kookma/commander/ui/search/filter-button/search":{"title":"$:/plugins/kookma/commander/ui/search/filter-button/search","created":"20190314111817036","creator":"Mohammad","modified":"20190331061107761","modifier":"Mohammad","tags":"$:/tags/Commander/Search/FilterButton","type":"text/vnd.tiddlywiki","text":"<$reveal state=\"$:/temp/commander/search-box\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\" tooltip=\"apply filter search\">\n<$action-setfield $tiddler=\"$:/temp/commander\" $field=\"text\" $value={{$:/temp/commander/search-box}} />\n<$action-setfield $tiddler=\"$:/temp/commander/selected-titles\" $field=\"text\" $value=\"{}\"/>\n{{$:/core/images/advanced-search-button}}\n\n"},"$:/plugins/kookma/commander/ui/search/filter-button/save":{"title":"$:/plugins/kookma/commander/ui/search/filter-button/save","created":"20190214141644228","creator":"Mohammad","modified":"20190331061107771","modifier":"Mohammad","tags":"$:/tags/Commander/Search/FilterButton","type":"text/vnd.tiddlywiki","text":"<$reveal state=\"$:/temp/commander/search-box\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\" tooltip=\"save current search\" popup=<> >\n{{$:/core/images/file}}\n\n\n\n<$reveal state=<> type=\"popup\" class=\"tc-popup-keep\" position=\"belowleft\" animate=\"yes\">\n
    \n
    \n
    \nSave new search filter

    \n<$edit-text\ntiddler=\"$:/temp/commander/save-new-filter\"\ntag=\"input\"\ndefault=\"\"\nclass=\"cmd-txt-area\"\nplaceholder=\"description for new filter\"\n/> \n\n<$button class=\"tc-btn\"> Save new filter\n<$macrocall $name=\"create-new-filter\" description={{$:/temp/commander/save-new-filter}} />\n<$action-deletetiddler $tiddler=\"$:/temp/commander/save-new-filter\"/>\n\n
    \n
    \n"},"$:/plugins/kookma/commander/ui/search/filter-button/dropdown":{"title":"$:/plugins/kookma/commander/ui/search/filter-button/dropdown","created":"20190214133424013","creator":"Mohammad","modified":"20190331061107781","modifier":"Mohammad","tags":"$:/tags/Commander/Search/FilterButton","type":"text/vnd.tiddlywiki","text":"\n<$button popup=<> class=\"tc-btn-invisible\" tooltip=\"select a search filter\">\n{{$:/core/images/down-arrow}}\n\n\n\n<$reveal state=<> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/commander/search-box\">\n
    \n
    \n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Commander/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/>\n\n
    \n
    \n\n\n\n"},"$:/plugins/kookma/commander/ui/search/filter-button/clear":{"title":"$:/plugins/kookma/commander/ui/search/filter-button/clear","created":"20190214132946159","creator":"Mohammad","modified":"20190331061107791","modifier":"Mohammad","tags":"$:/tags/Commander/Search/FilterButton","type":"text/vnd.tiddlywiki","text":"<$reveal state=\"$:/temp/commander/search-box\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\" tooltip=\"clear search box and selected tiddlers\">\n<$action-setfield $tiddler=\"$:/temp/commander/search-box\" $field=\"text\" $value=\"\"/>\n<$action-setfield $tiddler=\"$:/temp/commander\" $field=\"text\" $value=\"\"/>\n<$action-setfield $tiddler=\"$:/temp/commander/selected-titles\" $field=\"text\" $value=\"{}\"/>\n<$action-setfield $tiddler=\"$:/state/commander/snr/select-tiddler\" $field=\"text\" $value=\"\"/>\n<$action-setfield $tiddler=\"$:/state/compInspect/temp/commander/selectState-tiddler\" $field=\"text\" $value=\"\"/> \n{{$:/core/images/close-button}}\n\n"},"$:/plugins/kookma/commander/ui/search":{"title":"$:/plugins/kookma/commander/ui/search","caption":"Commander filter search","created":"20190212055219117","creator":"Mohammad","modified":"20190331061107801","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"\n"},"$:/plugins/kookma/commander/ui/log-status":{"title":"$:/plugins/kookma/commander/ui/log-status","caption":"Log status","created":"20190221152805807","creator":"Mohammad","modified":"20190331061107811","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"
    \n<$button class=\"tc-btn-invisible tc-tiddlylink\" actions=<>>Clear log\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[tag[$:/tags/Commander/LogOps]]\" />\"\"\">\n
    \nRecent number of operations: <>
    \n<$list filter=\"[tag[$:/tags/Commander/LogOps]] +[!sort[created]]\" variable=\"logTid\">\n<$view tiddler=<> field=\"created\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0mm:0ss\"/> \n<$view tiddler=<> field=\"caption\">\n <$view tiddler=<> field=\"title\">\n\n\n
      <$list filter=\"[indexes[]]\" variable=\"item\">\n
    1. <$link to=<>><>\n<$set name=\"myItem\" tiddler=<> index=<> >\n<$list filter=\"[!search[existed]]\" variable=\"ignore\" \n emptyMessage=\"\"\"<>\"\"\" >\n<>\n\n\n
    2. \n
    \n\n
    \n\n
    "},"$:/plugins/kookma/commander/ui/inspectops/Inspection":{"title":"$:/plugins/kookma/commander/ui/inspectops/Inspection","caption":"Inspect","created":"20190313080119081","creator":"Mohammad","modified":"20190331061107821","modifier":"Mohammad","tags":"$:/tags/Commander/InspectOps","type":"text/vnd.tiddlywiki","text":"<$macrocall \n $name=compInspect\n filter=\"[[$:/temp/commander/selected-titles]indexes[]sort[]]\"\n stateTiddler=\"temp/commander\"\n/>"},"$:/plugins/kookma/commander/ui/inspection":{"title":"$:/plugins/kookma/commander/ui/inspection","caption":"Inspect","created":"20190313075823496","creator":"Mohammad","modified":"20190331061107835","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"<>\n"},"$:/plugins/kookma/commander/ui/help":{"title":"$:/plugins/kookma/commander/ui/help","caption":"Help","created":"20190314050052494","creator":"Mohammad","icon":"$:/core/images/help","modified":"20190331061107464","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"<>\n\n\n"},"$:/plugins/kookma/commander/ui/field-operation":{"title":"$:/plugins/kookma/commander/ui/field-operation","caption":"Field","created":"20190212061551615","creator":"Mohammad","modified":"20190331061107474","modifier":"Mohammad","tags":"$:/tags/Commander","type":"text/vnd.tiddlywiki","text":"<>\n\n"},"$:/plugins/kookma/commander/template/pretty":{"title":"$:/plugins/kookma/commander/template/pretty","caption":"Pouri","created":"20190213200338381","creator":"Mohammad","modified":"20190331061107654","modifier":"Mohammad","tags":"$:/tags/Commander/Template","type":"text/vnd.tiddlywiki","version":"beta","text":"! Heading\nThis is pretty\n\n```\nsample code\n```\n\n!!! Footnotes\n# one\n# two"},"$:/plugins/kookma/commander/template/elegant":{"title":"$:/plugins/kookma/commander/template/elegant","caption":"Elagant","created":"20190213200258460","creator":"Mohammad","modified":"20190331061107664","modifier":"Mohammad","tags":"$:/tags/Commander/Template","type":"text/vnd.tiddlywiki","version":"beta","text":"! Heading one\nHere you go\n\n!! Heading two\n\n* one\n* two\n* three\n\n!!! Heading three\n\n|Heading one|Heading Two|Heading Three|h\n|r1|100|200|\n|r2|02|03|\n|r3|-1|-2|\n"},"$:/plugins/kookma/commander/template/base":{"title":"$:/plugins/kookma/commander/template/base","caption":"Base","created":"20190213200622605","creator":"Mohammad","modified":"20190331061107674","modifier":"Mohammad","tags":"$:/tags/Commander/Template","type":"text/vnd.tiddlywiki","text":"This is a simple one!"},"$:/plugins/kookma/commander/utility":{"title":"$:/plugins/kookma/commander/utility","created":"20190315092752816","creator":"Mohammad","modified":"20190331061107689","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define display(label,text)\n<$set name=\"stateTid\" value=\"$:/temp/commander/display/popup/$label$\" >\n<$button popup=<> class=\"tc-btn-invisible\">$label$\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<> animate=\"yes\">\n<$text text=<<__text__>> />\n\n\\end\n\n\\define is-filterSeearch-newer-than-selectedTitles(TidA, TidB)\n<$set name=\"tidAMod\" value={{{ [[$TidA$]get[modified]] }}}>\n<$set name=\"tidBMod\" value={{{ [[$TidB$]get[modified]] }}}>\n<$set name=\"tidAText\" value={{{ [[$TidA$]get[text]] }}}>\n<$set name=\"tidBText\" value={{{ [[$TidB$]get[text]] }}}>\n<$list filter=\"[<__TidB__>get[text]minlength[1]]\" variable=ignore>\n<$reveal type=\"nomatch\" default=<> text=<>>\n<$list filter=\"[] [] +[nsort[]last[1]removesuffix]\">\nA new filter search has been detected, click on the search button to apply it.\n\n\n\n\n\n\n\n\\end\n\n!!Remarks\n;is-filterSeearch-newer-than-selectedTitles\n* Checks `TidA` and `TidB` for modified date and text\n* If They are not empty, then\n** checks if the text of two are equal, if not\n** checks to see if `TidB` is newer or not\n** if newer shows a message, to apply the new search filter\n* Note\n** `TidA=\"$:/temp/commander\"`\n** `TidB=\"$:/temp/commander/search-box\"`\n* is-filterSeearch-newer-than-selectedTitles is called from $:/plugins/kookma/commander/ui/search\n\n;display\n* gets a label and a text\n* create an inline label\n* on click label, the text is displayed as temporary popup\n* losing focus, the text goes hidden\n* this macro is used in customized compSelective to show the active filter"},"$:/plugins/kookma/commander/history":{"title":"$:/plugins/kookma/commander/history","created":"20190629100628757","modified":"20190629102406912","tags":"","type":"text/vnd.tiddlywiki","text":"29th June 2019\n\nVersion 1.1.1\n\n* [FIXED] add license, readme, history\n* [FIXED] add $:/Commander to list of plugin tiddlers\n\n5th April 2019\n\n!! PMario commnet\n''Comment'': Change `cm- prefix` for stylesheets and remove `!important` from css
    \nRef: https://groups.google.com/d/msg/tiddlywiki/YQU3ATb5r3k/zqZZ1UjxBAAJ\n\n* [FIXED] All `!important` from css have been removed. \n* [FIXED] New css prefix is used for all css. This is `cmd-` stands for commander\n\n!! Josiah comment\n''Comment'': Add a button to show system help for snr
    \nRef: https://groups.google.com/d/msg/tiddlywiki/BxJsWuae-Uc/HqFfJnC0BAAJ\n\n* [FIXED]: Help tab extended to cover this partially\n\n!! Other\n* [NEW] SNR, replace all button has got confirmation! before action you need to confirm replace all.\n* [NEW] The component compConfirmDelete renamed to compConfirmAction to cope with more use cases!\n\n31st March 2019\n\n; Big change: Tiddler Commander development moved to ~ThirdFlow\n# NEW: Under Thirdflow, a realease and a demo is created on each update\n# NEW: Release number is now started from 1.0.0 as this is a stable plugin\n# FIXED: Based on Mario comments the CSS prefixes changed to cmd- to prevent conflict with the current prefixes\n\n\n24th March 2019\n\n* New: Difftetx cleanup setting added. Now it is possible to select among //none//, //semantic// and //efficient// optional post-processing should be applied to the diffs processing.\n* Added: Help on shadow tiddlers processing\n* Fixed: Minor issues fixed\n\n17th March 2019\n\n!! Commander 0.0.14\n* New button style\n** all components were also updated\n* Change the range in create tiddlers from 1:1:19, 20:5:50, and 50:100\n\n14th March 2019\n\n<>\n* FIXED: Search and Select tiddlers now are seated together\n* NEW: numberof tiddlers matches and selected are shown\n* New: Help tab was added\n* New: Clear search box will clear selected selections\n* New: Select none in `Select tiddlers` will clear selected tiddlers\n\n\n\n# The reason is, when filter search is changed, the selected tiddlers are still there! So, it needs to clear the previous selection on new search criteria!\n\n\n13th March 2019\n\n* New : Inspect\n** View selected tiddler with their fileds\n** Scroll in selected tiddlers\n** Edit selected tiddlers including all fields\n** Scroll in selected tiddlers while editing\n\nAcknowledgement:\nSpecial thanks goes to ''Ton Gerner'' for his great script on view fileds.\n\n8th March 2019\n\n* New search-n-replace (SNR) added\n* SNR can search and replace not only in a single tiddler but also in bulk of tiddlers\n* Several issues fixed\n* Logging is active for all operatiosn\n\n3rd March 2019\n\n* New: selective operation\n** select all/ select none/ optionally select tiddlers\n* New: logging all operations\n* New: delete temporary tiddlers button added to Setting tab\n* New: old fields, old tags are selected from a drop down list\n\n* Text operation disabled and will be added in the next update. It is still buggy\n\n28th February 2019\n\n*NEW- create bulk tiddlers and bulk tiddlers with template has been merged in one tab\n\n24th February 2019\n\n* Search and replace \n** works for changing characters, words, ...\n** retains formatting\n** cannot distiguish whole words (you need to add spaces around the word)\n\nMany thanks to BTC for his great help in this part.\n\n22nd February 2019\n\n* Logging\n** Commander logs some operations\n*** Create tiddlers\n*** Create tiddlers using template\n*** Delete tiddlers silently\n*** Delet tiddlers selectively\n\n\n* New face\n** Delete tiddlers selectively has a new face\n** search and replace in tiddler text now supports whole word searching\n\n* Main issues\n** Search and replace in tiddlers remove formatting \n\n21st February 2019\n\n* Search and replcae in tiddler text filed\n** This is in progress feature\n** This does not support the whole words, casesensitive search and replace\n\n18th February 2019\n\n* Fixed: handling missing tiddlers added\n* New: remove chars from the title was added\n* Fixed: a specified height is used in ui to prevent collapsing\n\n\n14th February 2019\n\n* New: bulk tiddler creation using templates\n* New: remove fields using drop down menu\n* New: preset search filter added\n* New: save search filter added\n* Fixed: empty suffix/prefix does not delete tiddlers anymore\n* Fixed: prevent all overwrittings (issue: you cannot force overwriting)\n\n\n12th February 2019\n\n* Title operation\n** add/remove prefix\n** add/remove suffix\n\n* Tag operation\n** add/remove tags\n** replace tags\n\n* Field operation\n** add/remove field\n** set filed value (will create field if not existed!)\n\n* Tids (Tiddler operation)\n** delete tiddlers\n** create bulk tiddlers\n\n13th February 2019\n\n* Fixed: remove suffix not working\n* New: bulk tiddler created has got new name format\n* New: added range and select widgets for \"create bulk tiddlers\"\n* New: added delete tiddlers at once operation\n"},"$:/Commander":{"title":"$:/Commander","created":"20190212051316149","creator":"Mohammad","icon":"$:/core/images/list","modified":"20190405075403566","modifier":"Mohammad","type":"text/vnd.tiddlywiki","text":"{{$:/plugins/kookma/commander/ui/search}}\n<>\n\n<>\n\n---\n<>\n"}}} \ No newline at end of file diff --git a/tiddlers/$__plugins_kookma_commander.json.meta b/tiddlers/$__plugins_kookma_commander.json.meta new file mode 100644 index 0000000..cbda66f --- /dev/null +++ b/tiddlers/$__plugins_kookma_commander.json.meta @@ -0,0 +1,10 @@ +author: Mohammad Rahmani +created: 20190330203751645 +description: Tiddler Commander +list: readme license history +modified: 20190704155012362 +plugin-type: plugin +tags: +title: $:/plugins/kookma/commander +type: application/json +version: 1.1.2 \ No newline at end of file diff --git a/tiddlers/$__plugins_kookma_refnotes.json b/tiddlers/$__plugins_kookma_refnotes.json new file mode 100644 index 0000000..f38084f --- /dev/null +++ b/tiddlers/$__plugins_kookma_refnotes.json @@ -0,0 +1,195 @@ +{ + "tiddlers": { + "$:/plugins/kookma/refnotes/bibtex/button/set-tag": { + "created": "20181220153648454", + "creator": "Mohammad", + "text": "!! List bibtex tiddlers\nAll tiddlers contain bibliography data in Bibtext format.\n\n>
      \n<$list filter=\"[has[bibtex-title]]\" variable=\"v\">\n
    1. <$link to=<>><$text text=<> />
    2. \n\n
    \n\n---\n\n\n<$button> Add \"bibtex-entry\" tag \n<$list filter=\"[has[bibtex-title]]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-add-tag\" $param=\"bibtex-entry\" />\n\n\n\n\n", + "title": "$:/plugins/kookma/refnotes/bibtex/button/set-tag", + "tags": "$:/tags/SideBar bibtex", + "modifier": "Mohammad", + "modified": "20190320155123592", + "caption": "Biblography", + "description": "This code adds the `bibtex-entry` tag to all tiddlers imported by `BibTeX Importer` plugin thus having a `bibtex-title` field." + }, + "$:/plugins/kookma/refnotes/stylesheet/abbr": { + "text": "/* Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3 */ \nabbr[title] {\n color: inherit;\n font-style: italic;\n text-decoration: none;\n border-bottom: 1px dotted #aaa;\n cursor: help;\n}", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/abbr", + "tags": "$:/tags/Stylesheet", + "modifier": "Mohammad", + "modified": "20190320161547319", + "creator": "Mohammad", + "created": "20181022085407237" + }, + "$:/plugins/kookma/refnotes/stylesheet/abbr/smallscreen": { + "text": "/* Ref:https://aarontgrogg.com/lab/\nShow the title for small screen\n*/ \n/* this works based on the max-width*/\n@media only screen and (max-width: 960px) {\nabbr:hover:after { content: ' ('attr(title)')'; }\n}\n\n@media (hover: none) {\n/* Push the title attribute into generated content after the abbr. */\nabbr[title]::after { \n content: ' ('attr(title)')'; }\n}\n", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/abbr/smallscreen", + "tags": "$:/tags/Stylesheet", + "modifier": "Mohammad", + "modified": "20190320161547318", + "creator": "Mohammad", + "created": "20190102073150148" + }, + "$:/plugins/kookma/refnotes/stylesheet/bibtex": { + "text": ".ref-nonumber{\n color:blue;\n font-size:90%;\n list-style-type:none;\n}\n\n.ref-nonumber li{\n padding-bottom:8px;\n}\n\n.ref-list{\n color:blue;\n font-size:90%;\n}\n\n.link-refcls{\n font-weight:400;\n color:#00008B; /*darkblue*/\n text-decoration:none;\n}\n\n.refcls{\n color:#00008B;\n text-transform: capitalize;\n}\n\n.ref-notfound{\n color: #856404 !important;\n background-color: #fff3cd !important;\n}\n\n.ref-author{\n color:#00008B; /*color for author in tooltip*/\n}", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/bibtex", + "tags": "$:/tags/Stylesheet", + "modifier": "Mohammad", + "modified": "20190320161547318", + "creator": "Mohammad", + "created": "20181220161713706" + }, + "$:/plugins/kookma/refnotes/stylesheet/footnote-counter": { + "text": "/*automatic counter for fnote macro. The counter resets at the begining of each tiddler*/\n.tc-tiddler-frame {\n counter-reset: fnote-count;\n}\n.refnotes-footnote {\n counter-increment: fnote-count;\n}\n.refnotes-footnote:after {\n content: counter(fnote-count);\n font-size:small;\n color:#0000ee;\n vertical-align: super;\n line-height: 1.5;\n margin-left: -0.1em;\n}\n", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/footnote-counter", + "tags": "$:/tags/Stylesheet", + "modifier": "Mohammad", + "modified": "20190320161547318", + "creator": "Mohammad", + "created": "20181214085707714" + }, + "$:/plugins/kookma/refnotes/stylesheet/mr-tooltip": { + "text": "/* tooltip class used for ref, fnote and other macros */\n.mr-tooltip {\n position: relative;\n display: inline-block;\n cursor: pointer; \n}\n\n.mr-tooltip .mr-tooltiptext{\n font-size: 0.90em; /* change if it is too small */\n}\n\n.mr-tooltip .mr-tooltiptext {\n visibility: hidden;\n background-color: #fff;\n color: #222222; \n text-align: left;\n border-radius: 2px;\n padding: 5px 10px;\n max-width: 30vw;\n max-height:20em;\n overflow-y: auto;\n cursor: auto;\n width: max-content;\n width: -moz-max-content;\n width: -webkit-max-content;\n width: -o-max-content;\n \n /* Position the tooltip */\n position: absolute;\n z-index: 1;\n bottom: 100%;\n left: 50%;\n margin-left: -40px;\n box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19);\n}\n\n.mr-tooltip:hover .mr-tooltiptext {\n visibility: visible;\n /*opacity: 0.9;*/\n}\n", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/mr-tooltip", + "tags": "$:/tags/Stylesheet", + "modifier": "Mohammad", + "modified": "20190320161547318", + "creator": "Mohammad", + "created": "20181215201115750" + }, + "$:/plugins/kookma/refnotes/stylesheet/mr-tooltip/smallscreen": { + "text": "@media screen and (max-width: 960px) {\n.mr-tooltip .mr-tooltiptext {\n /* Position the tooltip */\n position:fixed;\n top:0;\n left: 0;\n margin-left: 0px;\n bottom: unset;\n width:100%;\n max-width: 100vw;\n z-index: 9999;\n} \n\n.mr-tooltip:hover .mr-tooltiptext {\n opacity: 1;\n} \n \n}", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/mr-tooltip/smallscreen", + "tags": "$:/tags/Stylesheet refnotes", + "modifier": "Mohammad", + "modified": "20190320161547318", + "creator": "Mohammad", + "created": "20190102053815948" + }, + "$:/plugins/kookma/refnotes/stylesheet/showfnotes": { + "text": "/* Footnote class*/\n\n.fnote-list{\n color:blue;\n font-size:90%;\n}\n\n.fnote-pretty{\n display: block;\n margin: 0.5em;\n margin-right: auto;\n width: 100% !important;\n border-collapse: collapse;\n padding: 15px 15px 15px 25px; /*left padding=25px*/\n border-width: 0px;\n border-style: solid;\n border-left-width: 1px;\n background-color: rgb(255,248,220);\n color: rgb(91,49,7);\n line-height: 1.2em; \n font-size:0.9em;\n}\n", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/showfnotes", + "tags": "$:/tags/Stylesheet", + "modifier": "Mohammad", + "modified": "20190320161547318", + "creator": "Mohammad", + "created": "20181219144814573" + }, + "$:/plugins/kookma/refnotes/stylesheet/table-borderless": { + "text": "/*Borderless table*/\n.refnotes-table-borderless, \n.refnotes-table-borderless th, \n.refnotes-table-borderless tr, \n.refnotes-table-borderless td{\n border:0;\n}", + "type": "text/css", + "title": "$:/plugins/kookma/refnotes/stylesheet/table-borderless", + "tags": "$:/tags/Stylesheet", + "modifier": "Mohammad", + "modified": "20190320161547318", + "creator": "Mohammad", + "created": "20190320094538299" + }, + "$:/plugins/kookma/refnotes/viewtemplate/bibtex": { + "text": "<$list filter=\"[all[current]has[bibtex-title]]\">\n\n* ''DOI'': {{!!bibtex-doi}}\n* ''Published'': {{!!bibtex-journal}}, {{!!bibtex-year}}\n
    <$text text={{!!bibtex-title}}/>
    \n
    <$text text={{!!bibtex-author}}/>
    \n\n!! ''Abstract''\n><$text text={{!!bibtex-abstract}}/>\n\n''Keywords'': {{!!bibtex-keywords}}\n", + "title": "$:/plugins/kookma/refnotes/viewtemplate/bibtex", + "tags": "$:/tags/ViewTemplate", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181220142502642" + }, + "$:/plugins/kookma/refnotes/readme": { + "text": "! Refnotes\nRefnotes is a set of macros and stylesheets for creating abbreviations, footnotes, citations. It also makes tables of footnotes, abbreviations (glossaery) and references (bibliography table).\n\n\nIt contains codes and elements to\n\n* ''Create and insert''\n# Abbreviation (`abbr` macro)\n# Footnote (`fnote` macro)\n# Reference (`ref` macro)\n\n* ''Make tables of''\n# Abbreviations or glossary (`showabbrs` macro)\n# Footnotes and endnotes (`showfnotes` macro)\n# References (bibliography) using different output style (`showrefs` macro)\n\n!! Requirements\nThe Refnotes requires\n\n* TW 5.1.18 (and above)\n* The `find` macro\n\nIt is recommended to use the official `Bibtex Importer` plugin for using with bibliography code.\n\n! Tutorial and documentation\nThe Refnotes documentation and tutorial can be explored from sidebar, 'Contents' tab. There is a bunch of examples on each topic to demonstrate the features and capabilities of Refnotes.\n\n''Note:'' The sidebar `Bibtex` tab can also be used for details of bibliography macro.\n\n! Installation\n* Goto [[GitHub|https://github.com/kookma/Refnotes/releases/tag/1.0]]\n* Download the `__plugins_.mr_refnotes.tid`\n* Drag and drop into your wiki\n\n\n! Authors\n<<<\n* License: [[MIT License|$:/plugins/kookma/refnotes/license]]\n* Authors: \n** [[Mohammad Rahmani|https://github.com/kookma]]\n** [[Mark S|https://github.com/Marxsal]]\n<<<\n\n! Acknowledgement\n\nI would like to acknowledge the below people for their great help.\n\n* Thomas Elmiger, who is the developer of [[extract macro|https://tid.li/tw5/hacks.html#Extract%20Macro]]. The idea of searching tiddlers and extract text snippets inspired from his work.\n* Jan, developer of [[slides and stories|http://slidesnstories.tiddlyspot.com]]\n* Simon Huber, for all his help through TW forum\n* Jeremy Ruston\n* Jed Carty\n* Rizwan Ibnishak\n* Antony Muscio\n* Josiah Hincks\n* Diego Mesa\n* Tobias Beer\n* Ton Gerner\n* and all kind Tiddywikians in TW forum\n", + "title": "$:/plugins/kookma/refnotes/readme", + "tags": "refnotes", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181228094509051" + }, + "$:/plugins/kookma/refnotes/macro/footnote": { + "text": "\\define fnote(note)\n
    $note$
    \n\\end\n\n\\define output-fnote(p)\n<$vars output=$p$>\n
  • <>
  • \n\n\\end\n\n\\define showfnotes(filter:\"[]\", title:\"Empty\" class:\"fnote-list\")\n<$reveal tag=\"div\" type=\"nomatch\" default=\"Empty\" text=<<__title__>> >\n
    $title$
    \n\n
      \n<$list filter=<<__filter__>> >\n<$macrocall $name=\"find\" \n text={{!!text}}\n begin='<\n\n
    \n\\end\n\n! Macros\n<<<\n<>\n<<<\n! Summary\n* The `fnote` macro is used to insert a footnote\n* The `fnote` macro requires the `find` macro to work\n* The `showfnotes` lists all footnotes in a tiddler or a list of tiddlers (using a filter expression)\n* The `output-fnote` is a custom output macro to list the footnotes. See the `find` macro for more details.\n", + "title": "$:/plugins/kookma/refnotes/macro/footnote", + "tags": "$:/tags/Macro", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181214095749808" + }, + "$:/plugins/kookma/refnotes/macro/find": { + "text": "\\define find(text, begin, end, output:\"simple\", mode:\"all\")\n<$vars \n fulltext=<<__text__>>\n start=<<__begin__>>\n stop=<<__end__>>\n output-macro=<<__output__>>\n>\n<$list variable=\"p1\" filter=\"[splitbefore]\">\n<$list variable=\"p2\" filter=\"[removeprefix]\">\n<$list variable=\"p3\" filter=\"[splitbeforeremovesuffix]\">\n<$macrocall $name=<> p=<> />\n<$reveal type=\"match\" text=\"all\" default=<<__mode__>> >\n<$macrocall $name=\"find\"\n text={{{[removeprefixremoveprefix]}}}\n begin=<>\n end=<>\n output=<>\n/>\n\n\n\n\n\n\\end\n\n\\define simple(p)\n<$text text=<<__p__>> />\n\\end\n\n\\define simple-list(p)\n
  • <$text text=<<__p__>>/>
  • \n\\end\n\n\n! Macro\n<<<\n<>\n<<<\n\n!! Summary\n* `find` is a macro to search a text and find all snippets delimited between values of `begin` and `end` delimiters\n* `simple` is a macro used by `find` to show the output in a simple format\n* `simple-list` is a macro used by `find` to show the output in a simple list format. The ordered and unordered list\ncan be used if the call to `find` macro wrapped in a `div` with suitable type e.g `ol` or `ul`.", + "title": "$:/plugins/kookma/refnotes/macro/find", + "tags": "refnotes $:/tags/Macro", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181213121411187" + }, + "$:/plugins/kookma/refnotes/macro/bibtex/showrefs": { + "text": "\\define output-journal-article(p)\n<$wikify name=p2 text=<<__p__>> >\n<$set name=\"curtid\" tiddler=<> field=\"title\" emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<> >\n
  • <$view field=\"bibtex-author\" tiddler=<>/>, <$view field=\"bibtex-title\" tiddler=<>/>,<$view field=\"bibtex-journal\" tiddler=<>/>, <$view field=\"bibtex-year\" tiddler=<>/>.
  • \n\n<$reveal type=\"match\" default=\"RefNotFound\" text=<> >\n
  • Reference $p$ NOT FOUND. Check your input.
  • \n\n\n\\end\n\n\n\\define showrefs(filter:\"[]\", title:\"Empty\", class:\"ref-list\")\n<$reveal tag=\"div\" type=\"nomatch\" default=\"Empty\" text=<<__title__>> >\n

    $title$

    \n\n<$wikify name=\"mylist\" text=\"\"\"\n<$list filter=<<__filter__>> >\n<$macrocall $name=\"find-refs\" tid=<> />\n\n\"\"\">\n
      \n<$list filter=\"[enlistsort[]]\" variable=\"myListItem\">\n\n<$macrocall $name=\"output-journal-article\" p=<> />\n\n
    \n\n\\end\n\n! Macro\n<<<\n<>\n<<<", + "title": "$:/plugins/kookma/refnotes/macro/bibtex/showrefs", + "tags": "$:/tags/Macro", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20190117195536649" + }, + "$:/plugins/kookma/refnotes/macro/bibtex/regexprefs.js": { + "text": "/*\\\ntitle: $:/plugins/kookma/macro/bibtex/regexprefs.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching and returning result. All results are returned if global flag used. All sub-groups are returned if not global and sub-group hits are found.\n\nThis is a hacked version of core macro: $:/core/modules/filters/regexp.js\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexprefs = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match, global,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\n\tglobal = /g/.test(flags) ;\n\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title), ret=\"\";\n\t\t\tif(text !== null) {\n\t\t\t\tret = text.match(regexp) ;\n\t\t\t\tif(ret !==null) {\n\t\t\t\t\tif(global) {\n\t\t\t\t\t\tresults.push.apply(results,ret) ; //DEBUG\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if there are sub groups return sub groups START\n\t\t\t\t\t\tif(ret.length > 1) { // return sub groups\n\t\t\t\t\t\t\tresults = results.concat(ret.slice(1)) ;\n\t\t\t\t\t\t} else { // if no sub-groups\n\t\t\t\t\t\t\tresults.push(ret[0]);\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();", + "type": "application/javascript", + "title": "$:/plugins/kookma/refnotes/macro/bibtex/regexprefs.js", + "module-type": "filteroperator", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20190120190755258" + }, + "$:/plugins/kookma/refnotes/macro/bibtex/ref": { + "text": "\\define ref(tid)\n<$set name=\"ref-tid\" tiddler=<<__tid__>> field=\"title\" emptyValue=\"RefNotFound\">\n
    \n<$reveal type=\"match\" default=<> text=\"RefNotFound\">\n<$link overrideClass=\"link-refcls\">\n[<$view tiddler=<<__tid__>> field=\"title\"/>]\n\n
    Warning: Reference Not Found.
    Click to create it:<>
    \n\n<$reveal type=\"nomatch\" default=<> text=\"RefNotFound\">\n[<$view tiddler=<<__tid__>> field=\"caption\">\n <$view tiddler=<<__tid__>> field=\"title\">\n]\n
    \n<$macrocall $name=\"displayref-onhover\" refTid=<> />\n
    \n\n
    \n\n\\end\n\n\\define displayref-onhover(refTid)\n<$set name=\"ref-tid\" value=<<__refTid__>> >\n<$link overrideClass=\"link-refcls\" to=<> >\n<$view tiddler=<> field=\"bibtex-author\"/>.\n\n<$view tiddler=<> field=\"bibtex-title\"/>. (<$view tiddler=<> field=\"bibtex-year\"/>)\n\n\\end\n\n\\define create-notexisted-ref(refTid)\n<$set name=\"myTid\" value=<<__refTid__>> >\n<$button class=\"tc-btn-invisible tc-tiddlylink\">\n<$action-sendmessage $message=\"tm-new-tiddler\"\n title=<> \n bibtex-author=\"\" bibtex-year=\"\"\n bibtex-title=\"\" bibtex-abstract=\"\"\n bibtex-entry-type=\"\" bibtex-keywords=\"\"\n bibtex-doi=\"\" bibtex-url=\"\"\n tags=\"bibtex-entry\"\n /><> \n\n \n\\end\n\n\n\n! Macro\n<<<\n<>\n<<<\n\n! Summary\nThe bibtex code contains several macros\n\n# `ref`: the macro to insert a reference into the text\n# `create-notexisted-ref`: called by `ref` to create a new reference, when it is not existed.\n# `bibliography`: the output macro used by find, displays a reference item.\n# `showbib` the macro scan the tiddler (tiddlers) for citations (references) and creates the references list. The `showbib` macro requires the `find` macro to show list of references.", + "title": "$:/plugins/kookma/refnotes/macro/bibtex/ref", + "tags": "$:/tags/Macro", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181210155346225" + }, + "$:/plugins/kookma/refnotes/macro/bibtex/find-refs": { + "text": "\\define find-refs(tid)\n<$vars regexp=\"(?g)<>\"\nregexp2='<>'\nregexp3=\"^'(.*?)'\"\nregexp4=\"\\[\\[(.*?)\\]\\]\"\n>\n<$list filter=\"[[$tid$]regexprefs:text]\">\n<$list filter=\"[all[current]regexprefs]\">\n<$list filter=\"[all[current]regexprefs] ~[all[current]]\" >\n<$list filter=\"[all[current]regexprefs] ~[all[current]]\" variable=p>\n<>\n\n\n\n\n\n\\end\n\n\\define pwrapper() \n[[[[$(p)$]]]]\n\\end\n\n! Macro\n<<<\n<>\n<<<", + "title": "$:/plugins/kookma/refnotes/macro/bibtex/find-refs", + "tags": "exportme refnotes $:/tags/Macro", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181213121411187" + }, + "$:/plugins/kookma/refnotes/macro/abbr": { + "text": "\\define abbr(term:\"\", dict:\"Glossary\")\n<$set name=\"abbreviation\" \n tiddler=\"\"\"$dict$\"\"\"\n index=\"\"\"$term$\"\"\"\n emptyValue=\"Term not found\">\n > >$term$\n\n\\end\n\n\\define term-not-found()\nTerm not found\n\\end\n\n\\define abbr-list(indexes, dtiddler:\"\" title:\"Empty\")\n<$reveal tag=\"div\" type=\"nomatch\" default=\"Empty\" text=<<__title__>> >\n

    $title$

    \n\n\n<$list filter=\"\"\"$indexes$ +[sort[title]]\"\"\" variable=\"item\">\n\n\n\n\n\n
    <>\n <$set name=\"term\" tiddler=\"\"\"$dtiddler$\"\"\" index=<> emptyValue=<> >\n <>\n \n
    \n\\end\n\n\n\\define output-item(p)\n<$set name=\"items\" value=<<__p__>> >\n<$set name=\"item\" value={{{ [enlistlimit[1]] }}} >\n<$set name=\"item-noquotes\" value={{{ [removeprefix[\"]removesuffix[\"]] [removeprefix[']removesuffix[']] ~[] }}} emptyValue=\"NOT_FOUND\">\n<>\n\n\n\n\\end\n\n\n\\define showabbrs(filter:\"[]\", dtiddler:\"Glossary\", title:\"Empty\")\n<$wikify name=\"term-indexes\" text=\"\"\"\n<$set name=\"dictionary\" value=<<__dtiddler__>> >\n<$list filter=<<__filter__>> >\n<$macrocall $name=\"find\" text={{!!text}} begin=\"<>\" output=\"output-item\"/>\n\n\n\"\"\"> \n<$macrocall $name=\"abbr-list\" indexes=<> dtiddler=<<__dtiddler__>> title=<<__title__>> />\n\n\\end\n\n! Macros\n<<<\n<>\n<<<\n\n! Summary\n* `abbr` inserts an abbreviation\n* `abbr-list` creates a glossary table from list of terms given through indexes parameter. The output is sorted alphabetically. This macro is normally called by `showabbrs`, but can be called directly to make a glossary table from a list of given terms.\n* `showabbrs` creates a glossary table from the abbreviation terms found in tiddlers text given by `filter` parameter. It uses two other macros to do the job.\n** `find`: to find the `<>` occurrences\n** `output-item`: to extract the abbreviation terms and remove the surrounding quotes\n** `abbr-list` to create the glossary table from the output of `find` macro\n\n! How showabbrs works?\nIt actually uses the find macro to find all occurrences of `<>` and uses `output-item` to extract then the glossary term and stores the result (a list of terms separated by space) in the variable `term-indexes`. This list then passed to `abbr-list` macro to be displayed as a glossary table. In facts `abbr-list` reads the definition of each term in `dtiddler` dictionary and displays the result as a table row.", + "title": "$:/plugins/kookma/refnotes/macro/abbr", + "tags": "$:/tags/Macro", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181022071907838" + }, + "$:/plugins/kookma/refnotes/license": { + "text": "Distributed under an MIT license.\n\nCopyright (c) 2018-2019 [[Mohammad Rahmani|https://github.com/kookma]]\n\n<<<\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n<<<\n", + "type": "application/x-tiddler", + "title": "$:/plugins/kookma/refnotes/license", + "modifier": "Mohammad", + "modified": "20190320161547317", + "creator": "Mohammad", + "created": "20181101134530634" + }, + "$:/plugins/kookma/refnotes/usage": { + "created": "20181228094933760", + "creator": "Mohammad", + "text": "! Usage\n!! Abbreviation\n* Insert abbreviation\n```\n<>\n<>\n```\n\n* List abbreviations (glossary table)\n```\n<>\n<>\n```\n\n!! Bibliography\n* Insert reference\n```\n<>\n<>\n<>\n```\n\n* List references\n```\n<>\n```\n> It is recommended to install the official plugin \"Bibtex Importer\". Also see [[bibtex naming rules|$:/plugins/kookma/bibtex/naming-rules]]\n> A Biblography tab is added to sidebar. It is used to tag new imported bibliography tiddlers and also can be used for citations.\n\n!! Footnotes\n* Insert footnote\n```\n<>\n```\n\n* List footnotes\n```\n<>\n```\n\n!! Documentation\nFor detailed instruction, examples and demo see:\n\nhttps://kookma.github.io/Refnotes/", + "title": "$:/plugins/kookma/refnotes/usage", + "tags": "refnotes", + "modifier": "Mohammad", + "modified": "20190320180152764" + } + } +} \ No newline at end of file diff --git a/tiddlers/$__plugins_kookma_refnotes.json.meta b/tiddlers/$__plugins_kookma_refnotes.json.meta new file mode 100644 index 0000000..f2c808e --- /dev/null +++ b/tiddlers/$__plugins_kookma_refnotes.json.meta @@ -0,0 +1,12 @@ +author: Mohammad Rahmani +core-version: 5.1.18 +created: 20190320155339670 +creator: Mohammad +description: Refnotes +list: readme usage license +modified: 20190704155012354 +modifier: Mohammad +plugin-type: plugin +title: $:/plugins/kookma/refnotes +type: application/json +version: 1.0.3 \ No newline at end of file diff --git a/tiddlers/$__plugins_kookma_slider.json b/tiddlers/$__plugins_kookma_slider.json new file mode 100644 index 0000000..df5c988 --- /dev/null +++ b/tiddlers/$__plugins_kookma_slider.json @@ -0,0 +1 @@ +{"tiddlers":{"$:/plugins/kookma/slider/stylesheet/slide-footer":{"title":"$:/plugins/kookma/slider/stylesheet/slide-footer","created":"20180907070611557","creator":"Mohammad","modified":"20190614025939297","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":".slider-slide-footer {\n display:flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.slider-slide-footer{ \n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n box-sizing: border-box;\n width: 100%;\n padding: 5px;\n background-color: #efefef;\n opacity: 0.55;\n}\n\n.slider-slide-footer:hover{\n opacity: 1.0; \n}\n\n.slider-slide-footer-buttons{\n display:flex;\n justify-content: space-around;\n width:120px;\n margin-left:5px;\n outline:none;\n}\n\n.slider-slidenumber{\n height: 22pt;\n width: 22pt;\n line-height:22pt;\n border-radius: 50%;\n text-align: center;\n margin-right:5px;\n}\n\n.slider-slidenumber{\n background: gray;\n color: #fff;\n font-size:1em;\n font-weight:700; \n}\n.buttons-no-outline {\n outline:none;\n} /*remove the blue border on button focus */"},"$:/plugins/kookma/slider/stylesheet/theme/dark":{"title":"$:/plugins/kookma/slider/stylesheet/theme/dark","created":"20180722195027124","creator":"Mohammad","modified":"20190614122154053","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"
    /* Set styles for the slider viewtemplate */\n\n[data-tags ~=\"{{$:/plugins/kookma/slider/state!!current-trail}}\"]  {\n    background-color:#d9edf7;\n    color:#31708f;\n}\n\n[data-tags~=\"trail\"] {\n  border: 1px solid #999;\n  background-color: #f0efea; \n}\n\n.sliderDashboard-header,\n.sliderDashboard-footer {\n  background-color:#fcfdfe;\n  padding: 5px;\n}\n.sliderDashboard-buttons {\n  float:right;\n  padding:8px;\n}\n\n.sliderDashboard-slide-list{\n  min-height:250px;\n  color:#dfdfdf;\n  background-color:#4e4a4a; /*ffffeb */\n  border-radius:3px;\n  padding:12px;\n}\n\n.sliderDashboard-slide-list .tc-tiddlylink      {  color:#dfdfdf;}\n.sliderDashboard-slide-list .tc-tiddlylink:hover{  color:#dfdfdf;}\n\n.slider-trail-list {\n  text-shadow:none;\n  background-color:#4e4a4a;\n  height: 400px; \n}\n\n.slider-trail-list a.tc-tiddlylink      {  color:#dfdfdf;}\n.slider-trail-list a.tc-tiddlylink:hover{  color:#dfdfdf;}\n"},"$:/plugins/kookma/slider/stylesheet/theme/light":{"title":"$:/plugins/kookma/slider/stylesheet/theme/light","created":"20181028153618499","creator":"Mohammad","modified":"20190614122154056","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":"/* Set styles for the trail viewtemplate */\n\n[data-tags~=\"trail\"] {\n  border: 1px solid #999;\n  background-color: #f0efea;\n}\n\n.sliderDashboard-header,\n.sliderDashboard-footer {\n  background-color:#fcfdfe;\n  padding: 5px;\n}\n.sliderDashboard-buttons {\n  float:right;\n  padding:8px;\n}\n\n.sliderDashboard-slide-list{\n  min-height:250px;\n  color:#111;\n  background-color:#fff;\n  border-radius:3px;\n  padding:12px;\n}\n\n\n.slider-trail-list {\n  background-color:#eee;\n  height: 400px; \n}\n"},"$:/plugins/kookma/slider/stylesheet/tooltip":{"title":"$:/plugins/kookma/slider/stylesheet/tooltip","created":"20180728144429505","creator":"Mohammad","modified":"20190614031606722","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":".slider-tooltip {\n    position: relative;\n    display: inline-block;\n\n}\n\n.slider-tooltip .slider-tooltiptext {\n    visibility: hidden;\n    background-color: #ffffff;\n    color: #111111;\n    text-align: left;\n    border-radius: 6px;\n    padding: 5px 0;\n    min-width: 360px;\n    max-height: 60vh;\n    overflow-y: auto;\n\n    /* Position the tooltip */\n    position: absolute;\n    z-index: 1;\n    bottom: 100%;\n    left: 50%;\n    margin-left: -40px;\n    box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)\n}\n\n.slider-tooltip:hover .slider-tooltiptext {\n    visibility: visible;\n}\n"},"$:/plugins/kookma/slider/stylesheet/slide-background-class":{"title":"$:/plugins/kookma/slider/stylesheet/slide-background-class","created":"20181029071532524","creator":"Mohammad","modified":"20190613151047228","modifier":"Mohammad","tags":"$:/tags/Stylesheet","type":"text/css","text":"/* Colors taked from [1] https://www.w3schools.com/colors/colors_names.asp \n[2] http://www.workwithcolor.com/color-chart-full-01.htm\n*/\n.MistyRose{background-color:#FFE4E1;}\n.LemonChiffon{background-color:#FFFACD;}\n.LavenderBlush{background-color:#FFF0F5;}\n.Lavender{background-color:#E6E6FA;}\n.Honeydew{background-color:#F0FFF0;}\n.LightCyan{background-color:#E0FFFF;}\n.AliceBlue{background-color:#F0F8FF;}\n.Cornsilk{background-color:#FFF8DC;}\n.Gainsboro{background-color:#DCDCDC;}\n.Bisque{background-color:#FFE4C4;}\n.Snow{background-color:#FFFAFA;}\n/* darker ones*/\n.PowderBlue{background-color:#B0E0E6}\n.Aquamarine{background-color:#7FFFD4;}\n.PaleGreen{background-color:#98FB98;}\n.Pink{background-color:#FFC0CB;}\n.LightSalmon{background-color:#FFA07A;}\n.Lime{background-color:#bfef45;}\n.Mint{background-color:#aaffc3;}\n.Beige{background-color:#fffac8;}\n.Appricot{background-color:#ffd8b1;}"},"$:/plugins/kookma/slider/toggle-slider-theme":{"title":"$:/plugins/kookma/slider/toggle-slider-theme","created":"20181028155841125","creator":"Mohammad","modified":"20190614025740912","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"<$reveal type=\"nomatch\" state=\"$:/plugins/kookma/slider/state/slider-theme\" text=\"dark\">\n  <$button style=\"fill:#8058A5;color:#8058A5;\"\n    tooltip=\"Set theme to dark\"\n  > {{$:/core/images/palette}}\n    <$action-setfield $tiddler=\"$:/plugins/kookma/slider/state/slider-theme\" text=\"dark\"/>\n    <$action-setfield $tiddler=\"$:/plugins/kookma/slider/stylesheet/theme/dark\"  tags=\"$:/tags/Stylesheet\"/>\n    <$action-setfield $tiddler=\"$:/plugins/kookma/slider/stylesheet/theme/light\" tags=\"\"/>\n  \n\n<$reveal type=\"nomatch\" state=\"$:/plugins/kookma/slider/state/slider-theme\" text=\"light\">\n  <$button style=\"fill:#8058A5;color:#8058A5;\"\n    tooltip=\"Set theme to light\"\n  > {{$:/core/images/palette}}\n    <$action-setfield $tiddler=\"$:/plugins/kookma/slider/state/slider-theme\" text=\"light\"/>\n    <$action-setfield $tiddler=\"$:/plugins/kookma/slider/stylesheet/theme/light\"  tags=\"$:/tags/Stylesheet\"/>\n    <$action-setfield $tiddler=\"$:/plugins/kookma/slider/stylesheet/theme/dark\" tags=\"\"/>\n  \n"},"$:/plugins/kookma/slider/viewtemplate/navigation-buttons":{"title":"$:/plugins/kookma/slider/viewtemplate/navigation-buttons","created":"20180726134237633","creator":"Mohammad","list-after":"$:/core/ui/ViewTemplate/body","modified":"20190614033600285","modifier":"Mohammad","tags":"$:/tags/ViewTemplate","type":"text/vnd.tiddlywiki","text":"\\define no-more-slides()\n\n\\end\n\n\\define previous-slide()\n    <$list filter=\"[tag!tag[slideFooter]before]\" \n           emptyMessage=<> >\n      <$button class=\"tc-btn-invisible buttons-no-outline\" \n        to={{!!title}} set=\"$:/plugins/kookma/slider/state\" \n        setTo={{!!title}} tooltip={{!!title}} >\n        {{$:/plugins/kookma/slider/images/slide-previous.svg}}\n      \n    \n\\end\n\n\\define next-slide()\n    <$list filter=\"[tag!tag[slideFooter]after]\" emptyMessage=<>>\n      <$button class=\"tc-btn-invisible buttons-no-outline\" to={{!!title}} \n        set=\"$:/plugins/kookma/slider/state\" \n        setTo={{!!title}} \n        tooltip={{!!title}} >\n        {{$:/plugins/kookma/slider/images/slide-next.svg}}\n      \n    \n\\end\n\n\\define slide-list()\n
    \n <$button class=\"tc-btn-invisible buttons-no-outline\">{{$:/plugins/kookma/slider/images/slide-list.svg}}\n
    \n <$macrocall $name=\"trackable-links\" tag=<> />\n
    \n
    \n\\end\n\n\n\\define show-slidenumber()\n<$count filter='[tag!tag[slideFooter]allbefore:include]'/>\n\\end\n\n\n<$set name=\"parent\" value={{$:/plugins/kookma/slider/state!!current-trail}}>\n\n<$list filter=\"[all[current]tag!tag[slideFooter]]\"> \n\n
    \n \n \n
    \n <>\n
    \n
    \n\n\n\n\n\n"},"$:/plugins/kookma/slider/viewtemplate/slider-dashboard":{"title":"$:/plugins/kookma/slider/viewtemplate/slider-dashboard","caption":"Trail Template","created":"20180527182942488","creator":"Mohammad","modified":"20190614040139833","modifier":"Mohammad","tags":"$:/tags/ViewTemplate","type":"text/vnd.tiddlywiki","text":"\\define draggable-list-of-slides()\n
    \n

    List of slides

    \n

    Drag and drop your slides (tiddlers) here to add them to this trail or reorder the list

    \n
      \n <>\n
    \n
    \n\\end\n\n\\define show-slider-header()\n
    \n Trail caption: <$text text={{!!caption}}/>
    \n Trail tag: <$text text={{!!title}}/>
    \n Number of slides: <$count filter=\"[tag!tag[slideFooter]]\">
    \n
    \n\\end \n\n\\define show-slider-footer()\n
    \n Slide footer:\n <$list filter=\"[title[$(currentTiddler)$]addsuffix[ - Footer]] +[has[title]]\" \n variable=\"slide-footer\" \n emptyMessage=<>\n > \n <$link to=<> tooltip=\"Click to edit\"> <> \n <$transclude tiddler=<> field=\"text\" mode=\"block\"/> \n \n
    \n\\end\n\n\\define show-slider-buttons()\n
    \n <>\n
    \n <$button style=\"fill:#8058A5;\"\n set=\"$:/plugins/kookma/slider/state!!current-trail\"\n setTo={{!!title}}\n >\n {{$:/plugins/kookma/slider/images/slide.svg}} Set for presentation\n \n
    \n\\end\n\n\n<$list filter=\"[all[current]tag[trail]]\">\n <>
    \n <>\n <>
    \n <>\n\n"},"$:/plugins/kookma/slider/readme":{"title":"$:/plugins/kookma/slider/readme","created":"20181101134242465","creator":"Mohammad","modified":"20190614115410022","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"!! What ia slider plugin?\nSlider is a small plugin to create an ordered set of tiddlers also called ''Trail''.\n\nA trail can be used to create a sequence of selected contents like step by step tutorial, guided help, lessons and similar.\n\nThe slider plugin user interface contains three sections\n\n# A sidebar tab called ''Trails'' to manage trails\n# A ''dashboard'' for each trail (where trail structure is managed)\n# Tiddlers in a trail, also called ''slides''\n\n!! How to create a trail\nFrom the sibebar tab ''Trails'' click on the ''Create new trail'' button. In the newly opened tiddler:\n\n# Enter a short name for //title//\n#* This title is used as a parent //tag// for all slides in the trail\n# Enter a meaningful caption to describe the subject of trail\n#* Caption is displayed in ''Trails'' sidebar tab, so it used to find and recognize the trail\n# Save the tiddler\n#* After saving the dashboard will be appeared\n#* Using dashboard, manage the trail\n\n!! Add slides to trail\nSlides (tiddlers) can be added to a specified trail in several ways including:\n\n# By clicking on the `New slide` button on the trail dashboard\n# By dragging and droping a tiddler into the `List of slides` on the trail dashboard\n# By opening the `sidebar / Trails` tab and then clicking on the `Add slide to ...` button\n# By creating new tiddler and tagging with the specified trail title\n# By tagging an exisiting tiddler with the specified trail title\n\n!! Create slide footer \n* The slider footer can be used to add a text to all slides in a trail.\n* The slider footer is an ordinary tiddler and can be opned and edited\n* The slider footer has the same title of trail with `-Footer` prefix and tagged with `slideFooter`\n* The footer can be used for date stamp, author and institution name or any other information you like.\n* The footer can be formatted for color, size, font and etc. It can accept all the standard markup.\n\n!! Navigate through slides\n# Set the desired trail as the active trail by opening it and clicking on `Set for presentation`\n# From the //List of slides// click on the first slide or any slide you like to start from\n# One the footer of newly opened slide, click on the next button to navigate to the next slide\n# You can click on the slide-list button to open a local window and see the list of all slides, then you can click on any slide you like and jump to that slide\n# The slide footer also has a //previous// button which lets to navigate to previous slide in the list\n\n\n!! Demo\nThere few trails for demonstration on\nhttps://kookma.github.io/slider/\n\n!! Installation\nSimply drag and drop the below ling into your wiki\n\n* $:/plugins/kookma/slider"},"$:/plugins/kookma/slider/release":{"title":"$:/plugins/kookma/slider/release","created":"20180905085705897","creator":"Mohammad","modified":"20190614141853476","modifier":"Mohammad","type":"text/vnd.tiddlywiki","version":"1.2","text":"!! Revision 1.1 \n<<<\n* Date: [13th Jun 2019]\n* Slide view mode has been removed\n* sliderTiddler renamed to sliderDashboard\n* Minor issues fixed\n* Plugin packged using Thirdflow\n<<<\n\n!! Revision 1.0.1 \n<<<\n* Date: [9th Nov 2018]\n* Added background color class\n* Customized buttons in slide footer\n<<<\n\n!! Revision 1.0.0 \n<<<\n* Date: [1th Nov 2018]\n* Initial release\n<<<"},"$:/plugins/kookma/slider/draggable-template":{"title":"$:/plugins/kookma/slider/draggable-template","created":"20180926153157940","creator":"Mohammad","modified":"20190614025201318","modifier":"Mohammad","type":"text/vnd.tiddlywiki","text":"
  • <$link to={{!!title}}><$text text={{!!title}}/>
  • "},"$:/plugins/kookma/slider/images/slide-list.svg":{"title":"$:/plugins/kookma/slider/images/slide-list.svg","created":"20180810102339886","creator":"Mohammad","modified":"20190613151047194","modifier":"Mohammad","type":"image/svg+xml","text":"\n\n\n\n\n\n\n\n"},"$:/plugins/kookma/slider/images/slide-next.svg":{"title":"$:/plugins/kookma/slider/images/slide-next.svg","created":"20180810102349659","creator":"Mohammad","modified":"20190613151047192","modifier":"Mohammad","type":"image/svg+xml","text":"\n\n\n\n"},"$:/plugins/kookma/slider/images/slide-previous.svg":{"title":"$:/plugins/kookma/slider/images/slide-previous.svg","created":"20180810102356807","creator":"Mohammad","modified":"20190613151047189","modifier":"Mohammad","type":"image/svg+xml","text":"\n\n\n\n\n\n\n"},"$:/plugins/kookma/slider/images/stop.svg":{"title":"$:/plugins/kookma/slider/images/stop.svg","created":"20180810102403934","creator":"Mohammad","modified":"20190613151047185","modifier":"Mohammad","type":"image/svg+xml","text":"\n\n\n\n\n"},"$:/plugins/kookma/slider/images/slide.svg":{"title":"$:/plugins/kookma/slider/images/slide.svg","caption":"Slider Icon","created":"20150613112427442","creator":"Birthe","modified":"20190614122145385","modifier":"Mohammad","type":"text/vnd.tiddlywiki","text":"\n\n\n"},"$:/plugins/kookma/slider/license":{"title":"$:/plugins/kookma/slider/license","created":"20181101134530634","creator":"Mohammad","modified":"20190613151047182","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"slider distributed under an MIT license.\n\nCopyright (c) 2018-2019 [[Mohammad Rahmani|https://github.com/kookma]]\n\n<<<\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n<<<"},"$:/plugins/kookma/slider/macro/modified-toc":{"title":"$:/plugins/kookma/slider/macro/modified-toc","created":"20181103191736109","creator":"Mohammad","modified":"20190614034620798","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"\\define toc-se(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" excluded=\"\"\"$exclude$ -[[$tag$]]\"\"\" path=\"\"\"$path$/$tag$\"\"\">\n
      \n <$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$] -[[$tag$]] $exclude$\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<> >\n <$macrocall $name=toc-unlinked-selective-expandable-body tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\" exclude=<> path=<> >\n \n \n
    \n\n\\end\n\n\n"},"$:/plugins/kookma/slider/macro/new-slide-footer":{"title":"$:/plugins/kookma/slider/macro/new-slide-footer","caption":"Create a new slide footer","created":"20181004194512056","creator":"Mohammad","modified":"20190613151047178","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define newSlideFooter(parent:\"\", btn-caption:\"New slide footer\", color:\"#8058A5\") \n<$button style=\"color:$color$; fill:$color$; margin-bottom:5px;\">\n{{$:/core/images/new-button}} $btn-caption$\n\n<$action-sendmessage $message=\"tm-new-tiddler\"\n title=\"\"\"$parent$ - Footer\"\"\"\n tags=\"slideFooter [[$parent$]]\"\n/>\n\n\\end"},"$:/plugins/kookma/slider/macro/new-slide-here":{"title":"$:/plugins/kookma/slider/macro/new-slide-here","caption":"Create a new slide here","created":"20180504084439629","creator":"Mohammad","modified":"20190613151047175","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define content()\nfill in the contents ....\n\\end\n\n\\define newSlide(param:\"\", btn-caption:\"New slide\", color:\"#8058A5\") \n<$button style=\"color:$color$; fill:$color$; margin-bottom:5px;\">\n{{$:/core/images/new-button}} $btn-caption$\n\n<$action-sendmessage $message=\"tm-new-tiddler\"\n title=\"New slide...\"\n text=<>\n tags=\"[[$param$]]\"\n/>\n\n\\end"},"$:/plugins/kookma/slider/macro/trackable-links":{"title":"$:/plugins/kookma/slider/macro/trackable-links","created":"20180729154346545","creator":"Mohammad","modified":"20190613151047171","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define trackable-links(tag:\"\")\n
      \n <$list filter=\"[tag[$tag$]!tag[slideFooter]]\" variable=\"myTid\">\n
    1. \n <$button class=\"tc-btn-invisible\" style=\"text-align: left;\"\n set=\"$:/plugins/kookma/slider/state\" \n setTo=<>\n >\n <$view tiddler=<> field=\"title\"/>\n <$action-navigate $to=<>/>\n \n
    2. \n \n
    \n\\end\n"},"$:/plugins/kookma/slider/manager/trails-sidebar":{"title":"$:/plugins/kookma/slider/manager/trails-sidebar","caption":"Trails","created":"20180527184455440","creator":"Mohammad","modified":"20190614085255628","modifier":"Mohammad","tags":"$:/tags/SideBar","type":"text/vnd.tiddlywiki","text":"\\define btn-label() Add slide to $(current-trail)$\n\n{{$:/plugins/kookma/slider/manager/new-trail}}{{$:/plugins/kookma/slider/toggle-slider-theme}}\n<$set name=\"current-trail\" value={{$:/plugins/kookma/slider/state!!current-trail}}>\n <$macrocall $name=\"newSlide\" \n param=<>\n btn-caption=<> />\n\n{{$:/plugins/kookma/slider/manager/trail-list}}\n\n"},"$:/plugins/kookma/slider/manager/new-trail":{"title":"$:/plugins/kookma/slider/manager/new-trail","caption":"Create new slider","created":"20180527185543611","creator":"Mohammad","modified":"20190613154626393","modifier":"Mohammad","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"<$button tooltip=\"Create new trail\" class=\"tc-btn-visible\" style=\"fill:#8058A5;color:#8058A5;\">\n<$action-sendmessage $message=\"tm-new-tiddler\" caption=\"Set the caption ...\" tags=\"trail\"/>\n{{$:/plugins/kookma/slider/images/slide.svg}}\n"},"$:/plugins/kookma/slider/manager/trail-list":{"title":"$:/plugins/kookma/slider/manager/trail-list","created":"20181103192144604","creator":"Mohammad","modified":"20190614090728387","modifier":"Mohammad","tags":"","type":"text/vnd.tiddlywiki","text":"<$importvariables filter=\"$:/plugins/kookma/slider/macro/modified-toc\">\n<$scrollable class='slider-trail-list'>\n
    \n <>\n
    \n\n\n\n\n"},"$:/plugins/kookma/slider/state":{"title":"$:/plugins/kookma/slider/state","created":"20181025210823564","creator":"Mohammad","current-trail":"Sl-Tutorial","modified":"20190614160920646","modifier":"Mohammad","type":"text/vnd.tiddlywiki","text":"Trails Sidebar Tab"},"$:/plugins/kookma/slider/state/slide-height":{"title":"$:/plugins/kookma/slider/state/slide-height","created":"20181028093955919","creator":"Mohammad","modified":"20190614063856943","modifier":"Mohammad","story-view":"classic","type":"text/vnd.tiddlywiki","text":"normal-height"},"$:/plugins/kookma/slider/state/slider-theme":{"title":"$:/plugins/kookma/slider/state/slider-theme","created":"20181028160441199","creator":"Mohammad","modified":"20190614122154059","modifier":"Mohammad","type":"text/vnd.tiddlywiki","text":"light"}}} \ No newline at end of file diff --git a/tiddlers/$__plugins_kookma_slider.json.meta b/tiddlers/$__plugins_kookma_slider.json.meta new file mode 100644 index 0000000..9b319a2 --- /dev/null +++ b/tiddlers/$__plugins_kookma_slider.json.meta @@ -0,0 +1,11 @@ +author: Mohammad rahmani +core-version: > = 5.1.19 +created: 20190613141603288 +description: Slider: Create trails, walk through, guided help, sequence, doubly linked contents +modified: 20190704155012348 +plugin-type: plugin +source: https://github.com/kookma/slider +tags: +title: $:/plugins/kookma/slider +type: application/json +version: 1.1 \ No newline at end of file diff --git a/tiddlers/$__plugins_kookma_slider_state.tid b/tiddlers/$__plugins_kookma_slider_state.tid new file mode 100644 index 0000000..ec5a088 --- /dev/null +++ b/tiddlers/$__plugins_kookma_slider_state.tid @@ -0,0 +1,9 @@ +created: 20181025210823564 +creator: Mohammad +current-trail: svg-image +modified: 20190704155012343 +modifier: Mohammad +title: $:/plugins/kookma/slider/state +type: text/vnd.tiddlywiki + +Svg Images as Background \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.json similarity index 96% rename from tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.json index de06d34..70f02ed 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307562 -dependents: -description: CodeMirror AddOn: Close Brackets -list: readme -modified: 20190216180307562 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-closebrackets -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/config/codemirror/autoCloseBrackets": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.json.meta new file mode 100644 index 0000000..4dc2192 --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-closebrackets.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012326 +dependents: +description: CodeMirror AddOn: Close Brackets +list: readme +modified: 20190704155012326 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-closebrackets +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-closetag.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-closetag.json similarity index 97% rename from tiddlers/$__plugins_tiddlywiki_codemirror-closetag.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-closetag.json index 5e34a13..e64c5f1 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-closetag.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-closetag.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307557 -dependents: -description: CodeMirror AddOn: Auto-Close Tags -list: readme -modified: 20190216180307557 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-closetag -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/config/codemirror/autoCloseTags": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-closetag.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-closetag.json.meta new file mode 100644 index 0000000..5609b1d --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-closetag.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012322 +dependents: +description: CodeMirror AddOn: Auto-Close Tags +list: readme +modified: 20190704155012322 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-closetag +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.json similarity index 99% rename from tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.json index c80493f..6f18689 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307551 -dependents: -description: CodeMirror Mode: CSS Highlighting -list: readme -modified: 20190216180307551 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-mode-css -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/codemirror/mode/css/css.js": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.json.meta new file mode 100644 index 0000000..04c5f29 --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-css.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012316 +dependents: +description: CodeMirror Mode: CSS Highlighting +list: readme +modified: 20190704155012316 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-mode-css +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.json similarity index 94% rename from tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.json index f5317bb..eea9b19 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307546 -dependents: -description: CodeMirror Mode: Embedded-HTML Highlighting -list: readme -modified: 20190216180307546 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-mode-htmlembedded -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/codemirror/addon/mode/multiplex.js": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.json.meta new file mode 100644 index 0000000..9a2043e --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlembedded.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012311 +dependents: +description: CodeMirror Mode: Embedded-HTML Highlighting +list: readme +modified: 20190704155012311 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-mode-htmlembedded +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.json similarity index 93% rename from tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.json index 7f93dd4..8609444 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307540 -dependents: -description: CodeMirror Mode: HTML Highlighting -list: readme -modified: 20190216180307541 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-mode-htmlmixed -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/codemirror/mode/htmlmixed/htmlmixed.js": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.json.meta new file mode 100644 index 0000000..8bb59f2 --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-htmlmixed.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012306 +dependents: +description: CodeMirror Mode: HTML Highlighting +list: readme +modified: 20190704155012306 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-mode-htmlmixed +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.json similarity index 98% rename from tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.json index 7b32396..05c88c1 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307534 -dependents: -description: CodeMirror Mode: Javascript Highlighting -list: readme -modified: 20190216180307534 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-mode-javascript -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.json.meta new file mode 100644 index 0000000..58d8fa8 --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-javascript.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012301 +dependents: +description: CodeMirror Mode: Javascript Highlighting +list: readme +modified: 20190704155012301 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-mode-javascript +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.json similarity index 98% rename from tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.json index a7959b3..b4c2ea9 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307529 -dependents: -description: CodeMirror Mode: Markdown Highlighting -list: readme -modified: 20190216180307529 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-mode-markdown -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/codemirror/mode/markdown/markdown.js": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.json.meta new file mode 100644 index 0000000..a54b986 --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-markdown.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012295 +dependents: +description: CodeMirror Mode: Markdown Highlighting +list: readme +modified: 20190704155012295 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-mode-markdown +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.json similarity index 96% rename from tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.json index 5575ca0..d422d85 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307523 -dependents: -description: CodeMirror Mode: XML Highlighting -list: readme -modified: 20190216180307523 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-mode-xml -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.json.meta new file mode 100644 index 0000000..e7d9c22 --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-mode-xml.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012289 +dependents: +description: CodeMirror Mode: XML Highlighting +list: readme +modified: 20190704155012289 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-mode-xml +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.tid b/tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.json similarity index 98% rename from tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.json index c848386..3dce0b4 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307518 -dependents: -description: CodeMirror AddOn: Search and Replace -list: readme -modified: 20190216180307518 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror-search-replace -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/codemirror/addon/search/search.js": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.json.meta new file mode 100644 index 0000000..6de434a --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror-search-replace.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012284 +dependents: +description: CodeMirror AddOn: Search and Replace +list: readme +modified: 20190704155012284 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror-search-replace +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror.tid b/tiddlers/$__plugins_tiddlywiki_codemirror.json similarity index 99% rename from tiddlers/$__plugins_tiddlywiki_codemirror.tid rename to tiddlers/$__plugins_tiddlywiki_codemirror.json index bac02ba..d7d1c60 100644 --- a/tiddlers/$__plugins_tiddlywiki_codemirror.tid +++ b/tiddlers/$__plugins_tiddlywiki_codemirror.json @@ -1,14 +1,3 @@ -author: JeremyRuston -created: 20190216180307575 -dependents: -description: CodeMirror _Editor -list: readme usage keyboard license -modified: 20190216180307575 -plugin-type: plugin -title: $:/plugins/tiddlywiki/codemirror -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/config/EditorTypeMappings/application/javascript": { diff --git a/tiddlers/$__plugins_tiddlywiki_codemirror.json.meta b/tiddlers/$__plugins_tiddlywiki_codemirror.json.meta new file mode 100644 index 0000000..0b6bf55 --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_codemirror.json.meta @@ -0,0 +1,10 @@ +author: JeremyRuston +created: 20190704155012338 +dependents: +description: CodeMirror _Editor +list: readme usage keyboard license +modified: 20190704155012338 +plugin-type: plugin +title: $:/plugins/tiddlywiki/codemirror +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_highlight_highlight.js b/tiddlers/$__plugins_tiddlywiki_highlight_highlight.js deleted file mode 100644 index b6d4421..0000000 --- a/tiddlers/$__plugins_tiddlywiki_highlight_highlight.js +++ /dev/null @@ -1,4 +0,0 @@ -var hljs = require("$:/plugins/tiddlywiki/highlight/highlight.js"); -/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */ -!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&").replace(//g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){s+=""}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"
    ":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="
    ",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("julia",function(e){var r={keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},t="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",a={l:t,k:r,i:/<\//},n={cN:"number",b:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,r:0},o={cN:"string",b:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i={cN:"subst",b:/\$\(/,e:/\)/,k:r},l={cN:"variable",b:"\\$"+t},c={cN:"string",c:[e.BE,i,l],v:[{b:/\w*"""/,e:/"""\w*/,r:10},{b:/\w*"/,e:/"\w*/}]},s={cN:"string",c:[e.BE,i,l],b:"`",e:"`"},d={cN:"meta",b:"@"+t},u={cN:"comment",v:[{b:"#=",e:"=#",r:10},{b:"#",e:"$"}]};return a.c=[n,o,c,s,d,u,e.HCM,{cN:"keyword",b:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{b:/<:/}],i.c=a.c,a});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[t],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[t],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("scilab",function(e){var s=[e.CNM,{cN:"string",b:"'|\"",e:"'|\"",c:[e.BE,{b:"''"}]}];return{aliases:["sci"],l:/%?\w+/,k:{keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},i:'("|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"}]},{b:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",e:"",r:0},{b:"\\[",e:"\\]'*[\\.']*",r:0,c:s},e.C("//","$")].concat(s)}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("tex",function(c){var e={cN:"tag",b:/\\/,r:0,c:[{cN:"name",v:[{b:/[a-zA-Zа-яА-я]+[*]?/},{b:/[^a-zA-Zа-яА-я0-9]/}],starts:{eW:!0,r:0,c:[{cN:"string",v:[{b:/\[/,e:/\]/},{b:/\{/,e:/\}/}]},{b:/\s*=\s*/,eW:!0,r:0,c:[{cN:"number",b:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{c:[e,{cN:"formula",c:[e],r:0,v:[{b:/\$\$/,e:/\$\$/},{b:/\$/,e:/\$/}]},c.C("%","$",{r:0})]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("matlab",function(e){var a=[e.CNM,{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]}],s={r:0,c:[{b:/'['\.]*/}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}]}]},{b:/[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,rB:!0,r:0,c:[{b:/[a-zA-Z_][a-zA-Z_0-9]*/,r:0},s.c[0]]},{b:"\\[",e:"\\]",c:a,r:0,starts:s},{b:"\\{",e:/}/,c:a,r:0,starts:s},{b:/\)/,r:0,starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")].concat(a)}});hljs.registerLanguage("excel",function(E){return{aliases:["xlsx","xls"],cI:!0,l:/[a-zA-Z][\w\.]*/,k:{built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF|0 IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},c:[{b:/^=/,e:/[^=]/,rE:!0,i:/=/,r:10},{cN:"symbol",b:/\b[A-Z]{1,2}\d+\b/,e:/[^\d]/,eE:!0,r:0},{cN:"symbol",b:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,r:0},E.BE,E.QSM,{cN:"number",b:E.NR+"(%)?",r:0},E.C(/\bN\(/,/\)/,{eB:!0,eE:!0,i:/\n/})]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[c]},{b:/(fr|rf|f)"/,e:/"/,c:[c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("dos",function(e){var r=e.C(/^\s*@?rem\b/,/$/,{r:10}),t={cN:"symbol",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0};return{aliases:["bat","cmd"],cI:!0,i:/\/\*/,k:{keyword:"if else goto for in do call exit not exist errorlevel defined equ neq lss leq gtr geq",built_in:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux shift cd dir echo setlocal endlocal set pause copy append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol ping net ipconfig taskkill xcopy ren del"},c:[{cN:"variable",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:"function",b:t.b,e:"goto:eof",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),r]},{cN:"number",b:"\\b\\d+",r:0},r]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%/}],c:[i]});return{aliases:["ps"],l:/-?[A-z\.\-]+/,cI:!0,k:{keyword:"if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch",built_in:"Add-Computer Add-Content Add-History Add-JobTrigger Add-Member Add-PSSnapin Add-Type Checkpoint-Computer Clear-Content Clear-EventLog Clear-History Clear-Host Clear-Item Clear-ItemProperty Clear-Variable Compare-Object Complete-Transaction Connect-PSSession Connect-WSMan Convert-Path ConvertFrom-Csv ConvertFrom-Json ConvertFrom-SecureString ConvertFrom-StringData ConvertTo-Csv ConvertTo-Html ConvertTo-Json ConvertTo-SecureString ConvertTo-Xml Copy-Item Copy-ItemProperty Debug-Process Disable-ComputerRestore Disable-JobTrigger Disable-PSBreakpoint Disable-PSRemoting Disable-PSSessionConfiguration Disable-WSManCredSSP Disconnect-PSSession Disconnect-WSMan Disable-ScheduledJob Enable-ComputerRestore Enable-JobTrigger Enable-PSBreakpoint Enable-PSRemoting Enable-PSSessionConfiguration Enable-ScheduledJob Enable-WSManCredSSP Enter-PSSession Exit-PSSession Export-Alias Export-Clixml Export-Console Export-Counter Export-Csv Export-FormatData Export-ModuleMember Export-PSSession ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-ComputerRestorePoint Get-Content Get-ControlPanelItem Get-Counter Get-Credential Get-Culture Get-Date Get-Event Get-EventLog Get-EventSubscriber Get-ExecutionPolicy Get-FormatData Get-Host Get-HotFix Get-Help Get-History Get-IseSnippet Get-Item Get-ItemProperty Get-Job Get-JobTrigger Get-Location Get-Member Get-Module Get-PfxCertificate Get-Process Get-PSBreakpoint Get-PSCallStack Get-PSDrive Get-PSProvider Get-PSSession Get-PSSessionConfiguration Get-PSSnapin Get-Random Get-ScheduledJob Get-ScheduledJobOption Get-Service Get-TraceSource Get-Transaction Get-TypeData Get-UICulture Get-Unique Get-Variable Get-Verb Get-WinEvent Get-WmiObject Get-WSManCredSSP Get-WSManInstance Group-Object Import-Alias Import-Clixml Import-Counter Import-Csv Import-IseSnippet Import-LocalizedData Import-PSSession Import-Module Invoke-AsWorkflow Invoke-Command Invoke-Expression Invoke-History Invoke-Item Invoke-RestMethod Invoke-WebRequest Invoke-WmiMethod Invoke-WSManAction Join-Path Limit-EventLog Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Event New-EventLog New-IseSnippet New-Item New-ItemProperty New-JobTrigger New-Object New-Module New-ModuleManifest New-PSDrive New-PSSession New-PSSessionConfigurationFile New-PSSessionOption New-PSTransportOption New-PSWorkflowExecutionOption New-PSWorkflowSession New-ScheduledJobOption New-Service New-TimeSpan New-Variable New-WebServiceProxy New-WinEvent New-WSManInstance New-WSManSessionOption Out-Default Out-File Out-GridView Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Receive-Job Register-EngineEvent Register-ObjectEvent Register-PSSessionConfiguration Register-ScheduledJob Register-WmiEvent Remove-Computer Remove-Event Remove-EventLog Remove-Item Remove-ItemProperty Remove-Job Remove-JobTrigger Remove-Module Remove-PSBreakpoint Remove-PSDrive Remove-PSSession Remove-PSSnapin Remove-TypeData Remove-Variable Remove-WmiObject Remove-WSManInstance Rename-Computer Rename-Item Rename-ItemProperty Reset-ComputerMachinePassword Resolve-Path Restart-Computer Restart-Service Restore-Computer Resume-Job Resume-Service Save-Help Select-Object Select-String Select-Xml Send-MailMessage Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-JobTrigger Set-Location Set-PSBreakpoint Set-PSDebug Set-PSSessionConfiguration Set-ScheduledJob Set-ScheduledJobOption Set-Service Set-StrictMode Set-TraceSource Set-Variable Set-WmiInstance Set-WSManInstance Set-WSManQuickConfig Show-Command Show-ControlPanelItem Show-EventLog Sort-Object Split-Path Start-Job Start-Process Start-Service Start-Sleep Start-Transaction Start-Transcript Stop-Computer Stop-Job Stop-Process Stop-Service Stop-Transcript Suspend-Job Suspend-Service Tee-Object Test-ComputerSecureChannel Test-Connection Test-ModuleManifest Test-Path Test-PSSessionConfigurationFile Trace-Command Unblock-File Undo-Transaction Unregister-Event Unregister-PSSessionConfiguration Unregister-ScheduledJob Update-FormatData Update-Help Update-List Update-TypeData Use-Transaction Wait-Event Wait-Job Wait-Process Where-Object Write-Debug Write-Error Write-EventLog Write-Host Write-Output Write-Progress Write-Verbose Write-Warning Add-MDTPersistentDrive Disable-MDTMonitorService Enable-MDTMonitorService Get-MDTDeploymentShareStatistics Get-MDTMonitorData Get-MDTOperatingSystemCatalog Get-MDTPersistentDrive Import-MDTApplication Import-MDTDriver Import-MDTOperatingSystem Import-MDTPackage Import-MDTTaskSequence New-MDTDatabase Remove-MDTMonitorData Remove-MDTPersistentDrive Restore-MDTPersistentDrive Set-MDTMonitorData Test-MDTDeploymentShare Test-MDTMonitorData Update-MDTDatabaseSchema Update-MDTDeploymentShare Update-MDTLinkedDS Update-MDTMedia Update-MDTMedia Add-VamtProductKey Export-VamtData Find-VamtManagedMachine Get-VamtConfirmationId Get-VamtProduct Get-VamtProductKey Import-VamtData Initialize-VamtData Install-VamtConfirmationId Install-VamtProductActivation Install-VamtProductKey Update-VamtProduct",nomarkup:"-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace"},c:[t,e.NM,n,a,r,o,s]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("fortran",function(e){var t={cN:"params",b:"\\(",e:"\\)"},n={literal:".false. .true. .and. .or. .not. .le. .eq. .ge. .gt. .lt.",keyword:"access action advance allocatable allocate apostrophe assign assignment associate asynchronous backspace bind blank blockdata call case character class close common complex contains continue cycle data deallocate decimal delim default dimension direct do dowhile double doubleprecision else elseif elsewhere encoding end endassociate endblockdata enddo endfile endforall endfunction endif endinterface endmodule endprocedure endprogram endselect endsubroutine endtype endwhere entry eor equivalence err errmsg exist exit external final file flush fmt forall form format formatted function go goto id if implicit in include inout integer inquire intent interface intrinsic iomsg iolength iostat kind len logical module named namelist nextrec nml none nullify number only open opened operator optional out pad parameter pass nopass pause pending pointer pos position precision print private program protected public quote read readwrite real rec recl recursive result return rewind save select selectcase selecttype sequential stat status stop stream subroutine target then to type unformatted unit use value volatile wait where while write procedure elemental pure sequence import is null new_line block abstract delegate static reference round deferred decorate extends generic non_overridable enum endenum enumerator typealias submodule endsubmodule concurrent contiguous re im endblock non_intrinsic codimension contiguous impure critical endcritical lock unlock error sync all memory images",built_in:"abs achar acos acosd adjustl adjustr aimag aimax0 aimin0 aint ajmax0 ajmin0 akmax0 akmin0 all allocated alog alog10 amax0 amax1 amin0 amin1 amod anint any asin asind associated atan atan2 atan2d atand bitest bitl bitlr bitrl bjtest bit_size bktest break btest cabs ccos cdabs cdcos cdexp cdlog cdsin cdsqrt ceiling cexp char clog cmplx conjg cos cosd cosh count cpu_time cshift csin csqrt dabs dacos dacosd dasin dasind datan datan2 datan2d datand date date_and_time dble dcmplx dconjg dcos dcosd dcosh dcotan ddim dexp dfloat dflotk dfloti dflotj digits dim dimag dint dlog dlog10 dmax1 dmin1 dmod dnint dot_product dprod dreal dsign dsin dsind dsinh dsqrt dtan dtand dtanh eoshift epsilon errsns exp exponent float floati floatj floatk floor fraction free huge iabs iachar iand ibclr ibits ibset ichar idate idim idint idnint ieor ifix iiabs iiand iibclr iibits iibset iidim iidint iidnnt iieor iifix iint iior iiqint iiqnnt iishft iishftc iisign ilen imax0 imax1 imin0 imin1 imod index inint inot int int1 int2 int4 int8 iqint iqnint ior ishft ishftc isign isnan izext jiand jibclr jibits jibset jidim jidint jidnnt jieor jifix jint jior jiqint jiqnnt jishft jishftc jisign jmax0 jmax1 jmin0 jmin1 jmod jnint jnot jzext kiabs kiand kibclr kibits kibset kidim kidint kidnnt kieor kifix kind kint kior kishft kishftc kisign kmax0 kmax1 kmin0 kmin1 kmod knint knot kzext lbound leadz len len_trim lenlge lge lgt lle llt log log10 logical lshift malloc matmul max max0 max1 maxexponent maxloc maxval merge min min0 min1 minexponent minloc minval mod modulo mvbits nearest nint not nworkers number_of_processors pack popcnt poppar precision present product radix random random_number random_seed range real repeat reshape rrspacing rshift scale scan secnds selected_int_kind selected_real_kind set_exponent shape sign sin sind sinh size sizeof sngl snglq spacing spread sqrt sum system_clock tan tand tanh tiny transfer transpose trim ubound unpack verify command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc extends_type_of same_type_as selected_char_kind acosh asinh atanh c_sizeof bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf hypot log_gamma trailz gamma bge bgt ble blt dshiftl dshiftr maskl maskr shifta shiftl shiftr merge_bits iall iany iparity storage_size parity norm2 erfc erfc_scaled execute_command_line findloc ucobound lcobound num_images this_image image_index atomic_define atomic_ref rank is_contiguous cdabs cdcos cdexp cdlog cdsin cdsqrt cotan cotand dcmplx dconjg dcotan dcotand decode dimag dll_export dll_import doublecomplex dreal dvchk encode find flen getcharqq getcl getdat gettim hfix ibchng identifier imag int1 int2 int4 int8 int16 int32 int64 intc intrup invalop iostat_msg isha ishc ishl jfix lacfar locking locnear map nargs nbreak ndperr ndpexc offset ovefl peekcharqq precfill prompt qabs qacos qacosd qasin qasind qatan qatand qatan2 qcmplx qconjg qcos qcosd qcosh qdim qexp qext qextd qfloat qimag qlog qlog10 qmax1 qmin1 qmod qreal qsign qsin qsind qsinh qsqrt qtan qtand qtanh ran rand randu real32 real64 real128 rewrite segment setdat settim system timer undfl union val virtual volatile zabs zcos zexp zlog zsin zsqrt character_kinds integer_kinds logical_kinds real_kinds c_associated c_f_pointer c_f_procpointer c_funloc c_loc c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int128_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_least128_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_int_fast128_t c_intmax_t c_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_ptr c_funptr c_null_funptr c_null_ptr c_new_line c_null_char c_alert c_backspace c_form_feed c_carriage_return c_horizontal_tab c_vertical_tab atomic_int_kind atomic_logical_kind compiler_options compiler_version iostat_inquire_internal_unit lock_type stat_locked stat_locked_other_image stat_stopped_image stat_unlocked character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit"};return{cI:!0,aliases:["f90","f95"],k:n,i:/\/\*/,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program module submodule",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)[+-]?(?:\\.|\\d+\\.?)\\d*([de][+-]?\\d+)?(_[a-z\\d]+)?\\b",r:0}]}}); -exports.hljs = hljs; \ No newline at end of file diff --git a/tiddlers/$__plugins_tiddlywiki_highlight_highlight.js.meta b/tiddlers/$__plugins_tiddlywiki_highlight_highlight.js.meta deleted file mode 100644 index 326e294..0000000 --- a/tiddlers/$__plugins_tiddlywiki_highlight_highlight.js.meta +++ /dev/null @@ -1,7 +0,0 @@ -created: 20170820050848373 -creator: Mohammad -modified: 20190216180307511 -modifier: Mohammad -module-type: library -title: $:/plugins/tiddlywiki/highlight/highlight.js -type: application/javascript diff --git a/tiddlers/$__plugins_tiddlywiki_internals.tid b/tiddlers/$__plugins_tiddlywiki_internals.json similarity index 91% rename from tiddlers/$__plugins_tiddlywiki_internals.tid rename to tiddlers/$__plugins_tiddlywiki_internals.json index d4b955f..0e6be2c 100644 --- a/tiddlers/$__plugins_tiddlywiki_internals.tid +++ b/tiddlers/$__plugins_tiddlywiki_internals.json @@ -1,15 +1,3 @@ -author: JeremyRuston -core-version: >=5.0.0 -created: 20190216180307505 -dependents: -description: Tools for exploring the internals of TiddlyWiki -list: readme -modified: 20190216180307505 -plugin-type: plugin -title: $:/plugins/tiddlywiki/internals -type: application/json -version: 5.1.19 - { "tiddlers": { "$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree": { diff --git a/tiddlers/$__plugins_tiddlywiki_internals.json.meta b/tiddlers/$__plugins_tiddlywiki_internals.json.meta new file mode 100644 index 0000000..68be38c --- /dev/null +++ b/tiddlers/$__plugins_tiddlywiki_internals.json.meta @@ -0,0 +1,11 @@ +author: JeremyRuston +core-version: >=5.0.0 +created: 20190704155012278 +dependents: +description: Tools for exploring the internals of TiddlyWiki +list: readme +modified: 20190704155012278 +plugin-type: plugin +title: $:/plugins/tiddlywiki/internals +type: application/json +version: 5.1.19 \ No newline at end of file diff --git a/tiddlers/$__plugins_tobibeer_convertable.js.meta b/tiddlers/$__plugins_tobibeer_convertable.js.meta index 2aae8c1..bbffc70 100644 --- a/tiddlers/$__plugins_tobibeer_convertable.js.meta +++ b/tiddlers/$__plugins_tobibeer_convertable.js.meta @@ -1,7 +1,7 @@ created: 20160827150245119 creator: Tobias Beer -modified: 20190216180307499 +modified: 20190704155012273 modifier: Tobias Beer module-type: widget title: $:/plugins/tobibeer/convertable.js -type: application/javascript +type: application/javascript \ No newline at end of file diff --git a/tiddlers/$__plugins_tongerner_exploration.tid b/tiddlers/$__plugins_tongerner_exploration.tid deleted file mode 100644 index 8de7b08..0000000 --- a/tiddlers/$__plugins_tongerner_exploration.tid +++ /dev/null @@ -1,272 +0,0 @@ -author: TonGerner -core-version: >=5.1.14 -created: 20170510121444663 -description: Explore TiddlyWiki -list: readme help license -modified: 20190216180307494 -name: Exploration -plugin-type: plugin -source: http://tongerner.tiddlyspot.com/ -title: $:/plugins/tongerner/exploration -type: application/json -version: 0.0.5 - -{ - "tiddlers": { - "$:/plugins/tongerner/exploration/code1": { - "created": "20141001084921772", - "text": "!! [[Code1|$:/plugins/tongerner/exploration/code1]]\n<>\n\n<$macrocall $name=\"codefilter\" filter={{$:/temp/filter/code1}} state=\"code1\"/>\n", - "title": "$:/plugins/tongerner/exploration/code1", - "tags": "$:/tags/xcode", - "modifier": "TonGerner", - "modified": "20170515183246907", - "creator": "TonGerner", - "caption": "Code1" - }, - "$:/plugins/tongerner/exploration/code2": { - "created": "20141001084954911", - "text": "!! [[Code2|$:/plugins/tongerner/exploration/code2]]\n<>\n\n<$macrocall $name=\"codefilter\" filter={{$:/temp/filter/code2}} state=\"code2\"/>", - "title": "$:/plugins/tongerner/exploration/code2", - "tags": "$:/tags/xcode", - "modifier": "TonGerner", - "modified": "20170515183306625", - "creator": "TonGerner", - "caption": "Code2" - }, - "$:/plugins/tongerner/exploration/code3": { - "created": "20141001090009472", - "text": "!! [[Code3|$:/plugins/tongerner/exploration/code3]]\n<>\n\n<$macrocall $name=\"codefilter\" filter={{$:/temp/filter/code3}} state=\"code3\"/>", - "title": "$:/plugins/tongerner/exploration/code3", - "tags": "$:/tags/xcode", - "modifier": "TonGerner", - "modified": "20170515183325971", - "creator": "TonGerner", - "caption": "Code3" - }, - "$:/plugins/tongerner/exploration/code4": { - "created": "20141001091735182", - "text": "!! [[Code4|$:/plugins/tongerner/exploration/code4]]\n<>\n\n<$macrocall $name=\"codefilter\" filter={{$:/temp/filter/code4}} state=\"code4\"/>\n\n", - "title": "$:/plugins/tongerner/exploration/code4", - "tags": "$:/tags/xcode", - "modifier": "TonGerner", - "modified": "20170515183343481", - "creator": "TonGerner", - "caption": "Code4" - }, - "$:/plugins/tongerner/exploration/code5": { - "created": "20141031144255930", - "text": "!! [[Code5|$:/plugins/tongerner/exploration/code5]]\n<>\n\n<$macrocall $name=\"codefilter\" filter={{$:/temp/filter/code5}} state=\"code5\"/>", - "title": "$:/plugins/tongerner/exploration/code5", - "tags": "$:/tags/xcode", - "modifier": "TonGerner", - "modified": "20170515183400644", - "creator": "TonGerner", - "caption": "Code5" - }, - "$:/plugins/tongerner/exploration/exploration": { - "text": "!!!Exploration\n<<<\n''Note:''\n\nWhile working in a new window (in contrast to a standard tiddler):\n\n* The dropdown menu for filter selecting stays open and can only be closed by clicking the {{$:/core/images/down-arrow}} button\n* Buttons are not rendered correctly in this window!\n<<<\n\n<>", - "title": "$:/plugins/tongerner/exploration/exploration", - "modifier": "TonGerner", - "modified": "20180129135846140", - "creator": "TonGerner", - "created": "20140714115927407" - }, - "$:/plugins/tongerner/exploration/filter/button": { - "created": "20141020201907464", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/button", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510115725930", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/ui/Buttons]]", - "description": "Buttons", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/code-snippets": { - "created": "20140923160624756", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/code-snippets", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510115602548", - "filter": "[all[shadows]sort[title]]+[prefix[$:/snippets]]", - "description": "Code snippets", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/configuration": { - "created": "20141005142753238", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/configuration", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510115757279", - "filter": "[all[shadows]sort[title]]+[prefix[$:/config]]", - "description": "Configuration tiddlers", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/core-images": { - "created": "20141025095607867", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/core-images", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510115828073", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/images]]", - "description": "Core images", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/core-macro": { - "created": "20140923160458155", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/core-macro", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510115906713", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/macros]]", - "description": "Core macros", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/editor-toolbar-button": { - "created": "20161204175036367", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/editor-toolbar-button", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510115936526", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/ui/EditorToolbar]]", - "description": "Editor toolbar buttons", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/howto": { - "created": "20150708095918463", - "text": "Default the list of filters contains:\n\n# Buttons (`[all[shadows]sort[title]]+[prefix[$:/core/ui/Buttons]]`)\n# Code snippets (`[all[shadows]sort[title]]+[prefix[$:/snippets]]`)\n# Configuration tiddlers (`[all[shadows]sort[title]]+[prefix[$:/config]]`)\n# Core images (`[all[shadows]sort[title]]+[prefix[$:/core/images]]`)\n# Core macros (`[all[shadows]sort[title]]+[prefix[$:/core/macros]]`)\n# Editor toolbar buttons (`[all[shadows]sort[title]]+[prefix[$:/core/ui/EditorToolbar]]`)\n# Plugins (`[all[shadows]sort[title]]+[prefix[$:/plugins]]`)\n# Shadow ui tiddlers (`[all[shadows]sort[title]]+[prefix[$:/core/ui]]`)\n# Templates (`[all[shadows]sort[title]]+[prefix[$:/core/templates]]`)\n# Themes (`[all[shadows]sort[title]]+[prefix[$:/themes]]`)\n# Widgets (`[all[shadows]sort[title]]+[prefix[$:/core/modules/widgets]]`)\n\nTo add a filter to the list:\n\n* Create a tiddler tagged with `$:/tags/codeFilter`\n* Add a field `description` which contains the name of the filter to be seen in the list\n* Add a field `filter` which contains the filter you want to add to the list\n", - "title": "$:/plugins/tongerner/exploration/filter/howto", - "tags": "", - "modifier": "TonGerner", - "modified": "20170510120246304", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/module": { - "created": "20161107123227543", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/module", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510120004181", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/modules]]", - "description": "Modules", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/plugin": { - "created": "20170324171715717", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/plugin", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510120025880", - "filter": "[all[shadows]sort[title]]+[prefix[$:/plugins]]", - "description": "Plugins", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/shadow-ui": { - "created": "20140923154305534", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/shadow-ui", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510120058818", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/ui]]", - "description": "Shadow ui tiddlers", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/template": { - "created": "20170324172714778", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/template", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510120120217", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/templates]]", - "description": "Templates", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/theme": { - "created": "20140923160800468", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/theme", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510120139836", - "filter": "[all[shadows]sort[title]]+[prefix[$:/themes]]", - "description": "Themes", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/filter/widget": { - "created": "20141005142452796", - "text": "", - "title": "$:/plugins/tongerner/exploration/filter/widget", - "tags": "$:/tags/codeFilter", - "modifier": "TonGerner", - "modified": "20170510120156718", - "filter": "[all[shadows]sort[title]]+[prefix[$:/core/modules/widgets]]", - "description": "Widgets", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/icon": { - "created": "20170510133330608", - "text": "\n \n Layer 1\n \n \n \n \n \n", - "title": "$:/plugins/tongerner/exploration/icon", - "tags": "", - "modified": "20170510142457139" - }, - "$:/plugins/tongerner/exploration/macros/codefilter": { - "created": "20140728113918255", - "text": "\\define codefilter(filter, state)\n<$select tiddler='$:/state/$state$/list'>\n<$list filter=\"$filter$\">\n\n\n\n\n''Tiddler:'' <$tiddler tiddler={{$:/state/$state$/list}}>\n<$link to={{$:/state/$state$/list}}>\n\n<$view field=\"title\"/>\n\n''Source code:''\n
    <$view field=\"text\"/>
    \n
    \n''Renders as:''\n<$tiddler tiddler={{$:/state/$state$/list}}>\n<$transclude mode='block'/>\n\n
    \n''Fields:''\n<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n\\end\n\n```\n\\define codefilter(filter, state)\n<$select tiddler='$:/state/$state$/list'>\n<$list filter=\"$filter$\">\n\n\n\n\n''Tiddler:'' <$tiddler tiddler={{$:/state/$state$/list}}>\n<$link to={{$:/state/$state$/list}}>\n\n<$view field=\"title\"/>\n\n''Source code:''\n
    <$view field=\"text\"/>
    \n
    \n''Renders as:''\n<$tiddler tiddler={{$:/state/$state$/list}}>\n<$transclude mode='block'/>\n\n
    \n''Fields:''\n<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n\\end\n```\n", - "title": "$:/plugins/tongerner/exploration/macros/codefilter", - "tags": "$:/tags/Macro", - "modifier": "TonGerner", - "modified": "20170510115651240", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/macros/selectfilter": { - "created": "20141001090916471", - "text": "\\define selectfilter(filter)\n<$linkcatcher to=\"$:/temp/filter/$filter$\">\n\n''Select via a filter expression''\n\n\n\n
    \n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\">\n
    \n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/codeFilter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/>\n\n
    \n\n
    \n\n\n''Select tiddler''\n\\end\n\n```\n\\define selectfilter(filter)\n<$linkcatcher to=\"$:/temp/filter/$filter$\">\n\n''Select via a filter expression''\n\n\n\n
    \n<$reveal state=<> type=\"nomatch\" text=\"\" default=\"\">\n
    \n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/codeFilter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/>\n\n
    \n\n
    \n\n\n''Select tiddler''\n\\end\n```\n", - "title": "$:/plugins/tongerner/exploration/macros/selectfilter", - "tags": "$:/tags/Macro", - "modifier": "TonGerner", - "modified": "20170510115704502", - "creator": "TonGerner" - }, - "$:/plugins/tongerner/exploration/readme": { - "text": "It is always good to have a look at the code/~WikiText TW uses in the core tiddlers and learn from it.
    \nWith this plugin you can explore code/~WikiText core tiddlers like the UI shadow tiddlers, code snippets, macros, themes and so on.\n", - "title": "$:/plugins/tongerner/exploration/readme", - "tags": "", - "modified": "20170510131318278", - "created": "20170510120822070" - }, - "$:/plugins/tongerner/exploration/help": { - "text": "!! Help\n* To explore ~WikiText core tiddlers like the UI shadow tiddlers, code snippets, macros, themes and so on, select a filter and then the appropriate tiddler from the list\n* The five 'Code' tabs can contain/remember earlier results.\n* You can choose a filter from the list or add a filter manually\n** Default the list of filters contains <$count filter=\"[all[shadows+tiddlers]tag[$:/tags/codeFilter]]\"/> filters but you can add your own filters to the list, see [[How to add a filter to the list|$:/plugins/tongerner/exploration/filter/howto]]\n", - "title": "$:/plugins/tongerner/exploration/help", - "tags": "", - "modified": "20180129140008926", - "created": "20170510130615844", - "caption": "Help" - }, - "$:/plugins/tongerner/exploration/button": { - "text": "\\define explore-button(class)\n<$button tooltip=\"Explore in new window\" class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[prefix[yes]]\">\n<$action-sendmessage $message=\"tm-open-window\" $param=\"$:/plugins/tongerner/exploration/exploration\" height=\"700px\" width=\"500px\"/>\n{{$:/plugins/tongerner/exploration/icon}}\n\n<$list filter=\"[prefix[yes]]\">\n<$text text=\"explore\"/>\n\n\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/plugins/tongerner/exploration/exploration]]\" emptyMessage=<>>\n<>\n\n\n", - "title": "$:/plugins/tongerner/exploration/button", - "tags": "$:/tags/PageControls", - "modified": "20180129140111135", - "description": "Explore TW5", - "created": "20170510135141908", - "caption": "{{$:/plugins/tongerner/exploration/icon}} explore" - }, - "$:/plugins/tongerner/exploration/license": { - "text": "[[Exploration plugin|http://tongerner.tiddlyspot.com/#Exploration%20plugin]] © Ton Gerner — 2018\n\nMIT License: https://opensource.org/licenses/MIT\n", - "title": "$:/plugins/tongerner/exploration/license", - "tags": "", - "modified": "20180129132248064", - "created": "20180125141040743" - } - } -} \ No newline at end of file diff --git a/tiddlers/$__plugins_tongerner_timestamp-button.tid b/tiddlers/$__plugins_tongerner_timestamp-button.json similarity index 92% rename from tiddlers/$__plugins_tongerner_timestamp-button.tid rename to tiddlers/$__plugins_tongerner_timestamp-button.json index 2ef31d4..16e89a6 100644 --- a/tiddlers/$__plugins_tongerner_timestamp-button.tid +++ b/tiddlers/$__plugins_tongerner_timestamp-button.json @@ -1,16 +1,3 @@ -author: TonGerner -core-version: >=5.1.13 -created: 20170511203457093 -creator: TonGerner -description: Timestamp button -list: readme -modified: 20190216180307488 -modifier: TonGerner -plugin-type: plugin -title: $:/plugins/tongerner/timestamp-button -type: application/json -version: 0.0.10 - { "tiddlers": { "$:/core/images/timestamp": { diff --git a/tiddlers/$__plugins_tongerner_timestamp-button.json.meta b/tiddlers/$__plugins_tongerner_timestamp-button.json.meta new file mode 100644 index 0000000..93bee4e --- /dev/null +++ b/tiddlers/$__plugins_tongerner_timestamp-button.json.meta @@ -0,0 +1,12 @@ +author: TonGerner +core-version: >=5.1.13 +created: 20170511203457093 +creator: TonGerner +description: Timestamp button +list: readme +modified: 20190704155012268 +modifier: TonGerner +plugin-type: plugin +title: $:/plugins/tongerner/timestamp-button +type: application/json +version: 0.0.10 \ No newline at end of file diff --git a/tiddlers/$__plugins_wikilabs_advanced-search-plus_menu.tid b/tiddlers/$__plugins_wikilabs_advanced-search-plus_menu.tid index 8c43493..d7c63fb 100644 --- a/tiddlers/$__plugins_wikilabs_advanced-search-plus_menu.tid +++ b/tiddlers/$__plugins_wikilabs_advanced-search-plus_menu.tid @@ -1,7 +1,7 @@ caption: {{$:/core/images/advanced-search-button}} created: 20190214191900340 creator: Mohammad -modified: 20190224163831207 +modified: 20190704155012248 modifier: Mohammad tags: $:/tags/SideBar title: $:/plugins/wikilabs/advanced-search-plus/menu diff --git a/tiddlers/$__plugins_wikilabs_link-to-tabs.tid b/tiddlers/$__plugins_wikilabs_link-to-tabs.json similarity index 93% rename from tiddlers/$__plugins_wikilabs_link-to-tabs.tid rename to tiddlers/$__plugins_wikilabs_link-to-tabs.json index d789dad..2e940c1 100644 --- a/tiddlers/$__plugins_wikilabs_link-to-tabs.tid +++ b/tiddlers/$__plugins_wikilabs_link-to-tabs.json @@ -1,15 +1,3 @@ -author: Mario Pietsch -core-version: >=5.1.6 -created: 20190216180307466 -dependents: -description: Internal links are added to tabs if selected -list: readme license -modified: 20190216180307466 -plugin-type: plugin -title: $:/plugins/wikilabs/link-to-tabs -type: application/json -version: 0.1.1 - { "tiddlers": { "$:/core/macros/tabs": { diff --git a/tiddlers/$__plugins_wikilabs_link-to-tabs.json.meta b/tiddlers/$__plugins_wikilabs_link-to-tabs.json.meta new file mode 100644 index 0000000..4d6032e --- /dev/null +++ b/tiddlers/$__plugins_wikilabs_link-to-tabs.json.meta @@ -0,0 +1,11 @@ +author: Mario Pietsch +core-version: >=5.1.6 +created: 20190704155012240 +dependents: +description: Internal links are added to tabs if selected +list: readme license +modified: 20190704155012240 +plugin-type: plugin +title: $:/plugins/wikilabs/link-to-tabs +type: application/json +version: 0.1.1 \ No newline at end of file diff --git a/tiddlers/$__state-reveal-Sample-search 2--1806098709.tid b/tiddlers/$__state-reveal-Sample-search 2--1806098709.tid index e1a11b6..e5f46d8 100644 --- a/tiddlers/$__state-reveal-Sample-search 2--1806098709.tid +++ b/tiddlers/$__state-reveal-Sample-search 2--1806098709.tid @@ -1,6 +1,6 @@ created: 20190111100202748 creator: Mohammad -modified: 20190224163831188 +modified: 20190704155012223 modifier: Mohammad title: $:/state-reveal-Sample-search 2--1806098709 type: text/vnd.tiddlywiki diff --git a/tiddlers/$__state-reveal-Sample-search--1806098709.tid b/tiddlers/$__state-reveal-Sample-search--1806098709.tid index 82a2116..a739317 100644 --- a/tiddlers/$__state-reveal-Sample-search--1806098709.tid +++ b/tiddlers/$__state-reveal-Sample-search--1806098709.tid @@ -1,6 +1,6 @@ created: 20190111100205317 creator: Mohammad -modified: 20190224163831180 +modified: 20190704155012218 modifier: Mohammad title: $:/state-reveal-Sample-search--1806098709 type: text/vnd.tiddlywiki diff --git a/tiddlers/$__state-reveal-Sample-search-89392413.tid b/tiddlers/$__state-reveal-Sample-search-89392413.tid index 3bfbb20..36e6f0c 100644 --- a/tiddlers/$__state-reveal-Sample-search-89392413.tid +++ b/tiddlers/$__state-reveal-Sample-search-89392413.tid @@ -1,6 +1,6 @@ created: 20190111100456349 creator: Mohammad -modified: 20190224163831175 +modified: 20190704155012213 modifier: Mohammad title: $:/state-reveal-Sample-search-89392413 type: text/vnd.tiddlywiki diff --git a/tiddlers/$__tags_Commander.tid b/tiddlers/$__tags_Commander.tid new file mode 100644 index 0000000..c151aa5 --- /dev/null +++ b/tiddlers/$__tags_Commander.tid @@ -0,0 +1,7 @@ +created: 20190315121802750 +creator: Mohammad +list: $:/plugins/kookma/commander/ui/tiddler-operation $:/plugins/kookma/commander/ui/title-operation $:/plugins/kookma/commander/ui/tag-operation $:/plugins/kookma/commander/ui/field-operation $:/plugins/kookma/commander/ui/snr-operation $:/plugins/kookma/commander/ui/inspection $:/plugins/kookma/commander/ui/setting $:/plugins/kookma/commander/ui/help +modified: 20190704155012208 +modifier: Mohammad +title: $:/tags/Commander +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/$__themes_tiddlywiki_snowwhite.tid b/tiddlers/$__themes_tiddlywiki_snowwhite.tid deleted file mode 100644 index ba43a6f..0000000 --- a/tiddlers/$__themes_tiddlywiki_snowwhite.tid +++ /dev/null @@ -1,22 +0,0 @@ -author: JeremyRuston -core-version: >=5.0.0 -created: 20190216180307433 -dependents: $:/themes/tiddlywiki/vanilla -description: Emphasises individual tiddlers -modified: 20190216180307433 -name: Snow White -plugin-priority: 0 -plugin-type: theme -title: $:/themes/tiddlywiki/snowwhite -type: application/json -version: 5.1.20-prerelease - -{ - "tiddlers": { - "$:/themes/tiddlywiki/snowwhite/base": { - "title": "$:/themes/tiddlywiki/snowwhite/base", - "tags": "[[$:/tags/Stylesheet]]", - "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <>;\n}\n\n.tc-tiddler-info {\n\t<>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<>\n}\n\n.tc-edit-tags {\n\t<>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor {\n\t<>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<>\n}\n\n.tc-message-box img {\n\t<>\n}\n\n.tc-plugin-info {\n\t<>\n}\n" - } - } -} \ No newline at end of file diff --git a/tiddlers/$__themes_tiddlywiki_vanilla.tid b/tiddlers/$__themes_tiddlywiki_vanilla.tid deleted file mode 100644 index c91b6f4..0000000 --- a/tiddlers/$__themes_tiddlywiki_vanilla.tid +++ /dev/null @@ -1,109 +0,0 @@ -author: JeremyRuston -core-version: >=5.0.0 -created: 20190216180307428 -dependents: -description: Basic theme -modified: 20190216180307428 -name: Vanilla -plugin-priority: 0 -plugin-type: theme -title: $:/themes/tiddlywiki/vanilla -type: application/json -version: 5.1.20-prerelease - -{ - "tiddlers": { - "$:/themes/tiddlywiki/vanilla/themetweaks": { - "title": "$:/themes/tiddlywiki/vanilla/themetweaks", - "tags": "$:/tags/ControlPanel/Appearance", - "caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}", - "text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n
    \n<$button popup=<> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}\n<$reveal state=<> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n
    \n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<>\n/>\n\n\"\"\"/>\n
    \n\n
    \n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n\n\n\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n\n\n\n\n\\end\n\n<>\n\n! <>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><>
    //<>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"> |\n\n! <>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><> |<> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><> |<> | |\n\n! <>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><>
    //<>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><>
    //<>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><>
    //<>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><>
    //<>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><>
    //<>//
    |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><>
    //<>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><>
    //<>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n" - }, - "$:/themes/tiddlywiki/vanilla/base": { - "title": "$:/themes/tiddlywiki/vanilla/base", - "tags": "[[$:/tags/Stylesheet]]", - "text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[is[image]]\">\n`background: url(`\n<$list filter=\"[!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n\n<$list filter=\"[has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n\n\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n\n\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <>;\n\tbackground: <>;\n\tborder-color: <>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<>\n\tcolor: <>;\n\tbackground-color: <>;\n\tfill: <>;\n}\n\n<>\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <>;\n\tborder: 1px solid <>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <>;\n\tbackground-color: <>;\n\tborder: 1px solid <>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n left: -50px;\n top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n right: -80px;\n bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <>;\n\tbackground: <>;\n}\n\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n}\n\n.tc-muted {\n\tcolor: <>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <>;\n\tvertical-align: middle;\n\tbackground-color: <>;\n\tborder: solid 1px <>;\n\tborder-bottom-color: <>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <>;\n\tborder-left: 1px solid <>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <>;\n\tbackground-color: <>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <>;\n\tbackground-color: <>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <>;\n\tbackground-color: <>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <>;\n\ttext-align: center;\n\tcontent: \"<>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n cursor: pointer;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <>;\n\tcolor: <>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <>;\n\tbackground: <>;\n\tcolor: <>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <>;\n\tbackground: <>;\n\tcolor: <>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <>;\n\tcolor: <>;\n\tfill: <>;\n\tborder: none;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <>;\n\tfill: <>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <>;\n\tborder-top: 2px solid <>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <>;\n\tborder-radius: 1em;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tvertical-align: text-bottom;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <>;\n}\n\n.tc-sidebar-header {\n\tcolor: <>;\n\tfill: <>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n font-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <>;\n\tborder: 1px solid <>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <>;\n\tborder-top: 1px solid <>;\n\tborder-bottom: 1px solid <>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <>;\n\tborder-bottom: 1px solid <>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n}\n\n.tc-system-title-prefix {\n\tcolor: <>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <>;\n\tfont-weight: 300;\n}\n\n.tc-tiddler-missing .tc-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n height: 1.2em;\n width: 1.2em;\n margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg {\n\tfill: <>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <>;\n\tbackground-color: <>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <>;\n\tborder: 1px solid <>;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\tborder: 6px solid <>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <>;\n\tfill: <>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <>;\n\tfill: <>;\n\tcolor: <>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n<>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n fill: <>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n fill: <>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n fill: <>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n fill: <>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n fill: <>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n fill: <>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n fill: <>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n fill: <>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n fill: <>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <>;\n\tbackground-color: <>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg {\n\tfill: <>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <>;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n width: auto;\n margin-bottom: 0px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <>;\n\tbackground-color: <>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <>;\n\tborder-bottom: 1px solid <>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <>;\n\tbackground-color: <>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <>;\n\tbackground-color: <>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <>;\n\tpadding: 0px;\n\tborder: 3px solid <>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <>;\n\tborder: 1px solid <>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <>;\n\tborder-top: 1px solid <>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <>;\n\tborder: 1px solid <>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <>;\n\tbackground-color: <>;\n\tborder-left: 1px solid <>;\n\tborder-top: 1px solid <>;\n\tborder-right: 1px solid <>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <>;\n\tborder-left: 1px solid <>;\n\tborder-top: 1px solid <>;\n\tborder-right: 1px solid <>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <>;\n\tborder-left: 1px solid <>;\n\tborder-bottom: 1px solid <>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <>;\n\tborder-right: 1px solid <>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <>;\n}\n\n.tc-tab-divider.tc-vertical {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical {\n word-break: break-word;\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <>;\n\tcolor: <>;\n\tborder-left: 1px solid <>;\n\tborder-top: 1px solid <>;\n\tborder-right: 1px solid <>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <>;\n\tcolor: <>;\n\tborder-left: 1px solid <>;\n\tborder-top: 1px solid <>;\n\tborder-right: 1px solid <>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <>;\n\tborder-left: 1px solid <>;\n\tborder-right: 1px solid <>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n display: block;\n width: 100%;\n text-align: left;\t\n\tborder-bottom: 1px solid <>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <>;\n\tfill: <>;\n\tbackground-color: <>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <>;\n\tcolor: <>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n flex: 1 0;\n background: <>;\n border-right: 0.5em solid <>;\n border-bottom: 0.5em solid <>;\n white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n background: <>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n flex: 3 1;\n border-left: 0.5em solid <>;\n border-right: 0.5em solid <>;\n border-bottom: 0.5em solid <>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <>;\n\tbackground-color: <>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <>;\n\tfont-weight: bold;\n}\n\n.tc-alert-highlight {\n\tcolor: <>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <>;\n\tborder-bottom-none;\n\tbackground: <>;\n\tcolor: <>;\n\tfill: <>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <>;\n\tcolor: <>;\n\tfill: <>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: block;\n\tborder: 1px solid <>;\n\tbackground-colour: <>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <>;\n\tcolor: <>;\n\tfill: <>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\tfill: <>;\n}\n\n.tc-plugin-info-chunk {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-plugin-info-chunk h1 {\n\tfont-size: 1em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk h2 {\n\tfont-size: 0.8em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk div {\n\tfont-size: 0.7em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <>;\n}\n\n.tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <>;\n}\n\n.tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 1em 1em;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <>;\n\tbackground: <>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <>;\n\tborder-left: 1px solid <>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <>;\n\tborder-top: 1px solid <>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <>;\n\tborder-color: <>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <>;\n\tborder-left: 1px solid <>;\n\tborder-top: 1px solid <>;\n\tborder-bottom: 1px solid <>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <>;\n\tborder-left: 1px solid <>;\n\tborder-bottom: 1px solid <>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <>;\n\tborder-left: 1px solid <>;\n\tborder-bottom: 1px solid <>;\n\tbackground: <>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <>;\n\tborder-left: 1px solid <>;\n\tborder-bottom: 1px solid <>;\n\tbackground: <>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <>;\n\tcolor: <>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <>;\n\tcolor: <>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <>;\n\tcolor: <>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <>;\n\tcolor: <>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <>;\n\tcolor: <>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n \tlist-style-type: none;\n \tpadding-left: 0;\n \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n \tpadding-left: 1em; \n}\n\n.tc-tree button { \n \tcolor: #acacac;\n}\n\n.tc-tree svg {\n \tfill: #acacac;\n}\n\n.tc-tree span svg {\n \twidth: 1em;\n \theight: 1em;\n \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n \tcolor: lightgray;\n}\n\nselect {\n color: <>;\n background: <>;\n}\n\n" - }, - "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize", - "text": "15px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight", - "text": "22px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/fontsize": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize", - "text": "14px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/lineheight": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight", - "text": "20px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/storyleft": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft", - "text": "0px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/storytop": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/storytop", - "text": "0px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/storyright": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/storyright", - "text": "770px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/storywidth": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth", - "text": "770px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth", - "text": "686px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint", - "text": "960px" - }, - "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": { - "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth", - "text": "350px" - }, - "$:/themes/tiddlywiki/vanilla/options/stickytitles": { - "title": "$:/themes/tiddlywiki/vanilla/options/stickytitles", - "text": "no" - }, - "$:/themes/tiddlywiki/vanilla/options/sidebarlayout": { - "title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout", - "text": "fixed-fluid" - }, - "$:/themes/tiddlywiki/vanilla/options/codewrapping": { - "title": "$:/themes/tiddlywiki/vanilla/options/codewrapping", - "text": "pre-wrap" - }, - "$:/themes/tiddlywiki/vanilla/reset": { - "title": "$:/themes/tiddlywiki/vanilla/reset", - "type": "text/plain", - "text": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9.\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n" - }, - "$:/themes/tiddlywiki/vanilla/settings/fontfamily": { - "title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily", - "text": "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"" - }, - "$:/themes/tiddlywiki/vanilla/settings/codefontfamily": { - "title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily", - "text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace" - }, - "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": { - "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment", - "text": "fixed" - }, - "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": { - "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize", - "text": "auto" - }, - "$:/themes/tiddlywiki/vanilla/sticky": { - "title": "$:/themes/tiddlywiki/vanilla/sticky", - "text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<>/>`) {\nz-index: `<$text text={{{ [[200]subtract] }}}/>`;\n}\n`\n\n\n" - } - } -} \ No newline at end of file diff --git a/tiddlers/$__themes_tiddlywiki_vanilla_metrics_sidebarwidth.tid b/tiddlers/$__themes_tiddlywiki_vanilla_metrics_sidebarwidth.tid new file mode 100644 index 0000000..aa31d03 --- /dev/null +++ b/tiddlers/$__themes_tiddlywiki_vanilla_metrics_sidebarwidth.tid @@ -0,0 +1,8 @@ +created: 20190613084436105 +creator: Mohammad +modified: 20190704155012204 +modifier: Mohammad +title: $:/themes/tiddlywiki/vanilla/metrics/sidebarwidth +type: text/vnd.tiddlywiki + +450px \ No newline at end of file diff --git a/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyleft.tid b/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyleft.tid index 180c2dc..8ad8557 100644 --- a/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyleft.tid +++ b/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyleft.tid @@ -1,6 +1,6 @@ created: 20190107165751140 creator: Mohammad -modified: 20190216180307421 +modified: 20190704155012199 modifier: Mohammad title: $:/themes/tiddlywiki/vanilla/metrics/storyleft type: text/vnd.tiddlywiki diff --git a/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyright.tid b/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyright.tid index 2108086..b4441c6 100644 --- a/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyright.tid +++ b/tiddlers/$__themes_tiddlywiki_vanilla_metrics_storyright.tid @@ -1,6 +1,6 @@ created: 20190107165751140 creator: Mohammad -modified: 20190216180308792 +modified: 20190704155012898 modifier: Mohammad title: $:/themes/tiddlywiki/vanilla/metrics/storyright type: text/vnd.tiddlywiki diff --git a/tiddlers/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid b/tiddlers/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid index 49f8366..726cba5 100644 --- a/tiddlers/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid +++ b/tiddlers/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid @@ -1,5 +1,5 @@ created: 20190107164712946 -modified: 20190216180308785 +modified: 20190704155012893 title: $:/themes/tiddlywiki/vanilla/options/sidebarlayout type: text/vnd.tiddlywiki diff --git a/tiddlers/$dataTid$.json b/tiddlers/$dataTid$.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/tiddlers/$dataTid$.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tiddlers/$dataTid$.tid b/tiddlers/$dataTid$.json.meta similarity index 60% rename from tiddlers/$dataTid$.tid rename to tiddlers/$dataTid$.json.meta index deaa3a1..0c1166d 100644 --- a/tiddlers/$dataTid$.tid +++ b/tiddlers/$dataTid$.json.meta @@ -1,8 +1,6 @@ created: 20190207113943825 creator: Mohammad -modified: 20190216180308773 +modified: 20190704155012882 modifier: Mohammad title: $dataTid$ -type: application/json - -{} \ No newline at end of file +type: application/json \ No newline at end of file diff --git a/tiddlers/$dataTid.json b/tiddlers/$dataTid.json new file mode 100644 index 0000000..007bf54 --- /dev/null +++ b/tiddlers/$dataTid.json @@ -0,0 +1,3 @@ +{ + "c": "1" +} \ No newline at end of file diff --git a/tiddlers/$dataTid.tid b/tiddlers/$dataTid.json.meta similarity index 54% rename from tiddlers/$dataTid.tid rename to tiddlers/$dataTid.json.meta index c0e2eea..00d8d5e 100644 --- a/tiddlers/$dataTid.tid +++ b/tiddlers/$dataTid.json.meta @@ -1,10 +1,6 @@ created: 20190207065026061 creator: Mohammad -modified: 20190216180308779 +modified: 20190704155012888 modifier: Mohammad title: $dataTid -type: application/json - -{ - "c": "1" -} \ No newline at end of file +type: application/json \ No newline at end of file diff --git a/tiddlers/.mr_demo_dbadge.tid b/tiddlers/.mr_demo_dbadge.tid deleted file mode 100644 index 97ba518..0000000 --- a/tiddlers/.mr_demo_dbadge.tid +++ /dev/null @@ -1,64 +0,0 @@ -created: 20181204193605622 -creator: Mohammad -modified: 20190216180307415 -modifier: Mohammad -tags: badge -title: .mr/demo/dbadge -type: text/vnd.tiddlywiki - -! Status badges -The status badges are set of macro and stylesheet. These are double badges in two semantic colors indicate coverage, version, relation, progress, ... - -! Using status badge -The status badges here have four semantic colors but can be customized for more colors - -* primary -* info -* success -* warning -* danger - -!! Syntax -``` -<> -``` -
    - -|!Attribute |!Description | -|subject |the subject of badge| -|status |the relation, status, coverage, ...| -|type|one of semantic types: //primary//, //info//, //success//, //warning//, //danger//. Default is //primary//| - -
    - -!! Examples - -``` -<> -<> -<> -<> -<> -``` -<> <> <> -<> -<> - - -!! Other example -``` -<> -<> -``` -<> <> <> - -
    - -!! Semantic colors - -<> <> <> <> <> - -!Installation -Drag and drop these tiddlers into your wiki - -<> diff --git a/tiddlers/.mr_macro_dbadge.tid b/tiddlers/.mr_macro_dbadge.tid deleted file mode 100644 index caaabff..0000000 --- a/tiddlers/.mr_macro_dbadge.tid +++ /dev/null @@ -1,11 +0,0 @@ -created: 20181203212737578 -creator: Mohammad -modified: 20190216180307410 -modifier: Mohammad -tags: $:/tags/Macro badge -title: .mr/macro/dbadge -type: text/vnd.tiddlywiki - -\define dbadge(subject,status, type:"primary") -
    $subject$$status$
    -\end diff --git a/tiddlers/.mr_stylesheet_dbadge.css b/tiddlers/.mr_stylesheet_dbadge.css deleted file mode 100644 index 0c64096..0000000 --- a/tiddlers/.mr_stylesheet_dbadge.css +++ /dev/null @@ -1,36 +0,0 @@ -/*Credits: -Nishant Srivastava https://codepen.io/nisrulz/pen/bpQWLW -Mohammad Rahmani: https://github.com/kookma -*/ -.dbadge { - display: inline-block; - margin: 0.0em; -} -.dbadge > span { - color: #ffffff; - font-size: 0.8em; - font-weight: 400; - line-height: 1; - padding: .2em .6em; - text-align: center; - vertical-align: baseline; - white-space: nowrap;} - -.dbadge-subject{ - background-color: #656565; - border-bottom-left-radius: 0.25em; - border-top-left-radius: 0.25em;} -.dbadge-status { - border-bottom-right-radius: 0.25em; - border-top-right-radius: 0.25em;} - -.dbadge-primary { - background-color: #337ab7;} -.dbadge-success { - background-color: #5cb85c;} -.dbadge-info { - background-color: #5bc0de;} -.dbadge-warning { - background-color: #f0ad4e;} -.dbadge-danger { - background-color: #d9534f;} \ No newline at end of file diff --git a/tiddlers/.mr_stylesheet_dbadge.css.meta b/tiddlers/.mr_stylesheet_dbadge.css.meta deleted file mode 100644 index 2c3d538..0000000 --- a/tiddlers/.mr_stylesheet_dbadge.css.meta +++ /dev/null @@ -1,7 +0,0 @@ -created: 20181204192835967 -creator: Mohammad -modified: 20190216180307403 -modifier: Mohammad -tags: badge $:/tags/Stylesheet -title: .mr/stylesheet/dbadge -type: text/css diff --git a/tiddlers/1.1.tid b/tiddlers/1.1.tid index 1386992..37a364d 100644 --- a/tiddlers/1.1.tid +++ b/tiddlers/1.1.tid @@ -1,6 +1,6 @@ created: 20180604051801176 creator: Mohammad -modified: 20190216180308768 +modified: 20190704155012877 modifier: Mohammad tags: filter title: 1.1 diff --git a/tiddlers/1.2.tid b/tiddlers/1.2.tid index 53b58ba..5d38892 100644 --- a/tiddlers/1.2.tid +++ b/tiddlers/1.2.tid @@ -1,6 +1,6 @@ created: 20180602030758806 creator: Mohammad -modified: 20190216180308761 +modified: 20190704155012873 modifier: Mohammad tags: filter title: 1.2 diff --git a/tiddlers/1.3 1.tid b/tiddlers/1.3 1.tid index 532c76b..2774b40 100644 --- a/tiddlers/1.3 1.tid +++ b/tiddlers/1.3 1.tid @@ -1,6 +1,6 @@ created: 20180603174414540 creator: Mohammad -modified: 20190216180308747 +modified: 20190704155012864 modifier: Mohammad tags: filter title: 1.3 1 diff --git a/tiddlers/1.3.tid b/tiddlers/1.3.tid index 51e4359..9adf363 100644 --- a/tiddlers/1.3.tid +++ b/tiddlers/1.3.tid @@ -1,6 +1,6 @@ created: 20180602033221564 creator: Mohammad -modified: 20190216180308754 +modified: 20190704155012869 modifier: Mohammad tags: filter title: 1.3 diff --git a/tiddlers/1.4.tid b/tiddlers/1.4.tid index d431500..9e5df99 100644 --- a/tiddlers/1.4.tid +++ b/tiddlers/1.4.tid @@ -1,6 +1,6 @@ created: 20180603032658785 creator: Mohammad -modified: 20190216180308741 +modified: 20190704155012859 modifier: Mohammad tags: filter title: 1.4 diff --git a/tiddlers/1.5.tid b/tiddlers/1.5.tid index dbfa9d8..4ace2e3 100644 --- a/tiddlers/1.5.tid +++ b/tiddlers/1.5.tid @@ -1,6 +1,6 @@ created: 20180602032507084 creator: Mohammad -modified: 20190216180308735 +modified: 20190704155012854 modifier: Mohammad tags: filter title: 1.5 diff --git a/tiddlers/1.6.tid b/tiddlers/1.6.tid index 55686ed..2ede464 100644 --- a/tiddlers/1.6.tid +++ b/tiddlers/1.6.tid @@ -1,6 +1,6 @@ created: 20180603031609064 creator: Mohammad -modified: 20190216180308728 +modified: 20190704155012850 modifier: Mohammad tags: filter title: 1.6 diff --git a/tiddlers/1.7.tid b/tiddlers/1.7.tid index 26d9334..c7972f9 100644 --- a/tiddlers/1.7.tid +++ b/tiddlers/1.7.tid @@ -1,6 +1,6 @@ created: 20180603031808818 creator: Mohammad -modified: 20190216180308722 +modified: 20190704155012844 modifier: Mohammad tags: filter title: 1.7 diff --git a/tiddlers/100.01.tid b/tiddlers/100.01.tid index 7fd17ae..cbf12da 100644 --- a/tiddlers/100.01.tid +++ b/tiddlers/100.01.tid @@ -1,6 +1,6 @@ caption: Concatenation Macro created: 20180709151951617 -modified: 20190216180308714 +modified: 20190704155012840 tags: macro title: 100.01 type: text/vnd.tiddlywiki diff --git a/tiddlers/100.02.tid b/tiddlers/100.02.tid index 1e5c2f0..1318195 100644 --- a/tiddlers/100.02.tid +++ b/tiddlers/100.02.tid @@ -1,5 +1,5 @@ created: 20180709153244840 -modified: 20190216180308585 +modified: 20190704155012835 tags: macro title: 100.02 type: text/vnd.tiddlywiki diff --git a/tiddlers/100.03.tid b/tiddlers/100.03.tid index 34cb24a..066792e 100644 --- a/tiddlers/100.03.tid +++ b/tiddlers/100.03.tid @@ -1,5 +1,5 @@ created: 20180709155043444 -modified: 20190216180308575 +modified: 20190704155012829 tags: macro title: 100.03 type: text/vnd.tiddlywiki diff --git a/tiddlers/100.100.tid b/tiddlers/100.100.tid index 8143d10..b4eddff 100644 --- a/tiddlers/100.100.tid +++ b/tiddlers/100.100.tid @@ -1,6 +1,6 @@ caption: Concatenation Macro created: 20180627181421936 -modified: 20190216180308564 +modified: 20190704155012825 tags: macro title: 100.100 type: text/vnd.tiddlywiki diff --git a/tiddlers/100.50.tid b/tiddlers/100.50.tid index 8505e6f..7e20bed 100644 --- a/tiddlers/100.50.tid +++ b/tiddlers/100.50.tid @@ -3,7 +3,7 @@ created: 20180627181906522 creator: Mohammad keywords: number list range list: [[Example List Numbers Using BTC Method]] MyNumberTiddler -modified: 20190216180308542 +modified: 20190704155012820 modifier: Mohammad responder: BTC and Diego and Jed tags: solution diff --git a/tiddlers/100.51.tid b/tiddlers/100.51.tid index 07a9884..987a4b0 100644 --- a/tiddlers/100.51.tid +++ b/tiddlers/100.51.tid @@ -1,6 +1,6 @@ created: 20180709160117309 creator: Mohammad -modified: 20190216180308535 +modified: 20190704155012815 modifier: Mohammad tags: macro title: 100.51 diff --git a/tiddlers/10th March 2019.tid b/tiddlers/10th March 2019.tid index b88916b..114ac4f 100644 --- a/tiddlers/10th March 2019.tid +++ b/tiddlers/10th March 2019.tid @@ -1,6 +1,6 @@ created: 20190310093246647 creator: Mohammad -modified: 20190316114912604 +modified: 20190704155012810 modifier: Mohammad tags: task title: 10th March 2019 diff --git a/tiddlers/11th February 2019_ Tobe Documented.tid b/tiddlers/11th February 2019_ Tobe Documented.tid index f446a47..24b9a56 100644 --- a/tiddlers/11th February 2019_ Tobe Documented.tid +++ b/tiddlers/11th February 2019_ Tobe Documented.tid @@ -1,6 +1,6 @@ created: 20190211064542252 creator: Mohammad -modified: 20190224163831062 +modified: 20190704155012804 modifier: Mohammad tags: task title: 11th February 2019: Tobe Documented diff --git a/tiddlers/12th March 2019.tid b/tiddlers/12th March 2019.tid index 5e280ba..abd6a47 100644 --- a/tiddlers/12th March 2019.tid +++ b/tiddlers/12th March 2019.tid @@ -1,6 +1,6 @@ created: 20190312041049827 creator: Mohammad -modified: 20190316114912574 +modified: 20190704155012800 modifier: Mohammad tags: task title: 12th March 2019 diff --git a/tiddlers/17th March 2019.tid b/tiddlers/17th March 2019.tid index 81a9398..e18716e 100644 --- a/tiddlers/17th March 2019.tid +++ b/tiddlers/17th March 2019.tid @@ -1,6 +1,6 @@ created: 20190317121701949 creator: Mohammad -modified: 20190406122512948 +modified: 20190704155012795 modifier: Mohammad tags: task title: 17th March 2019 diff --git a/tiddlers/2.1.tid b/tiddlers/2.1.tid index e323546..edcda50 100644 --- a/tiddlers/2.1.tid +++ b/tiddlers/2.1.tid @@ -1,6 +1,6 @@ created: 20180602033529572 creator: Mohammad -modified: 20190216180308521 +modified: 20190704155012790 modifier: Mohammad tags: filter title: 2.1 diff --git a/tiddlers/2.2.tid b/tiddlers/2.2.tid index 9ce87d9..995c306 100644 --- a/tiddlers/2.2.tid +++ b/tiddlers/2.2.tid @@ -1,6 +1,6 @@ created: 20180603030605012 creator: Mohammad -modified: 20190216180308513 +modified: 20190704155012783 modifier: Mohammad tags: filter title: 2.2 diff --git a/tiddlers/20.01.tid b/tiddlers/20.01.tid index 92c60c6..e50a537 100644 --- a/tiddlers/20.01.tid +++ b/tiddlers/20.01.tid @@ -1,6 +1,6 @@ created: 20180628133028250 creator: Mohammad -modified: 20190216180308505 +modified: 20190704155012778 modifier: Mohammad note: 20.01-29.99 tiddlers describe nested lists tags: nested diff --git a/tiddlers/20.02.tid b/tiddlers/20.02.tid index 390fdba..bb4145d 100644 --- a/tiddlers/20.02.tid +++ b/tiddlers/20.02.tid @@ -1,6 +1,6 @@ created: 20180628132730919 creator: Mohammad -modified: 20190216180308496 +modified: 20190704155012774 modifier: Mohammad note: 20.01-29.99 tiddlers describe nested lists tags: nested diff --git a/tiddlers/20.10.tid b/tiddlers/20.10.tid index f9860c3..7f20863 100644 --- a/tiddlers/20.10.tid +++ b/tiddlers/20.10.tid @@ -1,6 +1,6 @@ created: 20190203111638921 creator: Mohammad -modified: 20190216180308490 +modified: 20190704155012769 modifier: Mohammad note: 20.01-29.99 tiddlers describe nested lists tags: nested diff --git a/tiddlers/30th July 2018.tid b/tiddlers/30th July 2018.tid index 2c72115..824a7e7 100644 --- a/tiddlers/30th July 2018.tid +++ b/tiddlers/30th July 2018.tid @@ -1,6 +1,5 @@ created: 20180730154843238 -modified: 20190216180308484 +modified: 20190704155012764 tags: Journal title: 30th July 2018 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/4th December 2018.tid b/tiddlers/4th December 2018.tid index 8ce6db6..6c3de30 100644 --- a/tiddlers/4th December 2018.tid +++ b/tiddlers/4th December 2018.tid @@ -1,6 +1,6 @@ created: 20181204062855238 creator: Mohammad -modified: 20190216180308478 +modified: 20190704155012760 modifier: Mohammad tags: task title: 4th December 2018 diff --git a/tiddlers/50.01.tid b/tiddlers/50.01.tid index 1b02afd..9cfeca4 100644 --- a/tiddlers/50.01.tid +++ b/tiddlers/50.01.tid @@ -1,5 +1,5 @@ created: 20180628035445525 -modified: 20190216180308472 +modified: 20190704155012754 month: 08 tags: widgets select title: 50.01 diff --git a/tiddlers/A Book on Tiddlywiki.tid b/tiddlers/A Book on Tiddlywiki.tid index 33a2b40..b794599 100644 --- a/tiddlers/A Book on Tiddlywiki.tid +++ b/tiddlers/A Book on Tiddlywiki.tid @@ -1,6 +1,6 @@ created: 20190201091438845 creator: Mohammad -modified: 20190216180308466 +modified: 20190704155012748 modifier: Mohammad tags: tw-book idea title: A Book on Tiddlywiki diff --git a/tiddlers/A Dictionary Project.tid b/tiddlers/A Dictionary Project.tid index e159c29..da218ec 100644 --- a/tiddlers/A Dictionary Project.tid +++ b/tiddlers/A Dictionary Project.tid @@ -1,7 +1,7 @@ created: 20190207152814643 creator: Mohammad keywords: datatiddler dictionary lookup -modified: 20190216180308461 +modified: 20190704155012744 modifier: Mohammad responder: Jed Carty tags: exmp44 datatiddler solution diff --git a/tiddlers/A Gallery of Core Imgaes.json b/tiddlers/A Gallery of Core Imgaes.json new file mode 100644 index 0000000..f61ebf3 --- /dev/null +++ b/tiddlers/A Gallery of Core Imgaes.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190130195149214", + "title": "A Gallery of Core Imgaes", + "text": "; Create a gallery of all core imgaes\n: The core images are svg images. To do this use the `list` widget and a small css as below.\n\n! Linkable image\nOn mouse hover the tooltip will reveal the full path of image and on click the tiddler contans the svg image will be opened.\n\n<\n.my-gallery svg {\nwidth: 2.0em !important;\nheight: 2.0em !important;\nmargin: 0.5em;\n}\n\n
    \n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/Image]sort[]] -[[$:/core/images/blank]]\">\n<$link tooltip=\"{{!!title}}\">\n<$transclude/>\n\n\n
    \n\"\"\">>\n\n!! Remarks\n* The my-gallery css class sets the height, width and margin of images\n* The `list` widget, list all core images\n* The `-[[$:/core/images/blank]]` filter exclude the blank (empty) image from listing\n* All images are linkable and on click open the related tiddler.\n\n! Clickable image\nThe below example shows the same gallery with clickable images. On click the tiddler name containing the image is copied to clipboard.\n\n\n<$macrocall $name=\"wikitext-example-without-html\" \nsrc=\"\"\"
    \n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/Image]sort[]] -[[$:/core/images/blank]]\">\n<$button message=\"tm-copy-to-clipboard\" param=<> tooltip=<> >\n<$transclude/>\n\n\n
    \n\"\"\"/>\n\n!! Remarks\n* The my-gallery css class sets the height and width of images. The margin is not used here.\n* The `list` widget, list all core images\n* The `-[[$:/core/images/blank]]` filter exclude the blank (empty) image from listing\n* The `button` widget uses `tm-copy-to-clipboard` to copy the tiddler title of containing image into clipboard. Also the title is used as tooltip to be shown on mouse hover.\n* Each image is wrapped into a button and on click the related tiddler title is copied to clipboard.\n", + "creator": "Mohammad", + "modified": "20190704155012739", + "modifier": "Mohammad", + "tags": "image solution", + "type": "text/vnd.tiddlywiki", + "keywords": "list image gallery clipboard ", + "responder": "Thomas Elmiger", + "url": "https://groups.google.com/d/msg/tiddlywiki/NXMYo4arAp4/S_zKK_GoHQAJ" + } +] \ No newline at end of file diff --git a/tiddlers/A Gallery of Core Imgaes.tid b/tiddlers/A Gallery of Core Imgaes.tid deleted file mode 100644 index 0d0bb72..0000000 --- a/tiddlers/A Gallery of Core Imgaes.tid +++ /dev/null @@ -1,60 +0,0 @@ -created: 20190130195149214 -creator: Mohammad -keywords: list image gallery clipboard -modified: 20190216180308454 -modifier: Mohammad -responder: Thomas Elmiger -tags: image solution -title: A Gallery of Core Imgaes -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/NXMYo4arAp4/S_zKK_GoHQAJ - -; Create a gallery of all core imgaes -: The core images are svg images. To do this use the `list` widget and a small css as below. - -! Linkable image -On mouse hover the tooltip will reveal the full path of image and on click the tiddler contans the svg image will be opened. - -< -.my-gallery svg { -width: 2.0em !important; -height: 2.0em !important; -margin: 0.5em; -} - - -""">> - -!! Remarks -* The my-gallery css class sets the height, width and margin of images -* The `list` widget, list all core images -* The `-[[$:/core/images/blank]]` filter exclude the blank (empty) image from listing -* All images are linkable and on click open the related tiddler. - -! Clickable image -The below example shows the same gallery with clickable images. On click the tiddler name containing the image is copied to clipboard. - - -<$macrocall $name="wikitext-example-without-html" -src=""" -"""/> - -!! Remarks -* The my-gallery css class sets the height and width of images. The margin is not used here. -* The `list` widget, list all core images -* The `-[[$:/core/images/blank]]` filter exclude the blank (empty) image from listing -* The `button` widget uses `tm-copy-to-clipboard` to copy the tiddler title of containing image into clipboard. Also the title is used as tooltip to be shown on mouse hover. -* Each image is wrapped into a button and on click the related tiddler title is copied to clipboard. diff --git a/tiddlers/A Rdio Button Macro.tid b/tiddlers/A Rdio Button Macro.tid index 7d1010f..9c38ac3 100644 --- a/tiddlers/A Rdio Button Macro.tid +++ b/tiddlers/A Rdio Button Macro.tid @@ -2,7 +2,7 @@ created: 20180820034129173 creator: Mohammad domain: 1 keywords: radio button -modified: 20190216180308448 +modified: 20190704155012735 modifier: Mohammad responder: TonyM section: B diff --git a/tiddlers/A Simple Time Stamp.tid b/tiddlers/A Simple Time Stamp.tid index 6cfa809..8eb8476 100644 --- a/tiddlers/A Simple Time Stamp.tid +++ b/tiddlers/A Simple Time Stamp.tid @@ -1,7 +1,7 @@ created: 20181105213746723 creator: Mohammad keywords: EditToolbar time -modified: 20190216180308441 +modified: 20190704155012729 modifier: Mohammad responder: Riz tags: solution diff --git a/tiddlers/Access to DataTiddler Index_Value Pair.tid b/tiddlers/Access to DataTiddler Index_Value Pair.tid index 5a6cedf..73c4f3a 100644 --- a/tiddlers/Access to DataTiddler Index_Value Pair.tid +++ b/tiddlers/Access to DataTiddler Index_Value Pair.tid @@ -1,6 +1,6 @@ created: 20190207042754670 creator: Mohammad -modified: 20190216180308419 +modified: 20190704155012724 modifier: Mohammad tags: datatiddler exmp39 title: Access to DataTiddler Index/Value Pair diff --git a/tiddlers/Action JSON Widget.tid b/tiddlers/Action JSON Widget.tid index 7100bf8..26e4e7b 100644 --- a/tiddlers/Action JSON Widget.tid +++ b/tiddlers/Action JSON Widget.tid @@ -2,11 +2,10 @@ created: 20190206140355345 creator: Mohammad description: The action-jsontid widget is an action widget that creates new tiddlers from a json tiddler. Action-jsontid is used within triggering widgets such as the ButtonWidget. developer: Rizwan Ibnishak -modified: 20190216180308413 +modified: 20190704155012720 modifier: Mohammad tags: Links title: Action JSON Widget type: text/vnd.tiddlywiki url: https://ibnishak.github.io/Tesseract/pluginsandmacros/index.html#Action-JSONtid -wiki-name: Action-JSONtid - +wiki-name: Action-JSONtid \ No newline at end of file diff --git a/tiddlers/ActionListops.tid b/tiddlers/ActionListops.tid index a8f009b..71ffad7 100644 --- a/tiddlers/ActionListops.tid +++ b/tiddlers/ActionListops.tid @@ -1,7 +1,7 @@ created: 20181112205947757 creator: Mohammad developer: Matabele -modified: 20190216180308407 +modified: 20190704155012716 modifier: Mohammad tags: Links title: ActionListops diff --git a/tiddlers/spellcheck/Activate the Spell Check with Codemirror.tid b/tiddlers/Activate the Spell Check with Codemirror.tid similarity index 97% rename from tiddlers/spellcheck/Activate the Spell Check with Codemirror.tid rename to tiddlers/Activate the Spell Check with Codemirror.tid index bbfe2e1..5f5aed8 100644 --- a/tiddlers/spellcheck/Activate the Spell Check with Codemirror.tid +++ b/tiddlers/Activate the Spell Check with Codemirror.tid @@ -1,7 +1,7 @@ created: 20181114192709359 creator: Mohammad keywords: spell-check codemirror preview editor -modified: 20190216180308400 +modified: 20190704155012712 modifier: Mohammad responder: Jeremy Rustone tags: solution diff --git a/tiddlers/Add Filter Search into Sidebar.tid b/tiddlers/Add Filter Search into Sidebar.tid index 93e4154..824feb5 100644 --- a/tiddlers/Add Filter Search into Sidebar.tid +++ b/tiddlers/Add Filter Search into Sidebar.tid @@ -1,7 +1,7 @@ created: 20180621062529090 creator: Mohammad keywords: filter sidebar search -modified: 20190216180308290 +modified: 20190704155012696 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Custom Languages and Brushes for highlight.js.tid b/tiddlers/Add Language Brushes to Highlight.js Using Startup Modules.tid similarity index 89% rename from tiddlers/Custom Languages and Brushes for highlight.js.tid rename to tiddlers/Add Language Brushes to Highlight.js Using Startup Modules.tid index c0a2167..8cdd01c 100644 --- a/tiddlers/Custom Languages and Brushes for highlight.js.tid +++ b/tiddlers/Add Language Brushes to Highlight.js Using Startup Modules.tid @@ -1,11 +1,11 @@ created: 20190204201056808 creator: Mohammad keywords: highlight.js brush language -modified: 20190216180310204 +modified: 20190704155012692 modifier: Mohammad responder: Rob Hoelz tags: solution -title: Custom Languages and Brushes for highlight.js +title: Add Language Brushes to Highlight.js Using Startup Modules type: text/vnd.tiddlywiki url: https://groups.google.com/d/msg/tiddlywiki/aOxmaJL_qbc/Gci5sRFyEQAJ @@ -54,4 +54,5 @@ For a demo have a a look at: https://hoelz.ro/files/highlighter-example.html <> !! Remarks -* To add Fortran, Matlab and other languages not available in TW official plugin do as described above \ No newline at end of file +* See [[Add More Language Brushes to Highlight.js Plugin]] +* Using these procedure, you can add brushes for Fortran, Matlab, Julia, ... \ No newline at end of file diff --git a/tiddlers/Add More Language Brushes to Highlight.js Plugin.tid b/tiddlers/Add More Language Brushes to Highlight.js Plugin.tid new file mode 100644 index 0000000..0c483f5 --- /dev/null +++ b/tiddlers/Add More Language Brushes to Highlight.js Plugin.tid @@ -0,0 +1,13 @@ +created: 20190613065338788 +creator: Mohammad +modified: 20190704155012687 +modifier: Mohammad +tags: +title: Add More Language Brushes to Highlight.js Plugin +type: text/vnd.tiddlywiki + +There are three different methods to add new language brushes to highlight.js plugin + +# Using Tiddlywiki on node.js you can simply follow the instruction has been given in the highlight.js plugon [[$:/plugins/tiddlywiki/highlight/howto]]. This method is the simplest and the recommended one +# Manually create `$:/plugins/tiddlywiki/highlight/highlight.js` using the instruction given in [[Manually Add More Language Brushes to Highlight.js]] and overwrite the plugin tiddler +# [[Add Language Brushes to Highlight.js Using Startup Modules]]. This is a flexible method you can append new language bruches to exisiting highlight.js plugin brushes. \ No newline at end of file diff --git a/tiddlers/Add Notes.tid b/tiddlers/Add Notes.tid index e75219c..c188ce5 100644 --- a/tiddlers/Add Notes.tid +++ b/tiddlers/Add Notes.tid @@ -1,6 +1,6 @@ created: 20180905161730298 creator: Mohammad -modified: 20190216180308157 +modified: 20190704155012682 modifier: Mohammad tags: mywiki title: Add Notes diff --git a/tiddlers/Add Remove DataTiddler Index_Value Pairs.tid b/tiddlers/Add Remove DataTiddler Index_Value Pairs.tid index dcb7997..9e0ddfa 100644 --- a/tiddlers/Add Remove DataTiddler Index_Value Pairs.tid +++ b/tiddlers/Add Remove DataTiddler Index_Value Pairs.tid @@ -1,6 +1,6 @@ created: 20190207064142677 creator: Mohammad -modified: 20190224163831880 +modified: 20190704155012672 modifier: Mohammad tags: datatiddler exmp40 title: Add Remove DataTiddler Index/Value Pairs diff --git a/tiddlers/tags/Add Remove Tags.tid b/tiddlers/Add Remove Tags.tid similarity index 98% rename from tiddlers/tags/Add Remove Tags.tid rename to tiddlers/Add Remove Tags.tid index 7a9dd53..b4d894a 100644 --- a/tiddlers/tags/Add Remove Tags.tid +++ b/tiddlers/Add Remove Tags.tid @@ -1,7 +1,7 @@ created: 20180801184016331 creator: Mohammad keywords: tag add remove -modified: 20190316114912235 +modified: 20190704155012667 modifier: Mohammad responder: Mark S tags: exmp24 solution diff --git a/tiddlers/Add a Command to Sidebar.tid b/tiddlers/Add a Command to Sidebar.tid index 1b5dd78..9f4c9ab 100644 --- a/tiddlers/Add a Command to Sidebar.tid +++ b/tiddlers/Add a Command to Sidebar.tid @@ -1,5 +1,5 @@ created: 20180813051159611 -modified: 20190216180308394 +modified: 20190704155012706 tags: concept title: Add a Command to Sidebar type: text/vnd.tiddlywiki diff --git a/tiddlers/Add a Command to Tiddler Toolbar.tid b/tiddlers/Add a Command to Tiddler Toolbar.tid index d4f912c..1985010 100644 --- a/tiddlers/Add a Command to Tiddler Toolbar.tid +++ b/tiddlers/Add a Command to Tiddler Toolbar.tid @@ -1,5 +1,5 @@ created: 20180813052132697 -modified: 20190216180308386 +modified: 20190704155012701 tags: concept title: Add a Command to Tiddler Toolbar type: text/vnd.tiddlywiki diff --git a/tiddlers/Add or Remove Tiddler Fields.tid b/tiddlers/Add or Remove Tiddler Fields.tid index 9f9b064..4fce518 100644 --- a/tiddlers/Add or Remove Tiddler Fields.tid +++ b/tiddlers/Add or Remove Tiddler Fields.tid @@ -1,7 +1,7 @@ created: 20190121043529373 creator: Mohammad keywords: field add remove delete -modified: 20190316114912254 +modified: 20190704155012677 modifier: Mohammad responder: Tiddlywiki.com tags: exmp29 fieldmangler solution diff --git a/tiddlers/Add or Remove a Field from Tiddlers.tid b/tiddlers/Add or Remove a Field from Tiddlers.tid deleted file mode 100644 index d9eae81..0000000 --- a/tiddlers/Add or Remove a Field from Tiddlers.tid +++ /dev/null @@ -1,56 +0,0 @@ -created: 20190121043529373 -creator: Mohammad -keywords: field add remove delete -modified: 20190216180308142 -modifier: Mohammad -responder: Tiddlywiki.com -tags: exmp29 fieldmangler solution -title: Add or Remove a Field from Tiddlers -type: text/vnd.tiddlywiki -url: https://tiddlywiki.com/#FieldManglerWidget - -! Add new fields -; How to add a new field to a series of tiddlers? -: List them and use `fieldmangler` to add the new filed. - -!! Example -Add the new filed `rank` to all tiddlers tagged with `exmp29` - -><$macrocall $name="wikitext-example-without-html" -src="""<$button> Add the new rank field - <$list filter="[tag[exmp29]]"> - <$fieldmangler> - <$action-sendmessage $message="tm-add-field" $param="rank"/> - - - -"""/> - -!!! Remarks -# The `list` widget list all tiddlers tagged with `Links`. -# The `action-sendmessage` widget -# The button widget triggers the `tm-add-field` and add the `rank` field to all those tiddlers. - -! Remove fields -; How delete a field from a series of tiddlers? -: List them and use `fieldmangler` to delete the filed. - -!! Example -Delete the filed `rank` from all tiddlers tagged with `exmp29` - -><$macrocall $name="wikitext-example-without-html" -src="""<$button> Delete the rank field - <$list filter="[tag[exmp29]has:field[rank]]"> - <$fieldmangler> - <$action-sendmessage $message="tm-remove-field" $param="rank"/> - - - -"""/> - -!! Remarks -# The `list` widget list all tiddlers tagged with `exmp29` which has a field `rank` -# The `action-sendmessage` widget -# The button widget triggers the `tm-remove-field` and deletes `rank` field from all those tiddlers. - -<> diff --git a/tiddlers/Administration Tools.tid b/tiddlers/Administration Tools.tid index 6c27458..cf24200 100644 --- a/tiddlers/Administration Tools.tid +++ b/tiddlers/Administration Tools.tid @@ -1,6 +1,6 @@ created: 20180525164310889 creator: Mohammad -modified: 20190216180309681 +modified: 20190704155012663 modifier: Mohammad title: Administration Tools type: text/vnd.tiddlywiki diff --git a/tiddlers/Akbar.tid b/tiddlers/Akbar.tid index 76d8373..dd0783e 100644 --- a/tiddlers/Akbar.tid +++ b/tiddlers/Akbar.tid @@ -1,5 +1,5 @@ created: 20180620192028846 -modified: 20190216180309673 +modified: 20190704155012658 modifier: Mohammad tags: exmp01 contact work title: Akbar diff --git a/tiddlers/Ali.tid b/tiddlers/Ali.tid index 561a210..d5955e4 100644 --- a/tiddlers/Ali.tid +++ b/tiddlers/Ali.tid @@ -1,7 +1,6 @@ created: 20180620191846671 -modified: 20190216180309666 +modified: 20190704155012654 modifier: Mohammad tags: exmp01 contact family title: Ali -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/Allafter operator.tid b/tiddlers/Allafter operator.tid index 819f319..c8078fe 100644 --- a/tiddlers/Allafter operator.tid +++ b/tiddlers/Allafter operator.tid @@ -1,5 +1,5 @@ created: 20180628083301741 -modified: 20190216180309659 +modified: 20190704155012648 modifier: Mohammad tags: operator filter title: Allafter operator diff --git a/tiddlers/Allbefore operator.tid b/tiddlers/Allbefore operator.tid index d710311..6ae6ca1 100644 --- a/tiddlers/Allbefore operator.tid +++ b/tiddlers/Allbefore operator.tid @@ -1,5 +1,5 @@ created: 20180628081702652 -modified: 20190216180309650 +modified: 20190704155012644 modifier: Mohammad tags: operator filter title: Allbefore operator diff --git a/tiddlers/Andrew Harrison Adventures.tid b/tiddlers/Andrew Harrison Adventures.tid index b78aa22..5b9ca9e 100644 --- a/tiddlers/Andrew Harrison Adventures.tid +++ b/tiddlers/Andrew Harrison Adventures.tid @@ -2,11 +2,10 @@ created: 20181109162100918 creator: Mohammad description: TW5 adventure contains several plugins including favorites, field show, plugin library, ... developer: Andrew Harrison -modified: 20190216180309643 +modified: 20190704155012639 modifier: Mohammad tags: Links title: Andrew Harrison Adventures type: text/vnd.tiddlywiki url: http://t5a.tiddlyspot.com -wiki-name: Andrew Harrison Adventures - +wiki-name: Andrew Harrison Adventures \ No newline at end of file diff --git a/tiddlers/Animation CSS.tid b/tiddlers/Animation CSS.tid index 1fdaa50..b999438 100644 --- a/tiddlers/Animation CSS.tid +++ b/tiddlers/Animation CSS.tid @@ -2,11 +2,10 @@ created: 20181108165630503 creator: Mohammad description: animate.css is a bunch of cool, fun, and cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and general just-add-water-awesomeness. developer: Daniel Eden -modified: 20190216180309638 +modified: 20190704155012635 modifier: Mohammad tags: Links title: Animation CSS type: text/vnd.tiddlywiki url: https://daneden.github.io/animate.css/ -wiki-name: Animate.css - +wiki-name: Animate.css \ No newline at end of file diff --git a/tiddlers/Another Color Macro.tid b/tiddlers/Another Color Macro.tid index fac3a8a..4ca7ddc 100644 --- a/tiddlers/Another Color Macro.tid +++ b/tiddlers/Another Color Macro.tid @@ -1,6 +1,6 @@ created: 20180629164419311 creator: Mohammad -modified: 20190216180309633 +modified: 20190704155012630 modifier: Mohammad tags: macro title: Another Color Macro diff --git a/tiddlers/Another DataTiddler and Tiddler Widget.tid b/tiddlers/Another DataTiddler and Tiddler Widget.tid index 864b037..d8ff97d 100644 --- a/tiddlers/Another DataTiddler and Tiddler Widget.tid +++ b/tiddlers/Another DataTiddler and Tiddler Widget.tid @@ -1,7 +1,7 @@ created: 20180816063433189 creator: Mohammad keywords: datatiddler dynamic index reference tiddler -modified: 20190216180309628 +modified: 20190704155012625 modifier: Mohammad responder: Eric Shulman tags: datatiddler exmp05 solution diff --git a/tiddlers/Append Items to List Field.tid b/tiddlers/Append Items to List Field.tid index f5dab36..b7f568b 100644 --- a/tiddlers/Append Items to List Field.tid +++ b/tiddlers/Append Items to List Field.tid @@ -1,7 +1,7 @@ created: 20181214172023283 creator: Mohammad keywords: list append -modified: 20190216180309622 +modified: 20190704155012620 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Appending Tiddlers to a List.json b/tiddlers/Appending Tiddlers to a List.json new file mode 100644 index 0000000..61da53b --- /dev/null +++ b/tiddlers/Appending Tiddlers to a List.json @@ -0,0 +1,15 @@ +[ + { + "created": "20181023170415328", + "title": "Appending Tiddlers to a List", + "text": "\\define addmember()\n<$tiddler tiddler=\"$:/temp/newproject\"><$action-listops $field=\"members\" $subfilter=\"[{!!newmember}]\"/>\n\\end\n\nHow is it possible to choose and append tiddlers to a list based on some filter criteria?\n\n\n```\n\\define addmember()\n<$tiddler tiddler=\"$:/temp/newproject\"><$action-listops $field=\"members\" $subfilter=\"[{!!newmember}]\"/>\n\\end\n```\n\n<$macrocall $name=\"wikitext-example-without-html\" \nsrc=\"\"\"Member List: {{$:/temp/newproject!!members}} + <$select tiddler=\"$:/temp/newproject\" field=\"newmember\" actions=<>><$list filter=\"[tag[contact]]\">\n\"\"\"/>", + "creator": "Mohammad", + "modified": "20190704155012615", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "subfilter ", + "responder": "Mark S", + "url": "https://groups.google.com/d/msg/tiddlywiki/FXW8Zjv6atU/jAcdFnucBgAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Appending Tiddlers to a List.tid b/tiddlers/Appending Tiddlers to a List.tid deleted file mode 100644 index 9c4ce82..0000000 --- a/tiddlers/Appending Tiddlers to a List.tid +++ /dev/null @@ -1,27 +0,0 @@ -created: 20181023170415328 -creator: Mohammad -keywords: subfilter -modified: 20190216180309617 -modifier: Mohammad -responder: Mark S -tags: solution -title: Appending Tiddlers to a List -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/FXW8Zjv6atU/jAcdFnucBgAJ - -\define addmember() -<$tiddler tiddler="$:/temp/newproject"><$action-listops $field="members" $subfilter="[{!!newmember}]"/> -\end - -How is it possible to choose and append tiddlers to a list based on some filter criteria? - - -``` -\define addmember() -<$tiddler tiddler="$:/temp/newproject"><$action-listops $field="members" $subfilter="[{!!newmember}]"/> -\end -``` - -<$macrocall $name="wikitext-example-without-html" -src="""Member List: {{$:/temp/newproject!!members}} + <$select tiddler="$:/temp/newproject" field="newmember" actions=<>><$list filter="[tag[contact]]"> -"""/> \ No newline at end of file diff --git a/tiddlers/Apply Custom Styles Dynamically.json b/tiddlers/Apply Custom Styles Dynamically.json new file mode 100644 index 0000000..39e507c --- /dev/null +++ b/tiddlers/Apply Custom Styles Dynamically.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190109113508471", + "title": "Apply Custom Styles Dynamically", + "text": "Tiddlywiki can dynamically apply styles to tiddlers based on filters. A filter can screen tiddlers based on some criteria.\n\n!! Example\nAssume it is desired to change the color of border of each existing or newly created tiddler has a field called `xmp`. To do this\n\n# Create a new tiddler tagged with `$:/tags/Stylesheet`\n#* Name it whatever you want, here it is [[stylesheet/exmp23]]\n#
    \n\nPut the below script inside tiddler of step 1\n\n```\n\\define assign-css()\n\\rules only\n[data-tiddler-title=\"$(currentTiddler)$\"].tc-tiddler-frame {\nborder-color: red;\n}\n\\end\n<$list filter=\"[all[tiddlers]has:field[xmp]]\">\n<>
    \n\n```\n* In the above script, the `$list` widget select all tiddlers has a `xmp` field .\n* It then calls the `assign-css` macro to apply the custom styles (here border-color) to selected tiddlers using the `data-tiddler-title` selector\n* Every newly created tiddler having a `xmp` filed will get this custom style.\n
    \n# Create some test tiddlers to see the result\n#* Here two tiddlers were created as below\n#** [[demo/exmp23/p01]]\n#** [[demo/exmp23/p02]]\n\n\n<>", + "creator": "Mohammad", + "modified": "20190704155012611", + "modifier": "Mohammad", + "tags": "exmp23 solution css", + "type": "text/vnd.tiddlywiki", + "keywords": "cstom style css dynamic ", + "responder": "BTC", + "url": "https://groups.google.com/d/msg/tiddlywiki/wWCn7BCanrQ/7xNN6I68BwAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Apply Custom Styles Dynamically.tid b/tiddlers/Apply Custom Styles Dynamically.tid deleted file mode 100644 index 9f5977c..0000000 --- a/tiddlers/Apply Custom Styles Dynamically.tid +++ /dev/null @@ -1,44 +0,0 @@ -created: 20190109113508471 -creator: Mohammad -keywords: cstom style css dynamic -modified: 20190216180309611 -modifier: Mohammad -responder: BTC -tags: exmp23 solution css -title: Apply Custom Styles Dynamically -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/wWCn7BCanrQ/7xNN6I68BwAJ - -Tiddlywiki can dynamically apply styles to tiddlers based on filters. A filter can screen tiddlers based on some criteria. - -!! Example -Assume it is desired to change the color of border of each existing or newly created tiddler has a field called `xmp`. To do this - -# Create a new tiddler tagged with `$:/tags/Stylesheet` -#* Name it whatever you want, here it is [[stylesheet/exmp23]] -#
    - -Put the below script inside tiddler of step 1 - -``` -\define assign-css() -\rules only -[data-tiddler-title="$(currentTiddler)$"].tc-tiddler-frame { -border-color: red; -} -\end -<$list filter="[all[tiddlers]has:field[xmp]]"> -<>
    - -``` -* In the above script, the `$list` widget select all tiddlers has a `xmp` field . -* It then calls the `assign-css` macro to apply the custom styles (here border-color) to selected tiddlers using the `data-tiddler-title` selector -* Every newly created tiddler having a `xmp` filed will get this custom style. -
    -# Create some test tiddlers to see the result -#* Here two tiddlers were created as below -#** [[demo/exmp23/p01]] -#** [[demo/exmp23/p02]] - - -<> \ No newline at end of file diff --git a/tiddlers/Archipel.tid b/tiddlers/Archipel.tid new file mode 100644 index 0000000..680e92f --- /dev/null +++ b/tiddlers/Archipel.tid @@ -0,0 +1,11 @@ +created: 20190615173038917 +creator: Mohammad +description: Here is a proof of concept called Archipel that uses D3 JS into TiddlyWiki to vizualize the tiddlyWiki content. My target is to build a tool for Innovation management that will help to visualize and navigate into knowledge contained into tiddlers based on their title and tags. +developer: Silverfox +modified: 20190704155012605 +modifier: Mohammad +tags: Links +title: Archipel +type: text/vnd.tiddlywiki +url: http://archipel.tiddlyspot.com/ +wiki-name: Archipel \ No newline at end of file diff --git a/tiddlers/Autoref.tid b/tiddlers/Autoref.tid index 42cbb1d..2ce2e11 100644 --- a/tiddlers/Autoref.tid +++ b/tiddlers/Autoref.tid @@ -1,6 +1,6 @@ created: 20181209103804411 creator: Mohammad -modified: 20190216180309603 +modified: 20190704155012600 modifier: Mohammad tags: mywiki title: Autoref diff --git a/tiddlers/Batch Delete Export Tiddlers.tid b/tiddlers/Batch Delete Export Tiddlers.tid index e5dd2f4..495ce19 100644 --- a/tiddlers/Batch Delete Export Tiddlers.tid +++ b/tiddlers/Batch Delete Export Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190122133930139 creator: Mohammad keywords: delete export tiddler batch -modified: 20190216180309590 +modified: 20190704155012590 modifier: Mohammad responder: Thomas Telmiger tags: batch solution diff --git a/tiddlers/Batch Edit Tiddler Title.tid b/tiddlers/Batch Edit Tiddler Title.tid index 6cede32..523e42d 100644 --- a/tiddlers/Batch Edit Tiddler Title.tid +++ b/tiddlers/Batch Edit Tiddler Title.tid @@ -1,7 +1,7 @@ created: 20190109092713824 creator: Mohammad keywords: rename edit tiddler title -modified: 20190216180309583 +modified: 20190704155013160 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Batch Manupulator.tid b/tiddlers/Batch Manupulator.tid index 01004b4..ce62787 100644 --- a/tiddlers/Batch Manupulator.tid +++ b/tiddlers/Batch Manupulator.tid @@ -2,11 +2,10 @@ created: 20190121164532306 creator: Mohammad description: Batch manupulation is used to operate on a bunch of tiddlers. For exmple to chage the tag for number or tiddlers at once or adding removing fileds and like that. developer: Mat von TWaddle -modified: 20190216180309488 +modified: 20190704155013155 modifier: Mohammad tags: Links title: Batch Manupulator type: text/vnd.tiddlywiki url: http://batchmanipulator.tiddlyspot.com/ -wiki-name: Batch manupulator - +wiki-name: Batch manupulator \ No newline at end of file diff --git a/tiddlers/Behavior of Svg Internal Links.tid b/tiddlers/Behavior of Svg Internal Links.tid new file mode 100644 index 0000000..5f8c3fe --- /dev/null +++ b/tiddlers/Behavior of Svg Internal Links.tid @@ -0,0 +1,26 @@ +created: 20190703054825850 +creator: Mohammad +keywords: svg internal link +modified: 20190704155013150 +modifier: Mohammad +responder: A Gloom +tags: task solution +title: Behavior of Svg Internal Links +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/O8nj6kMaQNA/_JVt0qlMDAAJ + +An observation on behavior of links to tiddlers that are embedded into svgs (will seem out of context till I post about svg overlays for tiddler images) + +Using svg's for map & diagrams with links to tiddlers embedded into the svg code such as + +```` (Deprecated) + +```` + +- - normally, full or shortened standard urls are used but "#" allows you ro target individual tiddlers inside the wiki. + +That "#tiddler title" may cue you into what will result-- a permalink link in the browser address bar. + +1- The permalink url in the browser address bar will change with each different svg embedded link +2- If you close the tiddler that gets opened, the embedded svg link will not open it again while the browser address bar contains its permalink url, making it look like that embedded link doesn't work any longer +3- If you refresh the wiki without noticing the permalink url and clearing it, you will be left wondering why an unexpected tiddler displays and not your default start up tiddlers \ No newline at end of file diff --git a/tiddlers/Beset Pattern in Actions and Button Widget.tid b/tiddlers/Beset Pattern in Actions and Button Widget.tid index c845b48..22e3125 100644 --- a/tiddlers/Beset Pattern in Actions and Button Widget.tid +++ b/tiddlers/Beset Pattern in Actions and Button Widget.tid @@ -1,7 +1,7 @@ created: 20190111065204653 creator: Mohammad keywords: button actions -modified: 20190216180309476 +modified: 20190704155013146 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Better Performance in Filter Run.json b/tiddlers/Better Performance in Filter Run.json new file mode 100644 index 0000000..990dcc0 --- /dev/null +++ b/tiddlers/Better Performance in Filter Run.json @@ -0,0 +1,15 @@ +[ + { + "created": "20180816201359755", + "title": "Better Performance in Filter Run", + "text": ";Which filter run faster?\n:Assume you have more than 100 tiddlers in their tittle there is a \"Demo\" word! Some of them are hidden tiddlers, their name started with \"$:/\" what is the best filter to list them?\n\n* Case i: two search:title\n```\n<$list filter=\"[search:title[exa]] -[search:title[$:]]\">\n\n\n```\n><$list filter=\"[search:title[exa]] -[search:title[$:]]\">\n\n\n\n* Case ii: one search:title and negate prefix\n```\n<$list filter=\"[search:title[exa]!prefix[$:/]]\">\n\n\n```\n><$list filter=\"[search:title[exa]!prefix[$:/]]\">\n\n\n\n* Answer\nThis would probably be a little better:\n\n`<$list filter=\"[search:title[Demo]!prefix[$]]\">`\n\nBecause this way you don't make the underlying javascript look for the `$` anywhere except the first character location.\n\nAlso, yours would omit:\n\n`X$:/My Demo`\n\nWhich might exist if a user wanted to make a system tiddler temporarily visible in the recent tiddlers sidebar.\n\n* Case iii\n```\n<$list filter=\"[!is[system]search:title[exa]]\">\n\n\n```\n><$list filter=\"[!is[system]search:title[exa]]\">\n\n\nRef: [[Jeremy Ruston|https://groups.google.com/d/msg/tiddlywiki/XuHiTCI4N60/v2Yrtpv8EAAJ]]\n\nThere is a built-in filter operator `is[system]` for detecting system tiddlers, so a better choice would be:\n\n`[!is[system]search:title[Demo]]`\n\nAgain, we filter out system tiddlers before doing the search so as to reduce the number of tiddlers that we have to search.\n\n\n!! More discussion\n\n# [[Performance comparision|https://groups.google.com/d/msg/tiddlywiki/FmuBA2SMjxw/-AkxAPCnCAAJ]] between `[is[current]]` and ``\n# [[A fast list|https://groups.google.com/d/msg/tiddlywiki/XuHiTCI4N60/_g8ZUvGuAwAJ]]", + "creator": "Mohammad", + "modified": "20190704155013141", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "filter run", + "responder": "Mark S ", + "url": "https://groups.google.com/d/msg/tiddlywiki/XuHiTCI4N60/JYFMavGvAwAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Better Performance in Filter Run.tid b/tiddlers/Better Performance in Filter Run.tid deleted file mode 100644 index 6617ca2..0000000 --- a/tiddlers/Better Performance in Filter Run.tid +++ /dev/null @@ -1,69 +0,0 @@ -created: 20180816201359755 -creator: Mohammad -keywords: filter run -modified: 20190406122514564 -modifier: Mohammad -responder: Mark S -tags: solution -title: Better Performance in Filter Run -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/XuHiTCI4N60/JYFMavGvAwAJ - -;Which filter run faster? -:Assume you have more than 100 tiddlers in their tittle there is a "Demo" word! Some of them are hidden tiddlers, their name started with "$:/" what is the best filter to list them? - -* Case i: two search:title -``` -<$list filter="[search:title[exa]] -[search:title[$:]]"> - - -``` -><$list filter="[search:title[exa]] -[search:title[$:]]"> - - - -* Case ii: one search:title and negate prefix -``` -<$list filter="[search:title[exa]!prefix[$:/]]"> - - -``` -><$list filter="[search:title[exa]!prefix[$:/]]"> - - - -* Answer -This would probably be a little better: - -`<$list filter="[search:title[Demo]!prefix[$]]">` - -Because this way you don't make the underlying javascript look for the `$` anywhere except the first character location. - -Also, yours would omit: - -`X$:/My Demo` - -Which might exist if a user wanted to make a system tiddler temporarily visible in the recent tiddlers sidebar. - -* Case iii -``` -<$list filter="[!is[system]search:title[exa]]"> - - -``` -><$list filter="[!is[system]search:title[exa]]"> - - -Ref: [[Jeremy Ruston|https://groups.google.com/d/msg/tiddlywiki/XuHiTCI4N60/v2Yrtpv8EAAJ]] - -There is a built-in filter operator `is[system]` for detecting system tiddlers, so a better choice would be: - -`[!is[system]search:title[Demo]]` - -Again, we filter out system tiddlers before doing the search so as to reduce the number of tiddlers that we have to search. - - -!! More discussion - -# [[Performance comparision|https://groups.google.com/d/msg/tiddlywiki/FmuBA2SMjxw/-AkxAPCnCAAJ]] between `[is[current]]` and `` -# [[A fast list|https://groups.google.com/d/msg/tiddlywiki/XuHiTCI4N60/_g8ZUvGuAwAJ]] \ No newline at end of file diff --git a/tiddlers/Blank Lines in TW.tid b/tiddlers/Blank Lines in TW.tid index 6d3fbb9..ce47546 100644 --- a/tiddlers/Blank Lines in TW.tid +++ b/tiddlers/Blank Lines in TW.tid @@ -1,6 +1,6 @@ created: 20180907042225227 creator: Mohammad -modified: 20190224163831767 +modified: 20190704155013136 modifier: Mohammad tags: concept title: Blank Lines in TW diff --git a/tiddlers/Bookmarks with ID and Links.tid b/tiddlers/Bookmarks with ID and Links.tid index bb03659..5ff1f33 100644 --- a/tiddlers/Bookmarks with ID and Links.tid +++ b/tiddlers/Bookmarks with ID and Links.tid @@ -1,7 +1,7 @@ created: 20181211183213401 creator: Mohammad keywords: anchor bookmark id link -modified: 20190216180309413 +modified: 20190704155013127 modifier: Mohammad responder: w3school tags: task solution diff --git a/tiddlers/Bookmarks.tid b/tiddlers/Bookmarks.tid index 01dc90a..a30e384 100644 --- a/tiddlers/Bookmarks.tid +++ b/tiddlers/Bookmarks.tid @@ -2,8 +2,7 @@ created: 20190207105953802 creator: Mohammad index-name: qw index-value: qwwqwqwq -modified: 20190216180309441 +modified: 20190704155013131 modifier: Mohammad title: Bookmarks -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/Box-Template.tid b/tiddlers/Box-Template.tid index c1a9896..1798638 100644 --- a/tiddlers/Box-Template.tid +++ b/tiddlers/Box-Template.tid @@ -1,7 +1,7 @@ created: 20181018141049619 creator: Mohammad description: part of exmp08, donot delete -modified: 20190216180309402 +modified: 20190704155013123 modifier: Mohammad tags: exmp08 title: Box-Template diff --git a/tiddlers/Build Name from Complex Parts.tid b/tiddlers/Build Name from Complex Parts.tid index 9b34791..937901f 100644 --- a/tiddlers/Build Name from Complex Parts.tid +++ b/tiddlers/Build Name from Complex Parts.tid @@ -1,7 +1,7 @@ created: 20181016023045856 creator: Mohammad keywords: wikify complex field -modified: 20190216180309388 +modified: 20190704155013118 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Button Tutorial.tid b/tiddlers/Button Tutorial.tid index 19405a8..5656d84 100644 --- a/tiddlers/Button Tutorial.tid +++ b/tiddlers/Button Tutorial.tid @@ -2,7 +2,7 @@ caption: Buttons in Tiddlywiki created: 20180704023834307 creator: Mohammad list: Exmp02-P01 -modified: 20190216180309224 +modified: 20190704155013085 modifier: Mohammad tags: tutorial learning list title: Button Tutorial diff --git a/tiddlers/Button to Create a New Tiddler.tid b/tiddlers/Button to Create a New Tiddler.tid index ff9849c..10a5fc8 100644 --- a/tiddlers/Button to Create a New Tiddler.tid +++ b/tiddlers/Button to Create a New Tiddler.tid @@ -1,6 +1,6 @@ created: 20180704024336887 creator: Mohammad -modified: 20190216180309302 +modified: 20190704155013108 modifier: Mohammad tags: button title: Button to Create a New Tiddler diff --git a/tiddlers/Button to Execute a Macro Using Actions.tid b/tiddlers/Button to Execute a Macro Using Actions.tid index 24cf12e..a25f777 100644 --- a/tiddlers/Button to Execute a Macro Using Actions.tid +++ b/tiddlers/Button to Execute a Macro Using Actions.tid @@ -1,7 +1,7 @@ caption: Button to Execute a Macro Using Actions created: 20180720183355647 creator: Mohammad -modified: 20190216180309288 +modified: 20190704155013099 modifier: Mohammad tags: developer button title: Button to Execute a Macro Using Actions diff --git a/tiddlers/Button to Execute a Macro.tid b/tiddlers/Button to Execute a Macro.tid index 04b154f..41e2005 100644 --- a/tiddlers/Button to Execute a Macro.tid +++ b/tiddlers/Button to Execute a Macro.tid @@ -1,6 +1,6 @@ created: 20180606153448324 creator: Mohammad -modified: 20190216180309294 +modified: 20190704155013104 modifier: Mohammad tags: button title: Button to Execute a Macro diff --git a/tiddlers/Button to Hide Show Sidebar.tid b/tiddlers/Button to Hide Show Sidebar.tid index 2847f3f..29bd377 100644 --- a/tiddlers/Button to Hide Show Sidebar.tid +++ b/tiddlers/Button to Hide Show Sidebar.tid @@ -1,7 +1,7 @@ created: 20190201050149908 creator: Mohammad keywords: sidebar toggle show hide -modified: 20190216180309231 +modified: 20190704155013090 modifier: Mohammad tags: button title: Button to Hide Show Sidebar diff --git a/tiddlers/Button to go Full Screen.tid b/tiddlers/Button to go Full Screen.tid index 409c4a6..d6d4046 100644 --- a/tiddlers/Button to go Full Screen.tid +++ b/tiddlers/Button to go Full Screen.tid @@ -1,6 +1,6 @@ created: 20180516025228703 creator: Mohammad -modified: 20190216180309281 +modified: 20190704155013095 modifier: Mohammad tags: button learning title: Button to go Full Screen diff --git a/tiddlers/Buttons to Sort Tiddlers in Tagpill.tid b/tiddlers/Buttons to Sort Tiddlers in Tagpill.tid index 4f28f63..e1a3369 100644 --- a/tiddlers/Buttons to Sort Tiddlers in Tagpill.tid +++ b/tiddlers/Buttons to Sort Tiddlers in Tagpill.tid @@ -1,7 +1,7 @@ created: 20190211064241129 creator: Mohammad keywords: sort tag tagdropdown tagpill -modified: 20190216180309218 +modified: 20190704155013080 modifier: Mohammad responder: Talha tags: exmp47 solution diff --git a/tiddlers/CSS Library.json b/tiddlers/CSS Library.json new file mode 100644 index 0000000..564f874 --- /dev/null +++ b/tiddlers/CSS Library.json @@ -0,0 +1,16 @@ +[ + { + "created": "20181109161404306", + "title": "CSS Library", + "text": "", + "creator": "Mohammad", + "modified": "20190704155013197", + "modifier": "Mohammad", + "tags": "Links", + "type": "text/vnd.tiddlywiki", + "description": "This is a shout out to my three most favorite external CSS libraries. ", + "developer": "Rizwan ibnishak (Riz)", + "url": "https://ibnishak.github.io/Tesseract/UI/index.html#External%20CSS%20Libraries", + "wiki-name": "External CSS Libraries" + } +] \ No newline at end of file diff --git a/tiddlers/CSS Library.tid b/tiddlers/CSS Library.tid deleted file mode 100644 index 8155a98..0000000 --- a/tiddlers/CSS Library.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20181109161404306 -creator: Mohammad -description: This is a shout out to my three most favorite external CSS libraries. -developer: Rizwan ibnishak (Riz) -modified: 20190216180310228 -modifier: Mohammad -tags: Links -title: CSS Library -type: text/vnd.tiddlywiki -url: https://ibnishak.github.io/Tesseract/UI/index.html#External%20CSS%20Libraries -wiki-name: External CSS Libraries - diff --git a/tiddlers/CSS Minifier.json b/tiddlers/CSS Minifier.json new file mode 100644 index 0000000..0f34c41 --- /dev/null +++ b/tiddlers/CSS Minifier.json @@ -0,0 +1,16 @@ +[ + { + "created": "20181225195754234", + "title": "CSS Minifier", + "text": "Also see the https://csscompressor.com/", + "creator": "Mohammad", + "modified": "20190704155013188", + "modifier": "Mohammad", + "tags": "css Links", + "type": "text/vnd.tiddlywiki", + "description": "Online CSS Minifier/Compressor. Free! Provides an API. Simple Quick and Fast.", + "developer": " Andrew Chilton ", + "url": "https://cssminifier.com/", + "wiki-name": "CSS Minifier" + } +] \ No newline at end of file diff --git a/tiddlers/CSS Minifier.tid b/tiddlers/CSS Minifier.tid deleted file mode 100644 index af4af88..0000000 --- a/tiddlers/CSS Minifier.tid +++ /dev/null @@ -1,13 +0,0 @@ -created: 20181225195754234 -creator: Mohammad -description: Online CSS Minifier/Compressor. Free! Provides an API. Simple Quick and Fast. -developer: Andrew Chilton -modified: 20190216180310220 -modifier: Mohammad -tags: css Links -title: CSS Minifier -type: text/vnd.tiddlywiki -url: https://cssminifier.com/ -wiki-name: CSS Minifier - -Also see the https://csscompressor.com/ \ No newline at end of file diff --git a/tiddlers/CSS and Blockquote.tid b/tiddlers/CSS and Blockquote.tid index e5355f9..2a56900 100644 --- a/tiddlers/CSS and Blockquote.tid +++ b/tiddlers/CSS and Blockquote.tid @@ -1,7 +1,7 @@ created: 20181126055610418 creator: Mohammad keywords: css blockquote -modified: 20190216180310256 +modified: 20190704155013222 modifier: Mohammad responder: Chris Smith tags: solution diff --git a/tiddlers/CSS and Tiddlywiki.tid b/tiddlers/CSS and Tiddlywiki.tid index 151ae68..cb3189d 100644 --- a/tiddlers/CSS and Tiddlywiki.tid +++ b/tiddlers/CSS and Tiddlywiki.tid @@ -1,6 +1,6 @@ created: 20180905161704858 creator: Mohammad -modified: 20190216180310249 +modified: 20190704155013217 modifier: Mohammad tags: mywiki title: CSS and Tiddlywiki diff --git a/tiddlers/CSS for Last Char of Title.tid b/tiddlers/CSS for Last Char of Title.tid index 37bf533..a5267c3 100644 --- a/tiddlers/CSS for Last Char of Title.tid +++ b/tiddlers/CSS for Last Char of Title.tid @@ -1,7 +1,7 @@ created: 20181015194405451 creator: Mohammad keywords: css after selector -modified: 20190216180310242 +modified: 20190704155013210 modifier: Mohammad responder: Mat tags: exmp10 solution diff --git a/tiddlers/CSS inside Macro.json b/tiddlers/CSS inside Macro.json new file mode 100644 index 0000000..6a0c30d --- /dev/null +++ b/tiddlers/CSS inside Macro.json @@ -0,0 +1,15 @@ +[ + { + "created": "20180928051543656", + "title": "CSS inside Macro", + "text": "; Is it valid to have css inside macro, if so which of the two below solution is recommended?\n\n#
    \n\n''Define inline style''\n\n```\n\\define vspace(height)\n\n

    \n\\end\n```\n
    \n\n#
    \n\n''Define inline style''\n\n```\n\\define vspace(height)\n

    \n\\end\n```\n
    \n\n<`, the styles \"leak\" into all the other open tiddlers. Probably OK in this particular use case, but something to be aware of.\"\"\" >>", + "creator": "Mohammad", + "modified": "20190704155013203", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "css macro", + "responder": " Mark S", + "url": "https://groups.google.com/d/msg/tiddlywiki/r-O4O4v_NA8/6uVcmYyEAAAJ" + } +] \ No newline at end of file diff --git a/tiddlers/CSS inside Macro.tid b/tiddlers/CSS inside Macro.tid deleted file mode 100644 index 08aba09..0000000 --- a/tiddlers/CSS inside Macro.tid +++ /dev/null @@ -1,42 +0,0 @@ -created: 20180928051543656 -creator: Mohammad -keywords: css macro -modified: 20190216180310235 -modifier: Mohammad -responder: Mark S -tags: solution -title: CSS inside Macro -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/r-O4O4v_NA8/6uVcmYyEAAAJ - -; Is it valid to have css inside macro, if so which of the two below solution is recommended? - -#
    - -''Define inline style'' - -``` -\define vspace(height) - -

    -\end -``` -
    - -#
    - -''Define inline style'' - -``` -\define vspace(height) -

    -\end -``` -
    - -<`, the styles "leak" into all the other open tiddlers. Probably OK in this particular use case, but something to be aware of.""" >> \ No newline at end of file diff --git a/tiddlers/CYR.tid b/tiddlers/CYR.tid index bdabc26..50b3358 100644 --- a/tiddlers/CYR.tid +++ b/tiddlers/CYR.tid @@ -1,5 +1,5 @@ created: 20180820090323679 -modified: 20190216180310177 +modified: 20190704155013877 note: don't delete, this is part of exmp07 tags: exmp07 title: CYR diff --git a/tiddlers/Calculation.tid b/tiddlers/Calculation.tid index 7ecbd93..c42daa4 100644 --- a/tiddlers/Calculation.tid +++ b/tiddlers/Calculation.tid @@ -1,7 +1,7 @@ created: 20180625165024599 creator: Mohammad keywords: variable macro count -modified: 20190216180309211 +modified: 20190704155013076 modifier: Mohammad tags: variable title: Calculation diff --git a/tiddlers/Calendar.tid b/tiddlers/Calendar.tid index fbb880a..72d575b 100644 --- a/tiddlers/Calendar.tid +++ b/tiddlers/Calendar.tid @@ -2,11 +2,10 @@ created: 20181105213056418 creator: Mohammad description: A clickable calendar. This is a simple example of a tabbed picture calendar to give the new or casual TiddlyWiki users some ideas. It uses BJ's Calendar Plugin to make the calendars and create journal entries. developer: Greg Davis -modified: 20190216180309204 +modified: 20190704155013071 modifier: Mohammad tags: Links title: Calendar type: text/vnd.tiddlywiki url: http://tabbed-calendar.tiddlyspot.com/#2019 -wiki-name: Calendar - +wiki-name: Calendar \ No newline at end of file diff --git a/tiddlers/Camel Case Words in List Output.tid b/tiddlers/Camel Case Words in List Output.tid index 7611dad..6ccbd96 100644 --- a/tiddlers/Camel Case Words in List Output.tid +++ b/tiddlers/Camel Case Words in List Output.tid @@ -1,7 +1,7 @@ created: 20180629074615946 creator: Mohammad keywords: camelcase list filter -modified: 20190216180309198 +modified: 20190704155013066 modifier: Mohammad responder: Jeremy Ruston tags: solution variable diff --git a/tiddlers/Canonical URI and External Image.tid b/tiddlers/Canonical URI and External Image.tid index 9b3b1f2..f50a627 100644 --- a/tiddlers/Canonical URI and External Image.tid +++ b/tiddlers/Canonical URI and External Image.tid @@ -1,7 +1,7 @@ created: 20190202045302898 creator: Mohammad keywords: external image canonical-uri -modified: 20190216180309192 +modified: 20190704155013061 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Center Table Horizontally.tid b/tiddlers/Center Table Horizontally.tid index 4e4106a..7159aa6 100644 --- a/tiddlers/Center Table Horizontally.tid +++ b/tiddlers/Center Table Horizontally.tid @@ -1,7 +1,7 @@ created: 20180928045042773 creator: Mohammad keywords: table css center -modified: 20190216180309188 +modified: 20190704155013057 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/tags/Chanage Tags for All Tiddlers.tid b/tiddlers/Chanage Tags for All Tiddlers.tid similarity index 92% rename from tiddlers/tags/Chanage Tags for All Tiddlers.tid rename to tiddlers/Chanage Tags for All Tiddlers.tid index 4028a8d..b812a00 100644 --- a/tiddlers/tags/Chanage Tags for All Tiddlers.tid +++ b/tiddlers/Chanage Tags for All Tiddlers.tid @@ -1,6 +1,6 @@ created: 20180615181838065 creator: Mohammad -modified: 20190216180309183 +modified: 20190704155013053 modifier: Mohammad tags: macro title: Chanage Tags for All Tiddlers diff --git a/tiddlers/Change Body Font Size.tid b/tiddlers/Change Body Font Size.tid index c642506..21cfeb8 100644 --- a/tiddlers/Change Body Font Size.tid +++ b/tiddlers/Change Body Font Size.tid @@ -1,7 +1,7 @@ created: 20180930165406729 creator: Mohammad keywords: font -modified: 20190216180309178 +modified: 20190704155013049 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/Change Password on Tiddlyspot.tid b/tiddlers/Change Password on Tiddlyspot.tid index 0e50539..763f166 100644 --- a/tiddlers/Change Password on Tiddlyspot.tid +++ b/tiddlers/Change Password on Tiddlyspot.tid @@ -1,7 +1,7 @@ created: 20190127074807958 creator: Mohammad keywords: password -modified: 20190216180309172 +modified: 20190704155013044 modifier: Mohammad responder: Tiddlyspot tags: solution diff --git a/tiddlers/tags/Change Tag from A to B.tid b/tiddlers/Change Tag from A to B.tid similarity index 74% rename from tiddlers/tags/Change Tag from A to B.tid rename to tiddlers/Change Tag from A to B.tid index af07a1e..cfaefd0 100644 --- a/tiddlers/tags/Change Tag from A to B.tid +++ b/tiddlers/Change Tag from A to B.tid @@ -1,5 +1,5 @@ created: 20180726061937190 -modified: 20190216180309166 +modified: 20190704155013040 tags: title: Change Tag from A to B type: text/vnd.tiddlywiki diff --git a/tiddlers/Change the Color of Sidebar Tabs.tid b/tiddlers/Change the Color of Sidebar Tabs.tid index d4adc9d..99053b8 100644 --- a/tiddlers/Change the Color of Sidebar Tabs.tid +++ b/tiddlers/Change the Color of Sidebar Tabs.tid @@ -1,7 +1,7 @@ created: 20181107135644222 creator: Mohammad keywords: sidebar -modified: 20190216180309160 +modified: 20190704155013035 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/Change the Colors of One Editor Toolbar Button.tid b/tiddlers/Change the Colors of One Editor Toolbar Button.tid index d086ed8..e21ebab 100644 --- a/tiddlers/Change the Colors of One Editor Toolbar Button.tid +++ b/tiddlers/Change the Colors of One Editor Toolbar Button.tid @@ -1,7 +1,7 @@ created: 20190314032516038 creator: Mohammad keywords: editor toolbar -modified: 20190406122514096 +modified: 20190704155013030 modifier: Mohammad responder: JD tags: solution diff --git a/tiddlers/Change the Order of Tiddlers.tid b/tiddlers/Change the Order of Tiddlers.tid index d6999fe..4b015a9 100644 --- a/tiddlers/Change the Order of Tiddlers.tid +++ b/tiddlers/Change the Order of Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190201055030545 creator: Mohammad keywords: order tiddler tagpill -modified: 20190216180309155 +modified: 20190704155013024 modifier: Mohammad tags: tip title: Change the Order of Tiddlers diff --git a/tiddlers/Check List Demo.tid b/tiddlers/Check List Demo.tid index 21aaf80..56d8e14 100644 --- a/tiddlers/Check List Demo.tid +++ b/tiddlers/Check List Demo.tid @@ -2,11 +2,10 @@ author: Tony created: 20180702023742276 creator: Mohammad description: An interactive check list demo useful for Task and ToDo lists -modified: 20190216180309149 +modified: 20190704155012998 modifier: Mohammad name: CheckListDemo tags: Links title: Check List Demo type: text/vnd.tiddlywiki -url: http://grosinger.net/tw5-checklist/ - +url: http://grosinger.net/tw5-checklist/ \ No newline at end of file diff --git a/tiddlers/Check if Macro or Variable Exists.tid b/tiddlers/Check if Macro or Variable Exists.tid index 97fbefe..b06d5fc 100644 --- a/tiddlers/Check if Macro or Variable Exists.tid +++ b/tiddlers/Check if Macro or Variable Exists.tid @@ -1,7 +1,7 @@ created: 20190227065336369 creator: Mohammad keywords: macro variable exist -modified: 20190316114911890 +modified: 20190704155013017 modifier: Mohammad responder: Jeremy Ruston tags: solution exmp52 diff --git a/tiddlers/Check if Passed the Macro Parameter.tid b/tiddlers/Check if Passed the Macro Parameter.tid index 9b0899f..cb7c327 100644 --- a/tiddlers/Check if Passed the Macro Parameter.tid +++ b/tiddlers/Check if Passed the Macro Parameter.tid @@ -1,7 +1,7 @@ created: 20190214163529629 creator: Mohammad keywords: macro blank empty parameter -modified: 20190316114915029 +modified: 20190704155013012 modifier: Mohammad responder: Mohammad and Bimlas tags: solution diff --git a/tiddlers/Check if Tiddler Exist.tid b/tiddlers/Check if Tiddler Exist.tid index dfe59de..347affa 100644 --- a/tiddlers/Check if Tiddler Exist.tid +++ b/tiddlers/Check if Tiddler Exist.tid @@ -1,7 +1,7 @@ created: 20190221141032590 creator: Mohammad keywords: exist tiddler missing -modified: 20190224163831608 +modified: 20190704155013008 modifier: Mohammad responder: Mal tags: solution diff --git a/tiddlers/Check if Tiddler Newer Than the Other.tid b/tiddlers/Check if Tiddler Newer Than the Other.tid index cf61689..8b9e3e0 100644 --- a/tiddlers/Check if Tiddler Newer Than the Other.tid +++ b/tiddlers/Check if Tiddler Newer Than the Other.tid @@ -1,7 +1,7 @@ created: 20190314174758260 creator: Mohammad keywords: newer greater tiddler -modified: 20190406122514053 +modified: 20190704155013003 modifier: Mohammad responder: BurningTreeC tags: exmp54 solution diff --git a/tiddlers/Checkbox Simple.tid b/tiddlers/Checkbox Simple.tid index 61cb000..8036558 100644 --- a/tiddlers/Checkbox Simple.tid +++ b/tiddlers/Checkbox Simple.tid @@ -1,5 +1,5 @@ created: 20180723191107086 -modified: 20190216180309143 +modified: 20190704155012994 tags: checkbox title: Checkbox Simple type: text/vnd.tiddlywiki diff --git a/tiddlers/Checkbox with Three State.tid b/tiddlers/Checkbox with Three State.tid index 81b0e7a..ba6e277 100644 --- a/tiddlers/Checkbox with Three State.tid +++ b/tiddlers/Checkbox with Three State.tid @@ -1,7 +1,7 @@ created: 20180626184804892 creator: Mohammad keywords: checkbox state -modified: 20190216180309137 +modified: 20190704155012989 modifier: Mohammad output: responder: Jed Carty diff --git a/tiddlers/Checkboxes Like Radio Button.tid b/tiddlers/Checkboxes Like Radio Button.tid index 1191101..5840f78 100644 --- a/tiddlers/Checkboxes Like Radio Button.tid +++ b/tiddlers/Checkboxes Like Radio Button.tid @@ -1,7 +1,7 @@ created: 20180625161035033 creator: Mohammad keywords: checkbox radio button -modified: 20190216180309130 +modified: 20190704155012985 modifier: Mohammad responder: Mark S status: R diff --git a/tiddlers/Chnage Colors and Styles of Control Buttons.tid b/tiddlers/Chnage Colors and Styles of Control Buttons.tid index 3a35dbb..0e0fc07 100644 --- a/tiddlers/Chnage Colors and Styles of Control Buttons.tid +++ b/tiddlers/Chnage Colors and Styles of Control Buttons.tid @@ -1,7 +1,7 @@ created: 20181107062829914 creator: Mohammad keywords: icon tweak color control buttons -modified: 20190216180309122 +modified: 20190704155012980 modifier: Mohammad responder: David Gifford tags: solution diff --git a/tiddlers/Circles.tid b/tiddlers/Circles.tid index c704c61..e870404 100644 --- a/tiddlers/Circles.tid +++ b/tiddlers/Circles.tid @@ -1,6 +1,6 @@ created: 20180620190509044 creator: Mohammad -modified: 20190216180309114 +modified: 20190704155012975 modifier: Mohammad note: This tiddler is used for example 01. It holds a list of categories tags: exmp01 diff --git a/tiddlers/Class Field.tid b/tiddlers/Class Field.tid index 0208289..9483f24 100644 --- a/tiddlers/Class Field.tid +++ b/tiddlers/Class Field.tid @@ -2,11 +2,10 @@ created: 20181109201920749 creator: Mohammad description: Classes to hide different elements of tiddler like title, control buttons, tags, ... developer: Rizwan ibnishak (Riz) -modified: 20190216180309104 +modified: 20190704155012971 modifier: Mohammad tags: Links title: Class Field type: text/vnd.tiddlywiki url: https://ibnishak.github.io/Tesseract/pluginsandmacros/classfield.html -wiki-name: Class Field - +wiki-name: Class Field \ No newline at end of file diff --git a/tiddlers/Clean.tid b/tiddlers/Clean.tid index 97fa45e..6d9bfa1 100644 --- a/tiddlers/Clean.tid +++ b/tiddlers/Clean.tid @@ -1,6 +1,6 @@ created: 20141209104005777 creator: Tobias Beer -modified: 20190216180309093 +modified: 20190704155012966 modifier: Mohammad tags: tools title: Clean diff --git a/tiddlers/Cloning Tiddlers.tid b/tiddlers/Cloning Tiddlers.tid index 55d5e45..488b643 100644 --- a/tiddlers/Cloning Tiddlers.tid +++ b/tiddlers/Cloning Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190220110127021 creator: Mohammad keywords: clone tiddler -modified: 20190224163831564 +modified: 20190704155012962 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/Close all Tiddlers and Open Home.tid b/tiddlers/Close all Tiddlers and Open Home.tid index 5c3f033..ee9225b 100644 --- a/tiddlers/Close all Tiddlers and Open Home.tid +++ b/tiddlers/Close all Tiddlers and Open Home.tid @@ -1,7 +1,7 @@ created: 20190109054740930 creator: Mohammad keywords: button close navigate message -modified: 20190216180309085 +modified: 20190704155012958 modifier: Mohammad responder: Diego Messa tags: message button solution diff --git a/tiddlers/CodeMirror_Firefox-Setting.css.meta b/tiddlers/CodeMirror_Firefox-Setting.css.meta index 621f279..321dfc7 100644 --- a/tiddlers/CodeMirror_Firefox-Setting.css.meta +++ b/tiddlers/CodeMirror_Firefox-Setting.css.meta @@ -1,7 +1,7 @@ created: 20181223191617706 creator: Mohammad -modified: 20190216180309067 +modified: 20190704155012949 modifier: Mohammad tags: $:/tags/Stylesheet title: CodeMirror/Firefox-Setting -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/Color Contrast Analyzer.json b/tiddlers/Color Contrast Analyzer.json new file mode 100644 index 0000000..e29b35f --- /dev/null +++ b/tiddlers/Color Contrast Analyzer.json @@ -0,0 +1,16 @@ +[ + { + "created": "20181126051119171", + "title": "Color Contrast Analyzer", + "text": "", + "creator": "Mohammad", + "modified": "20190704155012939", + "modifier": "Mohammad", + "tags": "color Links", + "type": "text/vnd.tiddlywiki", + "description": "The Colour Contrast Analyser (CCA) helps you determine the legibility of text and the contrast of visual elements, such as graphical controls and visual indicators.", + "developer": "The Paciello Group ", + "url": "https://developer.paciellogroup.com/resources/contrastanalyser/", + "wiki-name": "Colour Contrast Analyser" + } +] \ No newline at end of file diff --git a/tiddlers/Color Contrast Analyzer.tid b/tiddlers/Color Contrast Analyzer.tid deleted file mode 100644 index 2877a5e..0000000 --- a/tiddlers/Color Contrast Analyzer.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20181126051119171 -creator: Mohammad -description: The Colour Contrast Analyser (CCA) helps you determine the legibility of text and the contrast of visual elements, such as graphical controls and visual indicators. -developer: The Paciello Group -modified: 20190216180309048 -modifier: Mohammad -tags: color Links -title: Color Contrast Analyzer -type: text/vnd.tiddlywiki -url: https://developer.paciellogroup.com/resources/contrastanalyser/ -wiki-name: Colour Contrast Analyser - diff --git a/tiddlers/Color Palette.tid b/tiddlers/Color Palette.tid index b807893..024966e 100644 --- a/tiddlers/Color Palette.tid +++ b/tiddlers/Color Palette.tid @@ -2,11 +2,10 @@ created: 20180712133952418 creator: Mohammad description: Custom color palletes. Drak, solar and ... color pallets for TW5 developer: JD -modified: 20190216180309038 +modified: 20190704155012934 modifier: Mohammad name: jd's clr Palletes tags: Links title: Color Palette type: text/vnd.tiddlywiki -url: http://j.d.palette.tiddlyspot.com/ - +url: http://j.d.palette.tiddlyspot.com/ \ No newline at end of file diff --git a/tiddlers/Color Selection and Manipulation.tid b/tiddlers/Color Selection and Manipulation.tid index 2a1da02..9515975 100644 --- a/tiddlers/Color Selection and Manipulation.tid +++ b/tiddlers/Color Selection and Manipulation.tid @@ -1,8 +1,8 @@ created: 20180414121016160 creator: Mohammad -modified: 20190216180308962 +modified: 20190704155012929 modifier: Mohammad -tags: tiddlyfor info +tags: info title: Color Selection and Manipulation type: text/vnd.tiddlywiki diff --git a/tiddlers/Color Tools.tid b/tiddlers/Color Tools.tid index c2166d0..340e237 100644 --- a/tiddlers/Color Tools.tid +++ b/tiddlers/Color Tools.tid @@ -1,6 +1,6 @@ created: 20181028035550739 creator: Mohammad -modified: 20190216180308935 +modified: 20190704155012924 modifier: Mohammad title: Color Tools type: text/vnd.tiddlywiki diff --git a/tiddlers/Colorful Tab.tid b/tiddlers/Colorful Tab.tid index 8d50470..d03e595 100644 --- a/tiddlers/Colorful Tab.tid +++ b/tiddlers/Colorful Tab.tid @@ -1,7 +1,7 @@ created: 20181222153945197 creator: Mohammad keywords: color tab sidebar tabs macro -modified: 20190216180308908 +modified: 20190704155012919 modifier: Mohammad responder: Ton Gerner tags: tabs solution diff --git a/tiddlers/Colors Macro.tid b/tiddlers/Colors Macro.tid index 31ba7d1..7b950c8 100644 --- a/tiddlers/Colors Macro.tid +++ b/tiddlers/Colors Macro.tid @@ -1,6 +1,6 @@ created: 20180629145825195 creator: Mohammad -modified: 20190216180310471 +modified: 20190704155012908 modifier: Mohammad tags: macro title: Colors Macro diff --git a/tiddlers/Colors.tid b/tiddlers/Colors.tid index 643752d..c087e8e 100644 --- a/tiddlers/Colors.tid +++ b/tiddlers/Colors.tid @@ -1,7 +1,7 @@ created: 20181010035955280 creator: Mohammad keywords: color hex -modified: 20190216180308799 +modified: 20190704155012914 modifier: Mohammad responder: TonGerner tags: solution diff --git a/tiddlers/Columns.tid b/tiddlers/Columns.tid new file mode 100644 index 0000000..02b9147 --- /dev/null +++ b/tiddlers/Columns.tid @@ -0,0 +1,14 @@ +created: 20190608165938669 +creator: Mohammad +description: The columns stylesheet lets you present content inside a tiddler split up into columns where the content flows to equal out the height of the columns and the view is responsive to tiddler width e.g as affected by device width. +developer: Mat von TWaddle +modified: 20190704155012903 +modifier: Mohammad +tags: Links +title: Columns +type: text/vnd.tiddlywiki +url: http://columns.tiddlyspot.com/ +wiki-name: Coulmns + +!! Remarks +More information and discussion can be found at TW Google [[forum|https://groups.google.com/d/msg/tiddlywiki/678-ylU5eDA/t6JNx0f1BAAJ]] \ No newline at end of file diff --git a/tiddlers/Comma Separated List of Tiddlers.tid b/tiddlers/Comma Separated List of Tiddlers.tid index d2fad23..c9301dd 100644 --- a/tiddlers/Comma Separated List of Tiddlers.tid +++ b/tiddlers/Comma Separated List of Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190110200211551 creator: Mohammad keywords: last butlast operator comma-separated filter -modified: 20190216180310464 +modified: 20190704155013495 modifier: Mohammad responder: Eric Shulman tags: operator last solution diff --git a/tiddlers/Community Search.tid b/tiddlers/Community Search.tid index 75de61a..99f8934 100644 --- a/tiddlers/Community Search.tid +++ b/tiddlers/Community Search.tid @@ -2,11 +2,10 @@ author: Jeremy Ruston created: 20181001055803154 creator: Mohammad description: A wiki indexes all wiki created by TW community. Here you can search by title, author and plugin name -modified: 20190216180310456 +modified: 20190704155013483 modifier: Mohammad name: Community Search tags: Links title: Community Search type: text/vnd.tiddlywiki -url: https://tiddlywiki.com/#TWCommunitySearch - +url: https://tiddlywiki.com/#TWCommunitySearch \ No newline at end of file diff --git a/tiddlers/Compare Texts of Two Tiddlers.tid b/tiddlers/Compare Texts of Two Tiddlers.tid index 6217ef2..c2f021e 100644 --- a/tiddlers/Compare Texts of Two Tiddlers.tid +++ b/tiddlers/Compare Texts of Two Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190315105425281 creator: Mohammad keywords: -modified: 20190406122513724 +modified: 20190704155013473 modifier: Mohammad responder: tags: task solution diff --git a/tiddlers/Compare Variables for Equality and Inequality.tid b/tiddlers/Compare Variables for Equality and Inequality.tid index 7760fb9..e71b957 100644 --- a/tiddlers/Compare Variables for Equality and Inequality.tid +++ b/tiddlers/Compare Variables for Equality and Inequality.tid @@ -1,7 +1,7 @@ created: 20181122052315056 creator: Mohammad keywords: conditional variable reveal -modified: 20190216180310448 +modified: 20190704155013463 modifier: Mohammad responder: Eric Shulman tags: reveal solution diff --git a/tiddlers/Compile SCSS to CSS.tid b/tiddlers/Compile SCSS to CSS.tid index 33b7721..e0f218b 100644 --- a/tiddlers/Compile SCSS to CSS.tid +++ b/tiddlers/Compile SCSS to CSS.tid @@ -1,6 +1,6 @@ created: 20181126060149412 creator: Mohammad -modified: 20190216180310441 +modified: 20190704155013453 modifier: Mohammad tags: css title: Compile SCSS to CSS diff --git a/tiddlers/Concatenate Different Tiddlers in one Tiddler.tid b/tiddlers/Concatenate Different Tiddlers in one Tiddler.tid index 661a77a..999f718 100644 --- a/tiddlers/Concatenate Different Tiddlers in one Tiddler.tid +++ b/tiddlers/Concatenate Different Tiddlers in one Tiddler.tid @@ -1,7 +1,7 @@ created: 20190111080300267 creator: Mohammad keywords: concatenate writing tool -modified: 20190216180310435 +modified: 20190704155013441 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Concatenate the Contents of Different Tiddlers.tid b/tiddlers/Concatenate the Contents of Different Tiddlers.tid index ac7d2c9..3310715 100644 --- a/tiddlers/Concatenate the Contents of Different Tiddlers.tid +++ b/tiddlers/Concatenate the Contents of Different Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190201131114561 creator: Mohammad keywords: concatenate export contents -modified: 20190216180310429 +modified: 20190704155013433 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Concatenating Text to Make Dynamic URLs.tid b/tiddlers/Concatenating Text to Make Dynamic URLs.tid index 6ccc285..50bf4e9 100644 --- a/tiddlers/Concatenating Text to Make Dynamic URLs.tid +++ b/tiddlers/Concatenating Text to Make Dynamic URLs.tid @@ -1,7 +1,7 @@ created: 20181223080238680 creator: Mohammad keywords: concatenate -modified: 20190216180310422 +modified: 20190704155013425 modifier: Mohammad responder: Jed Carty tags: concatenate solution diff --git a/tiddlers/Concatenation String and Macro Variable.tid b/tiddlers/Concatenation String and Macro Variable.tid index f9564a7..f9f7296 100644 --- a/tiddlers/Concatenation String and Macro Variable.tid +++ b/tiddlers/Concatenation String and Macro Variable.tid @@ -1,6 +1,6 @@ created: 20180608053518935 creator: Mohammad -modified: 20190216180310416 +modified: 20190704155013417 modifier: Mohammad tags: concatenate title: Concatenation String and Macro Variable diff --git a/tiddlers/Concept Book.tid b/tiddlers/Concept Book.tid index 8331adf..115800c 100644 --- a/tiddlers/Concept Book.tid +++ b/tiddlers/Concept Book.tid @@ -2,7 +2,7 @@ created: 20190117054145514 creator: Mohammad description: Concept is a reader–writer solution and can be used to develop books using Tiddlywiki. developer: Thomas Elmiger -modified: 20190216180310402 +modified: 20190704155013407 modifier: Mohammad tags: Links title: Concept Book diff --git a/tiddlers/Conditional Operation.tid b/tiddlers/Conditional Operation.tid index 15842db..2e9139f 100644 --- a/tiddlers/Conditional Operation.tid +++ b/tiddlers/Conditional Operation.tid @@ -1,6 +1,6 @@ created: 20180702013457481 creator: Mohammad -modified: 20190216180310395 +modified: 20190704155013402 modifier: Mohammad tags: conditional reveal macro title: Conditional Operation diff --git a/tiddlers/Conditional Output.tid b/tiddlers/Conditional Output.tid index cec174d..550a1df 100644 --- a/tiddlers/Conditional Output.tid +++ b/tiddlers/Conditional Output.tid @@ -2,7 +2,7 @@ caption: Test of conditional output created: 20180730171942054 creator: Mohammad keywords: conditional view transclude widget -modified: 20190216180310389 +modified: 20190704155013396 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Conditional ViewTemplate.tid b/tiddlers/Conditional ViewTemplate.tid index 3995817..0141da9 100644 --- a/tiddlers/Conditional ViewTemplate.tid +++ b/tiddlers/Conditional ViewTemplate.tid @@ -1,7 +1,7 @@ caption: Conditional viewtemplate created: 20190210091550545 creator: Mohammad -modified: 20190216180310383 +modified: 20190704155013389 modifier: Mohammad tags: $:/.mr/toc zmaroon task title: Conditional ViewTemplate diff --git a/tiddlers/Conditionally Display The Tiddler Contents.tid b/tiddlers/Conditionally Display The Tiddler Contents.tid index ace753e..88fc9b8 100644 --- a/tiddlers/Conditionally Display The Tiddler Contents.tid +++ b/tiddlers/Conditionally Display The Tiddler Contents.tid @@ -1,7 +1,7 @@ created: 20181209163259645 creator: Mohammad keywords: viewtemplate conditional hide display body -modified: 20190216180310376 +modified: 20190704155013382 modifier: Mohammad responder: Eric Shulman tags: viewtemplate exmp16 solution diff --git a/tiddlers/Consolitate the Current Story to Default.tid b/tiddlers/Consolitate the Current Story to Default.tid index 778dff6..b6d39ba 100644 --- a/tiddlers/Consolitate the Current Story to Default.tid +++ b/tiddlers/Consolitate the Current Story to Default.tid @@ -1,7 +1,7 @@ created: 20181203143826268 creator: Mohammad keywords: story defualt tiddler -modified: 20190216180310369 +modified: 20190704155013375 modifier: Mohammad responder: Jan tags: solution diff --git a/tiddlers/Contents.tid b/tiddlers/Contents.tid index 760351a..8be9073 100644 --- a/tiddlers/Contents.tid +++ b/tiddlers/Contents.tid @@ -1,7 +1,7 @@ created: 20190122091411989 creator: Mohammad list-after: $:/core/ui/SideBar/Open -modified: 20190216180310362 +modified: 20190704155013365 modifier: Mohammad tags: $:/tags/SideBar title: Contents diff --git a/tiddlers/ConverTable.tid b/tiddlers/ConverTable.tid index bec3a28..fea163f 100644 --- a/tiddlers/ConverTable.tid +++ b/tiddlers/ConverTable.tid @@ -2,7 +2,7 @@ counter: 1 created: 20160915191808435 creator: Tobias Beer foo: foo value -modified: 20190216180310355 +modified: 20190704155013359 modifier: Mohammad order: 1 tags: tools table diff --git a/tiddlers/Coocoo.tid b/tiddlers/Coocoo.tid index 21caa96..b26d30d 100644 --- a/tiddlers/Coocoo.tid +++ b/tiddlers/Coocoo.tid @@ -1,7 +1,6 @@ created: 20180620193540569 -modified: 20190216180310346 +modified: 20190704155013351 modifier: Mohammad tags: exmp01 contact personal title: Coocoo -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/Count Untagged Tiddlers.tid b/tiddlers/Count Untagged Tiddlers.tid index 9ebef07..f5d1c2d 100644 --- a/tiddlers/Count Untagged Tiddlers.tid +++ b/tiddlers/Count Untagged Tiddlers.tid @@ -1,6 +1,6 @@ created: 20180607073006899 creator: Mohammad -modified: 20190216180310318 +modified: 20190704155013322 modifier: Mohammad tags: title: Count Untagged Tiddlers diff --git a/tiddlers/Count items within a Field.tid b/tiddlers/Count items within a Field.tid index ed1efb9..95ef6f5 100644 --- a/tiddlers/Count items within a Field.tid +++ b/tiddlers/Count items within a Field.tid @@ -1,7 +1,7 @@ created: 20190211082905066 creator: Mohammad keywords: count field -modified: 20190224163831415 +modified: 20190704155013344 modifier: Mohammad responder: Mohammad tags: exmp49 solution diff --git a/tiddlers/Count macro with letters.tid b/tiddlers/Count macro with letters.tid index 46c7fdc..ea4a22e 100644 --- a/tiddlers/Count macro with letters.tid +++ b/tiddlers/Count macro with letters.tid @@ -1,5 +1,5 @@ created: 20180730172828852 -modified: 20190216180310332 +modified: 20190704155013336 tags: title: Count macro with letters type: text/vnd.tiddlywiki diff --git a/tiddlers/Count the Number of Childeren.tid b/tiddlers/Count the Number of Childeren.tid index 465c0b3..b501afc 100644 --- a/tiddlers/Count the Number of Childeren.tid +++ b/tiddlers/Count the Number of Childeren.tid @@ -1,5 +1,5 @@ created: 20180807184512991 -modified: 20190216180310325 +modified: 20190704155013330 tags: title: Count the Number of Childeren type: text/vnd.tiddlywiki diff --git a/tiddlers/Create External Images from A Directory.tid b/tiddlers/Create External Images from A Directory.tid index c2ac9ea..d4d505f 100644 --- a/tiddlers/Create External Images from A Directory.tid +++ b/tiddlers/Create External Images from A Directory.tid @@ -1,7 +1,7 @@ created: 20180818050135190 creator: Mohammad keywords: external image directory folder -modified: 20190216180310287 +modified: 20190704155013283 modifier: Mohammad responder: Mark S tags: image solution diff --git a/tiddlers/Create Links on Click Sets Some Fields.tid b/tiddlers/Create Links on Click Sets Some Fields.tid index bc83bbd..9d0dafb 100644 --- a/tiddlers/Create Links on Click Sets Some Fields.tid +++ b/tiddlers/Create Links on Click Sets Some Fields.tid @@ -1,6 +1,6 @@ created: 20180729153252828 creator: Mohammad -modified: 20190216180310281 +modified: 20190704155013272 modifier: Mohammad myfield: Akbar tags: diff --git a/tiddlers/Create New Link.tid b/tiddlers/Create New Link.tid index ad87721..0c299c2 100644 --- a/tiddlers/Create New Link.tid +++ b/tiddlers/Create New Link.tid @@ -1,6 +1,6 @@ created: 20180712135751907 creator: Mohammad -modified: 20190216180310276 +modified: 20190704155013260 modifier: Mohammad title: Create New Link type: text/vnd.tiddlywiki diff --git a/tiddlers/Create New Tiddler and TextReference in Tags.tid b/tiddlers/Create New Tiddler and TextReference in Tags.tid index 5bbe701..c9e5aaf 100644 --- a/tiddlers/Create New Tiddler and TextReference in Tags.tid +++ b/tiddlers/Create New Tiddler and TextReference in Tags.tid @@ -1,7 +1,7 @@ created: 20180723140906962 creator: Mohammad keywords: new tiddler textreference -modified: 20190216180310270 +modified: 20190704155013251 modifier: Mohammad responder: Mark S tags: solution button diff --git a/tiddlers/Create Svg Icons Using Macro.tid b/tiddlers/Create Svg Icons Using Macro.tid new file mode 100644 index 0000000..f846e22 --- /dev/null +++ b/tiddlers/Create Svg Icons Using Macro.tid @@ -0,0 +1,26 @@ +created: 20190615173438249 +creator: Mohammad +keywords: svg icon maco +modified: 20190704155013245 +modifier: Mohammad +responder: Silverfox +tags: exmp61 solution +title: Create Svg Icons Using Macro +type: text/vnd.tiddlywiki +url: + +The below macro was developed by {{!!responder}} for the great [[Archipel]] wiki, in a that D3JS is used for visualization Tiddlywiki contents. + +!! Macro pastille +The pastille macro creates small macro and gets its fill color from input tiddler + +``` +\define pastille(tagName) + + + +\end +``` + +!! Example +There is several examples on [[http://archipel.tiddlyspot.com/#Knowledge%20map%20options]]. One example has given here [[Example 61: Pastille Macro]] diff --git a/tiddlers/Create Tiddler with Sequence Number.tid b/tiddlers/Create Tiddler with Sequence Number.tid index a476a71..6bb3b3e 100644 --- a/tiddlers/Create Tiddler with Sequence Number.tid +++ b/tiddlers/Create Tiddler with Sequence Number.tid @@ -1,7 +1,7 @@ created: 20190222064439458 creator: Mohammad keywords: create tiddler sequence number -modified: 20190406122515134 +modified: 20190704155013234 modifier: Mohammad responder: Mohammad tags: exmp50 solution diff --git a/tiddlers/Create Tiddler with Title and Time.tid b/tiddlers/Create Tiddler with Title and Time.tid index 3479052..8f2627f 100644 --- a/tiddlers/Create Tiddler with Title and Time.tid +++ b/tiddlers/Create Tiddler with Title and Time.tid @@ -1,7 +1,7 @@ created: 20181114035156864 creator: Mohammad keywords: time title tiddler substitution -modified: 20190216180310263 +modified: 20190704155013229 modifier: Mohammad responder: TonyM tags: solution diff --git a/tiddlers/Create a Borderless Table.tid b/tiddlers/Create a Borderless Table.tid new file mode 100644 index 0000000..1972374 --- /dev/null +++ b/tiddlers/Create a Borderless Table.tid @@ -0,0 +1,61 @@ +created: 20190614065319109 +creator: Mohammad +keywords: table css borderless +modified: 20190704155013314 +modifier: Mohammad +responder: Eric Shulman +tags: solution +title: Create a Borderless Table +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/UC10tciyr1U/Jvj66_e2jTUJ + +; How create a borderless table? +:
    + +Create a tiddler tagged with `$:/tags/Stylesheet` and put the below css code inside it. + +```css +.borderless, +.borderless table, +.borderless td, +.borderless tr, +.borderless th, +.borderless tbody + { border:0 !important; } +} +``` + +Then create your borderless table using the above class like below + +``` +@@.borderless +|a|b| +|c|d| +@@ +``` + +! Example +The below code shows a sample borderless + +<$macrocall $name="wikitext-example-without-html" +src=""" + +@@.borderless +|col1|col2|col3|col4|h +|a|b|12|red| +|c|d|256|green| +|Table 1. This is the caption|c +@@ +"""/> + + + diff --git a/tiddlers/Create a Doubly Sorted Table.json b/tiddlers/Create a Doubly Sorted Table.json new file mode 100644 index 0000000..ee5ab30 --- /dev/null +++ b/tiddlers/Create a Doubly Sorted Table.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190401050206784", + "title": "Create a Doubly Sorted Table", + "text": "; How to create a table from a list of tiddlers which is sorted first by value of field 1 and then sort the rsult by value of field 2?\n: This is called a doubly sorted list and can be done using a nested `$list` widget\n\n!! Example\nAssume there is a list of tiddlers contain the biblography data of some ebooks as below\n\n* tiddler `title`: ebook title\n* `vendor` field: publisher name\n* `author` field: ebook author name\n\nCreate a table contains ebook data sorted //first// in `vendor` name and //second// in `author` name.\n\n```\n\n<$list filter=\"[tag[ebook]has[vendor]each[vendor]get[vendor]sort[]]\" variable=\"publisherName\">\n<$list filter=\"[tag[ebook]has[vendor]field:vendorsort[author]]\" variable=\"bookName\">\n\n \n \n \n\n\n\n
    \n <$link to={{!!title}}><$view tiddler=<> field=\"title\"/>\n \n <$view tiddler=<> field='author'/>\n \n <$view tiddler=<> field='vendor'/>\n
    \n```\n\n!! Remarks\nThe first `$list` filter:\n\n* Gets a list of all my books (tagged //ebook//)\n* Looks at the `vendor` field and gets a list of vendors using the `get` operator\n** Since the `get` operator is one of the few operators that allow duplicates, it is possible to have the same `vendor` listed multiple times in the list created \n* So first use the `each` operator to ensure unique items (vendors).\n* Then this list of all vendors is sorted by the vendor's name\n\n\nThe second `$list` filter will then runs for every `vendor` in the list created by the first `$list`\n\n* For the first item - which is the first vendor's name\n** It first gets a list of all the books (tagged //ebook//)\n** Then looks at the `vendor` field - selects the ones that match this first `vendor`\n** Then sorts those by the `author` field\n* Then it does that for the 2nd author in the list provided by the first `$list` filter \n* . . . and so on for all the vendors one by one as provided by the first `$list` filter.\n\n\n\n\n!! More info\nSee [[Example 57: Doubly Sorted Table]]\n\nAlso see [[List by Tag but Sort and Show by Field Value]]", + "creator": "Mohammad", + "modified": "20190704155013309", + "modifier": "Mohammad", + "tags": "exmp57 solution", + "type": "text/vnd.tiddlywiki", + "keywords": "secondary doubly sort get each ", + "responder": "S.S.", + "url": "https://groups.google.com/d/msg/tiddlywiki/FjQ8yFw8F0M/X8aBlOjvAwAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Create a Doubly Sorted Table.tid b/tiddlers/Create a Doubly Sorted Table.tid deleted file mode 100644 index 7e89bf1..0000000 --- a/tiddlers/Create a Doubly Sorted Table.tid +++ /dev/null @@ -1,69 +0,0 @@ -created: 20190401050206784 -creator: Mohammad -keywords: secondary doubly sort get each -modified: 20190406122515196 -modifier: Mohammad -responder: S.S. -tags: exmp57 solution -title: Create a Doubly Sorted Table -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/FjQ8yFw8F0M/X8aBlOjvAwAJ - -; How to create a table from a list of tiddlers which is sorted first by value of field 1 and then sort the rsult by value of field 2? -: This is called a doubly sorted list and can be done using a nested `$list` widget - -!! Example -Assume there is a list of tiddlers contain the biblography data of some ebooks as below - -* tiddler `title`: ebook title -* `vendor` field: publisher name -* `author` field: ebook author name - -Create a table contains ebook data sorted //first// in `vendor` name and //second// in `author` name. - -``` - -<$list filter="[tag[ebook]has[vendor]each[vendor]get[vendor]sort[]]" variable="publisherName"> -<$list filter="[tag[ebook]has[vendor]field:vendorsort[author]]" variable="bookName"> - - - - - - - -
    - <$link to={{!!title}}><$view tiddler=<> field="title"/> - - <$view tiddler=<> field='author'/> - - <$view tiddler=<> field='vendor'/> -
    -``` - -!! Remarks -The first `$list` filter: - -* Gets a list of all my books (tagged //ebook//) -* Looks at the `vendor` field and gets a list of vendors using the `get` operator -** Since the `get` operator is one of the few operators that allow duplicates, it is possible to have the same `vendor` listed multiple times in the list created -* So first use the `each` operator to ensure unique items (vendors). -* Then this list of all vendors is sorted by the vendor's name - - -The second `$list` filter will then runs for every `vendor` in the list created by the first `$list` - -* For the first item - which is the first vendor's name -** It first gets a list of all the books (tagged //ebook//) -** Then looks at the `vendor` field - selects the ones that match this first `vendor` -** Then sorts those by the `author` field -* Then it does that for the 2nd author in the list provided by the first `$list` filter -* . . . and so on for all the vendors one by one as provided by the first `$list` filter. - - - - -!! More info -See [[Example 57: Doubly Sorted Table]] - -Also see [[List by Tag but Sort and Show by Field Value]] \ No newline at end of file diff --git a/tiddlers/Create a New Tiddler Using Input Box.tid b/tiddlers/Create a New Tiddler Using Input Box.tid index 9f63f49..40a8336 100644 --- a/tiddlers/Create a New Tiddler Using Input Box.tid +++ b/tiddlers/Create a New Tiddler Using Input Box.tid @@ -1,7 +1,7 @@ created: 20190203154616403 creator: Mohammad keywords: text-edit tiddler concatenate -modified: 20190216180310309 +modified: 20190704155013303 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Create a Simple Comment Button.tid b/tiddlers/Create a Simple Comment Button.tid index 9858832..a8a1a0e 100644 --- a/tiddlers/Create a Simple Comment Button.tid +++ b/tiddlers/Create a Simple Comment Button.tid @@ -1,7 +1,7 @@ created: 20190111082809696 creator: Mohammad keywords: button create tiddler comment -modified: 20190216180310301 +modified: 20190704155013297 modifier: Mohammad responder: Joe Armstrong tags: solution diff --git a/tiddlers/Create a Tiddler if not Existed.tid b/tiddlers/Create a Tiddler if not Existed.tid index a747638..bd7dba2 100644 --- a/tiddlers/Create a Tiddler if not Existed.tid +++ b/tiddlers/Create a Tiddler if not Existed.tid @@ -1,7 +1,7 @@ created: 20180929161020093 creator: Mohammad keywords: tiddler exist create -modified: 20190216180310293 +modified: 20190704155013289 modifier: Mohammad responder: Jed Carty tags: solution diff --git a/tiddlers/Custom Filter in Advanced Search.tid b/tiddlers/Custom Filter in Advanced Search.tid index c55c001..a2a6c75 100644 --- a/tiddlers/Custom Filter in Advanced Search.tid +++ b/tiddlers/Custom Filter in Advanced Search.tid @@ -1,7 +1,7 @@ created: 20180621055944300 creator: Mohammad keywords: filter search -modified: 20190216180310213 +modified: 20190704155013182 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Custom Styles Using DataTiddler.tid b/tiddlers/Custom Styles Using DataTiddler.tid index b0c990f..524817e 100644 --- a/tiddlers/Custom Styles Using DataTiddler.tid +++ b/tiddlers/Custom Styles Using DataTiddler.tid @@ -1,7 +1,7 @@ created: 20180802125153176 creator: Mohammad keywords: css styles datatiddler dynamic -modified: 20190216180310195 +modified: 20190704155013175 modifier: Mohammad tags: css exmp22 hirad datatiddler title: Custom Styles Using DataTiddler diff --git a/tiddlers/Customize Look of Editor 5.1.18.tid b/tiddlers/Customize Look of Editor 5.1.18.tid index 4da35c0..38e7c6b 100644 --- a/tiddlers/Customize Look of Editor 5.1.18.tid +++ b/tiddlers/Customize Look of Editor 5.1.18.tid @@ -1,7 +1,7 @@ created: 20181203033939943 creator: Mohammad keywords: editor -modified: 20190216180310189 +modified: 20190704155013170 modifier: Mohammad responder: BurningTreeC tags: solution diff --git a/tiddlers/Customize Search Result.tid b/tiddlers/Customize Search Result.tid index 1661d74..48f0ca7 100644 --- a/tiddlers/Customize Search Result.tid +++ b/tiddlers/Customize Search Result.tid @@ -1,7 +1,7 @@ created: 20190110084934324 creator: Mohammad keywords: custom search template -modified: 20190216180310183 +modified: 20190704155013165 modifier: Mohammad responder: Riz tags: search solution diff --git a/tiddlers/Customized Numbered Lists.tid b/tiddlers/Customized Numbered Lists.tid index afa2904..981981e 100644 --- a/tiddlers/Customized Numbered Lists.tid +++ b/tiddlers/Customized Numbered Lists.tid @@ -1,7 +1,7 @@ created: 20190317165008800 creator: Mohammad keywords: typed-list ordered -modified: 20190406122514938 +modified: 20190704155013885 modifier: Mohammad responder: Mario Pietsch (PMario) tags: solution diff --git a/tiddlers/Data for Example04 b/tiddlers/Data for Example04 new file mode 100644 index 0000000..d09c0c3 --- /dev/null +++ b/tiddlers/Data for Example04 @@ -0,0 +1,3 @@ +Hirad: 1388 +Mohammad: 1350 +Ali: 1344 \ No newline at end of file diff --git a/tiddlers/Data for Example04.meta b/tiddlers/Data for Example04.meta new file mode 100644 index 0000000..4f6bfc8 --- /dev/null +++ b/tiddlers/Data for Example04.meta @@ -0,0 +1,5 @@ +created: 20180816062349977 +modified: 20190704155013856 +tags: exmp04 +title: Data for Example04 +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/Data for Example04.tid b/tiddlers/Data for Example04.tid deleted file mode 100644 index 93b68c6..0000000 --- a/tiddlers/Data for Example04.tid +++ /dev/null @@ -1,9 +0,0 @@ -created: 20180816062349977 -modified: 20190216180310171 -tags: exmp04 -title: Data for Example04 -type: application/x-tiddler-dictionary - -Hirad: 1388 -Mohammad: 1350 -Ali: 1344 \ No newline at end of file diff --git a/tiddlers/DataTiddler Index_Value Using Forms.tid b/tiddlers/DataTiddler Index_Value Using Forms.tid index a0ef0e7..8444947 100644 --- a/tiddlers/DataTiddler Index_Value Using Forms.tid +++ b/tiddlers/DataTiddler Index_Value Using Forms.tid @@ -1,6 +1,6 @@ created: 20190207104157101 creator: Mohammad -modified: 20190216180310135 +modified: 20190704155013805 modifier: Mohammad tags: exmp42 datatiddler title: DataTiddler Index/Value Using Forms diff --git a/tiddlers/DataTiddler Terminology.tid b/tiddlers/DataTiddler Terminology.tid index f4cf9f7..b4eeb3a 100644 --- a/tiddlers/DataTiddler Terminology.tid +++ b/tiddlers/DataTiddler Terminology.tid @@ -1,7 +1,7 @@ created: 20190205182711700 creator: Mohammad keywords: datatiddler index property value dictionary -modified: 20190216180310129 +modified: 20190704155013798 modifier: Mohammad responder: Google JSON Style Guide tags: datatiddler solution diff --git a/tiddlers/DataTiddler Value Set to a Variable.tid b/tiddlers/DataTiddler Value Set to a Variable.tid index 38c8c57..de7a529 100644 --- a/tiddlers/DataTiddler Value Set to a Variable.tid +++ b/tiddlers/DataTiddler Value Set to a Variable.tid @@ -1,7 +1,7 @@ created: 20190131181326003 creator: Mohammad keywords: datatiddler dictionary variable index -modified: 20190216180310122 +modified: 20190704155013788 modifier: Mohammad responder: Eric Shulman tags: solution datatiddler diff --git a/tiddlers/DataTiddler and Property Table.tid b/tiddlers/DataTiddler and Property Table.tid index 618a288..4065344 100644 --- a/tiddlers/DataTiddler and Property Table.tid +++ b/tiddlers/DataTiddler and Property Table.tid @@ -1,6 +1,6 @@ created: 20190208065506593 creator: Mohammad -modified: 20190216180310149 +modified: 20190704155013828 modifier: Mohammad tags: exmp45 datatiddler title: DataTiddler and Property Table diff --git a/tiddlers/DataTiddler and Tiddler Widget Example b/tiddlers/DataTiddler and Tiddler Widget Example new file mode 100644 index 0000000..d09c0c3 --- /dev/null +++ b/tiddlers/DataTiddler and Tiddler Widget Example @@ -0,0 +1,3 @@ +Hirad: 1388 +Mohammad: 1350 +Ali: 1344 \ No newline at end of file diff --git a/tiddlers/DataTiddler and Tiddler Widget Example.tid b/tiddlers/DataTiddler and Tiddler Widget Example.meta similarity index 61% rename from tiddlers/DataTiddler and Tiddler Widget Example.tid rename to tiddlers/DataTiddler and Tiddler Widget Example.meta index 8bd8129..c82f94d 100644 --- a/tiddlers/DataTiddler and Tiddler Widget Example.tid +++ b/tiddlers/DataTiddler and Tiddler Widget Example.meta @@ -1,12 +1,8 @@ created: 20180816063524302 creator: Mohammad -modified: 20190216180310141 +modified: 20190704155013815 modifier: Mohammad note: This is part of exm05. Dont delete tags: exmp05 title: DataTiddler and Tiddler Widget Example -type: application/x-tiddler-dictionary - -Hirad: 1388 -Mohammad: 1350 -Ali: 1344 \ No newline at end of file +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/Date in Custom Field.tid b/tiddlers/Date in Custom Field.tid index 0157bdd..222380a 100644 --- a/tiddlers/Date in Custom Field.tid +++ b/tiddlers/Date in Custom Field.tid @@ -1,7 +1,7 @@ created: 20190201031142594 creator: Mohammad keywords: dataformat view UTC -modified: 20190216180310116 +modified: 20190704155013775 modifier: Mohammad myfield: 20190131 responder: S.S. diff --git a/tiddlers/Defualt Tiddlers as a Blog.tid b/tiddlers/Defualt Tiddlers as a Blog.tid index 4acc21e..fe24a01 100644 --- a/tiddlers/Defualt Tiddlers as a Blog.tid +++ b/tiddlers/Defualt Tiddlers as a Blog.tid @@ -1,7 +1,7 @@ created: 20181028042932580 creator: Mohammad keywords: blog defualt-tiddlers -modified: 20190216180310108 +modified: 20190704155013760 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/delete/Delete Tiddlers Based on a Field.tid b/tiddlers/Delete Tiddlers Based on a Field.tid similarity index 94% rename from tiddlers/delete/Delete Tiddlers Based on a Field.tid rename to tiddlers/Delete Tiddlers Based on a Field.tid index 7ce9dae..2b85f52 100644 --- a/tiddlers/delete/Delete Tiddlers Based on a Field.tid +++ b/tiddlers/Delete Tiddlers Based on a Field.tid @@ -1,7 +1,7 @@ created: 20181204054344056 creator: Mohammad keywords: delete filed tiddler viewtemplate -modified: 20190216180310086 +modified: 20190704155013713 modifier: Mohammad responder: S.S. and Mohammad tags: field solution diff --git a/tiddlers/delete/Delete Tiddlers.tid b/tiddlers/Delete Tiddlers.tid similarity index 95% rename from tiddlers/delete/Delete Tiddlers.tid rename to tiddlers/Delete Tiddlers.tid index e803956..64abb50 100644 --- a/tiddlers/delete/Delete Tiddlers.tid +++ b/tiddlers/Delete Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190122081917880 creator: Mohammad keywords: delete tiddler batch -modified: 20190216180310093 +modified: 20190704155013729 modifier: Mohammad responder: Diego Messa tags: batch solution diff --git a/tiddlers/delete/Delete a List of Tiddlers.tid b/tiddlers/Delete a List of Tiddlers.tid similarity index 97% rename from tiddlers/delete/Delete a List of Tiddlers.tid rename to tiddlers/Delete a List of Tiddlers.tid index 95db6d2..b6c110a 100644 --- a/tiddlers/delete/Delete a List of Tiddlers.tid +++ b/tiddlers/Delete a List of Tiddlers.tid @@ -1,7 +1,7 @@ created: 20181203034851202 creator: Mohammad keywords: delete tiddler list button batch -modified: 20190216180310100 +modified: 20190704155013745 modifier: Mohammad responder: Mark S tags: batch solution diff --git a/tiddlers/Developer Links.tid b/tiddlers/Developer Links.tid index 42c0bb1..ff4c454 100644 --- a/tiddlers/Developer Links.tid +++ b/tiddlers/Developer Links.tid @@ -1,6 +1,6 @@ created: 20180429032905602 creator: Mohammad -modified: 20190216180310009 +modified: 20190704155013542 modifier: Mohammad tags: task title: Developer Links diff --git a/tiddlers/Disable Dragability of an Element.tid b/tiddlers/Disable Dragability of an Element.tid index 080e240..f93a165 100644 --- a/tiddlers/Disable Dragability of an Element.tid +++ b/tiddlers/Disable Dragability of an Element.tid @@ -1,7 +1,7 @@ created: 20190117053859694 creator: Mohammad keywords: css drag drop -modified: 20190216180309817 +modified: 20190704155013524 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Disable Search Autofocus.tid b/tiddlers/Disable Search Autofocus.tid index a5743a1..68be182 100644 --- a/tiddlers/Disable Search Autofocus.tid +++ b/tiddlers/Disable Search Autofocus.tid @@ -1,7 +1,7 @@ created: 20190226102239362 creator: Mohammad keywords: search auto-focus -modified: 20190316114915566 +modified: 20190704155013514 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Display All Core Images in a Table.tid b/tiddlers/Display All Core Images in a Table.tid index a184c0e..0b7be79 100644 --- a/tiddlers/Display All Core Images in a Table.tid +++ b/tiddlers/Display All Core Images in a Table.tid @@ -1,7 +1,7 @@ created: 20181215124917843 creator: Mohammad keywords: shadow tiddlers core image list dynamic-table -modified: 20190216180309772 +modified: 20190704155013503 modifier: Mohammad responder: Jeremy Ruston tags: image solution diff --git a/tiddlers/Display Certain Level of Tag Tree.tid b/tiddlers/Display Certain Level of Tag Tree.tid index d1873e6..0819255 100644 --- a/tiddlers/Display Certain Level of Tag Tree.tid +++ b/tiddlers/Display Certain Level of Tag Tree.tid @@ -1,7 +1,7 @@ created: 20190207175959553 creator: Mohammad keywords: tag hierachy toc -modified: 20190216180309755 +modified: 20190704155014424 modifier: Mohammad responder: Stephan Hradek tags: solution diff --git a/tiddlers/Display Tagged Tiddlers Using ViewTemplate.tid b/tiddlers/Display Tagged Tiddlers Using ViewTemplate.tid index 5e0ba0d..ef2f9e8 100644 --- a/tiddlers/Display Tagged Tiddlers Using ViewTemplate.tid +++ b/tiddlers/Display Tagged Tiddlers Using ViewTemplate.tid @@ -1,7 +1,7 @@ created: 20190208190653532 creator: Mohammad keywords: conditional viewtemplate tagging template -modified: 20190406122515367 +modified: 20190704155014415 modifier: Mohammad responder: Mohammad and Jeremy Ruston tags: $:/_site/tagging tagging solution @@ -13,7 +13,7 @@ url: https://groups.google.com/d/msg/tiddlywiki/xkaG5GRu8jY/asFUUn6NFgAJ : Use conditional view template. !! Example -The below template is show all tiddlers tagged with the parent tiddler as an ordered list: +The below template shows all tiddlers tagged with the parent tiddler as an ordered list: * It checks to see if there is any tiddler tagged with the current tiddler (parent). This is performed by the outer `list` widget. * It then makes a call to `list-links` macro to display the tiddlers using an ordered list. diff --git a/tiddlers/Display all Tiddlers Tagged with.tid b/tiddlers/Display all Tiddlers Tagged with.tid index ef59348..7dfd039 100644 --- a/tiddlers/Display all Tiddlers Tagged with.tid +++ b/tiddlers/Display all Tiddlers Tagged with.tid @@ -1,5 +1,5 @@ created: 20180712102725438 -modified: 20190216180309763 +modified: 20190704155014431 tags: title: Display all Tiddlers Tagged with type: text/vnd.tiddlywiki diff --git a/tiddlers/Documentation Style Guide.tid b/tiddlers/Documentation Style Guide.tid index c4f73db..c50c7c3 100644 --- a/tiddlers/Documentation Style Guide.tid +++ b/tiddlers/Documentation Style Guide.tid @@ -1,8 +1,7 @@ created: 20180413035202974 creator: Mohammad -modified: 20190216180309741 +modified: 20190704155014408 modifier: Mohammad -tags: tiddlyfor title: Documentation Style Guide type: text/vnd.tiddlywiki diff --git a/tiddlers/Draft of 'exmp63_data02 1' by Mohammad.tid b/tiddlers/Draft of 'exmp63_data02 1' by Mohammad.tid new file mode 100644 index 0000000..46422de --- /dev/null +++ b/tiddlers/Draft of 'exmp63_data02 1' by Mohammad.tid @@ -0,0 +1,5 @@ +created: 20190704155014399 +modified: 20190704155014399 +modifier: Mohammad +title: Draft of 'exmp63/data02 1' by Mohammad +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/Drag and Drop of Tag Pills.tid b/tiddlers/Drag and Drop of Tag Pills.tid index bfc39c4..950ff42 100644 --- a/tiddlers/Drag and Drop of Tag Pills.tid +++ b/tiddlers/Drag and Drop of Tag Pills.tid @@ -1,7 +1,7 @@ created: 20190128151059148 creator: Mohammad keywords: drag-and-drop import -modified: 20190216180309730 +modified: 20190704155014383 modifier: Mohammad responder: Tiddlywiki tags: import solution diff --git a/tiddlers/Drag and Drop of a Whole File.tid b/tiddlers/Drag and Drop of a Whole File.tid index d35e6a9..a13aacb 100644 --- a/tiddlers/Drag and Drop of a Whole File.tid +++ b/tiddlers/Drag and Drop of a Whole File.tid @@ -1,7 +1,7 @@ created: 20190129063053898 creator: Mohammad keywords: drag-and-drop import -modified: 20190216180309735 +modified: 20190704155014390 modifier: Mohammad responder: Eric Shulman tags: import solution diff --git a/tiddlers/DynaStyle.tid b/tiddlers/DynaStyle.tid new file mode 100644 index 0000000..2bf8b43 --- /dev/null +++ b/tiddlers/DynaStyle.tid @@ -0,0 +1,14 @@ +created: 20190701141537252 +creator: Mohammad +modified: 20190704155014360 +modifier: Mohammad +tags: mywiki +title: DynaStyle +type: text/vnd.tiddlywiki + +<<>, to create a dynamic stylesheet create a tiddler as below + +<<< +* title: what you want +* tag: `$:/tags/Stylesheet` +* text: + +``` +<$list filter="[tag[exmp64]]"> +<$transclude/> + +``` +<<< + +For details see [[Example 64: Demo]] + +!! Remarks +As [[PMario|https://groups.google.com/d/msg/tiddlywiki/Puq3nkIlMtk/qZLZRd4QDAAJ]] stated the tiddlers that contains the CSS code needs the pragma as below. Have a look at the added "prettylink" rule. The below is valid CSS and the prettylink will be active. + +``` +\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock prettylink + +/* +[[Link to the docs]] +*/ + +.test-style { +color: red; +} +``` + +If you delete the pragma in such example, the pretty link like `[[test */]]` will fool the brower css parser. + +!! More resources +;Use a custom field to style a tiddler +:[[Tiddlywiki custom style faqs|https://tiddlywiki.com/#Q%3A%20How%20can%20I%20use%20a%20custom%20field%20to%20style%20a%20tiddler%3F]] \ No newline at end of file diff --git a/tiddlers/Effects.CSS.tid b/tiddlers/Effects.CSS.tid index dab0035..6b4fc6f 100644 --- a/tiddlers/Effects.CSS.tid +++ b/tiddlers/Effects.CSS.tid @@ -2,11 +2,10 @@ created: 20181203161440999 creator: Mohammad description: Performant CSS transitions & animations on GitHub developer: h5bp -modified: 20190216180309724 +modified: 20190704155014354 modifier: Mohammad tags: Links title: Effects.CSS type: text/vnd.tiddlywiki url: http://h5bp.github.io/Effeckt.css/ -wiki-name: - +wiki-name: \ No newline at end of file diff --git a/tiddlers/Embed SVG ICONS BUTTONS.tid b/tiddlers/Embed SVG ICONS BUTTONS.tid index 291ce83..7a5d57d 100644 --- a/tiddlers/Embed SVG ICONS BUTTONS.tid +++ b/tiddlers/Embed SVG ICONS BUTTONS.tid @@ -1,7 +1,7 @@ created: 20181112070818002 creator: Mohammad keywords: svg icon button page-controls -modified: 20190224163832234 +modified: 20190704155014346 modifier: Mohammad responder: Thomas Elmiger tags: task solution diff --git a/tiddlers/Empty Filter.tid b/tiddlers/Empty Filter.tid index 0cd0321..93995b6 100644 --- a/tiddlers/Empty Filter.tid +++ b/tiddlers/Empty Filter.tid @@ -1,7 +1,7 @@ created: 20181002193754623 creator: Mohammad keywords: filter empty -modified: 20190216180309712 +modified: 20190704155014337 modifier: Mohammad responder: Eric Shulman tags: filter solution diff --git a/tiddlers/Encrypt Tiddler Plugin.tid b/tiddlers/Encrypt Tiddler Plugin.tid index a443d62..06343a8 100644 --- a/tiddlers/Encrypt Tiddler Plugin.tid +++ b/tiddlers/Encrypt Tiddler Plugin.tid @@ -2,7 +2,7 @@ created: 20181019201202206 creator: Mohammad description: This plugin adds the ability to encrypt your tiddlers individually. This have several advantages: developer: Danielo Rodriguez -modified: 20190216180309704 +modified: 20190704155014330 modifier: Mohammad tags: Links title: Encrypt Tiddler Plugin diff --git a/tiddlers/Eric Shulman.tid b/tiddlers/Eric Shulman.tid index 84ae394..2cfe506 100644 --- a/tiddlers/Eric Shulman.tid +++ b/tiddlers/Eric Shulman.tid @@ -1,6 +1,6 @@ created: 20190203185332011 creator: Mohammad -modified: 20190216180309696 +modified: 20190704155014325 modifier: Mohammad tags: title: Eric Shulman diff --git a/tiddlers/EscapeCSS Plugin.tid b/tiddlers/EscapeCSS Plugin.tid index d4e9ac2..8e2f2be 100644 --- a/tiddlers/EscapeCSS Plugin.tid +++ b/tiddlers/EscapeCSS Plugin.tid @@ -2,7 +2,7 @@ created: 20190109113948094 creator: Mohammad description: It's all about the escapecss[] filter that creates valid css selectors from whatever you give it to eat. It handles titles with any kind of charachters including quotes, slashes, brackets developer: Simon Huber -modified: 20190216180309689 +modified: 20190704155014318 modifier: Mohammad tags: Links title: EscapeCSS Plugin diff --git a/tiddlers/Exact Phrase Search.tid b/tiddlers/Exact Phrase Search.tid index 053c060..984878f 100644 --- a/tiddlers/Exact Phrase Search.tid +++ b/tiddlers/Exact Phrase Search.tid @@ -1,7 +1,7 @@ created: 20180708150613767 creator: Mohammad keywords: exact search -modified: 20190216180311079 +modified: 20190704155014308 modifier: Mohammad responder: Jed Carty tags: solution diff --git a/tiddlers/Example 10_.tid b/tiddlers/Example 10_.tid index 7e991d0..0dcf098 100644 --- a/tiddlers/Example 10_.tid +++ b/tiddlers/Example 10_.tid @@ -1,6 +1,6 @@ created: 20181015195322748 creator: Mohammad -modified: 20190224163832182 +modified: 20190704155014298 modifier: Mohammad tags: exmp10 period title: Example 10: diff --git a/tiddlers/Example 13_ Macro and Variable Number of Arguments.tid b/tiddlers/Example 13_ Macro and Variable Number of Arguments.tid index d8e572e..9b5c41e 100644 --- a/tiddlers/Example 13_ Macro and Variable Number of Arguments.tid +++ b/tiddlers/Example 13_ Macro and Variable Number of Arguments.tid @@ -1,6 +1,6 @@ created: 20181121140930366 creator: Mohammad -modified: 20190216180311044 +modified: 20190704155014292 modifier: Mohammad tags: exmp13 title: Example 13: Macro and Variable Number of Arguments diff --git a/tiddlers/Example 14_ Embeding Media.tid b/tiddlers/Example 14_ Embeding Media.tid index 1106b27..c932a47 100644 --- a/tiddlers/Example 14_ Embeding Media.tid +++ b/tiddlers/Example 14_ Embeding Media.tid @@ -1,6 +1,6 @@ created: 20181121150521386 creator: Mohammad -modified: 20190216180310943 +modified: 20190704155014285 modifier: Mohammad tags: exmp14 title: Example 14: Embeding Media diff --git a/tiddlers/Example 16_ Demo.tid b/tiddlers/Example 16_ Demo.tid index 3181664..b05d06c 100644 --- a/tiddlers/Example 16_ Demo.tid +++ b/tiddlers/Example 16_ Demo.tid @@ -1,6 +1,6 @@ created: 20181209163657242 creator: Mohammad -modified: 20190216180310892 +modified: 20190704155014277 modifier: Mohammad tags: erlang_code exmp16 title: Example 16: Demo diff --git a/tiddlers/Example 16_ Stylesheet.css.meta b/tiddlers/Example 16_ Stylesheet.css.meta index 401e8bc..2cb5e31 100644 --- a/tiddlers/Example 16_ Stylesheet.css.meta +++ b/tiddlers/Example 16_ Stylesheet.css.meta @@ -1,7 +1,7 @@ created: 20181209163508496 creator: Mohammad -modified: 20190216180310886 +modified: 20190704155014268 modifier: Mohammad tags: exmp16 $:/tags/Stylesheet title: Example 16: Stylesheet -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/Example 16_ ViewTemplate.tid b/tiddlers/Example 16_ ViewTemplate.tid index f707a6d..dd5ab6a 100644 --- a/tiddlers/Example 16_ ViewTemplate.tid +++ b/tiddlers/Example 16_ ViewTemplate.tid @@ -1,6 +1,6 @@ created: 20181209163220228 creator: Mohammad -modified: 20190216180310879 +modified: 20190704155014263 modifier: Mohammad tags: exmp16 $:/tags/ViewTemplate title: Example 16: ViewTemplate diff --git a/tiddlers/Exmple 18_ Conditionally Change Background Color.tid b/tiddlers/Example 18_ Conditionally Change Background Color.tid similarity index 89% rename from tiddlers/Exmple 18_ Conditionally Change Background Color.tid rename to tiddlers/Example 18_ Conditionally Change Background Color.tid index 64cbe8e..3865cd9 100644 --- a/tiddlers/Exmple 18_ Conditionally Change Background Color.tid +++ b/tiddlers/Example 18_ Conditionally Change Background Color.tid @@ -1,10 +1,10 @@ created: 20181223134114467 creator: Mohammad description: do not delete for description see [[Stylesheet with Conditional Rules]] -modified: 20190216180314426 +modified: 20190704155014258 modifier: Mohammad tags: exmp18 -title: Exmple 18: Conditionally Change Background Color +title: Example 18: Conditionally Change Background Color type: text/vnd.tiddlywiki \define if-sidebar-visible(text) diff --git a/tiddlers/Example 19_ Embeding Video.tid b/tiddlers/Example 19_ Embeding Video.tid index bd2e67f..a69d9c8 100644 --- a/tiddlers/Example 19_ Embeding Video.tid +++ b/tiddlers/Example 19_ Embeding Video.tid @@ -1,6 +1,6 @@ created: 20181231195549381 creator: Mohammad -modified: 20190216180310872 +modified: 20190704155014253 modifier: Mohammad tags: video html5 exmp19 title: Example 19: Embeding Video diff --git a/tiddlers/Example 20_ Using subfilter.tid b/tiddlers/Example 20_ Using subfilter.tid index 40ba95b..a235a56 100644 --- a/tiddlers/Example 20_ Using subfilter.tid +++ b/tiddlers/Example 20_ Using subfilter.tid @@ -1,5 +1,5 @@ created: 20190107200516137 -modified: 20190216180310710 +modified: 20190704155014248 tags: exmp20 title: Example 20: Using subfilter type: text/vnd.tiddlywiki diff --git a/tiddlers/Example 21_ List Tags Based on a Field.tid b/tiddlers/Example 21_ List Tags Based on a Field.tid index a555540..ee4caed 100644 --- a/tiddlers/Example 21_ List Tags Based on a Field.tid +++ b/tiddlers/Example 21_ List Tags Based on a Field.tid @@ -1,6 +1,6 @@ created: 20190109103527391 creator: Mohammad -modified: 20190216180310664 +modified: 20190704155014241 modifier: Mohammad tags: exmp21 title: Example 21: List Tags Based on a Field diff --git a/tiddlers/Example 30_ Colored Timeline.css.meta b/tiddlers/Example 30_ Colored Timeline.css.meta index adb49f2..6a88472 100644 --- a/tiddlers/Example 30_ Colored Timeline.css.meta +++ b/tiddlers/Example 30_ Colored Timeline.css.meta @@ -1,7 +1,7 @@ created: 20190122143757033 creator: Mohammad -modified: 20190216180310655 +modified: 20190704155014232 modifier: Mohammad tags: $:/tags/Stylesheet exmp30 title: Example 30: Colored Timeline -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/Example 31_ List Few Last Modified Tiddlers.tid b/tiddlers/Example 31_ List Few Last Modified Tiddlers.tid index 406dd2f..bc4c8a8 100644 --- a/tiddlers/Example 31_ List Few Last Modified Tiddlers.tid +++ b/tiddlers/Example 31_ List Few Last Modified Tiddlers.tid @@ -1,6 +1,6 @@ created: 20190127103133478 creator: Mohammad -modified: 20190216180310645 +modified: 20190704155014226 modifier: Mohammad tags: exmp31 title: Example 31: List Few Last Modified Tiddlers diff --git a/tiddlers/Example 32_ Test.html.txt.meta b/tiddlers/Example 32_ Test.html.txt.meta index 0f0c660..7ea0177 100644 --- a/tiddlers/Example 32_ Test.html.txt.meta +++ b/tiddlers/Example 32_ Test.html.txt.meta @@ -1,8 +1,8 @@ created: 20190130165026738 creator: Mohammad description: how to load a html tiddler using ifram -modified: 20190216180310638 +modified: 20190704155014220 modifier: Mohammad tags: exmp32 title: Example 32: Test.html -type: text/plain +type: text/plain \ No newline at end of file diff --git a/tiddlers/Example 33_ Open all Tiddlers Tagged with batch.tid b/tiddlers/Example 33_ Open all Tiddlers Tagged with batch.tid index 580c848..a8c88d3 100644 --- a/tiddlers/Example 33_ Open all Tiddlers Tagged with batch.tid +++ b/tiddlers/Example 33_ Open all Tiddlers Tagged with batch.tid @@ -1,6 +1,6 @@ created: 20190131154954230 creator: Mohammad -modified: 20190216180310632 +modified: 20190704155014214 modifier: Mohammad tags: exmp33 title: Example 33: Open all Tiddlers Tagged with batch diff --git a/tiddlers/Example 36_ Global Macro.tid b/tiddlers/Example 36_ Global Macro.tid index a7727bd..df23040 100644 --- a/tiddlers/Example 36_ Global Macro.tid +++ b/tiddlers/Example 36_ Global Macro.tid @@ -1,6 +1,6 @@ created: 20190201123001573 creator: Mohammad -modified: 20190216180310625 +modified: 20190704155014208 modifier: Mohammad tags: $:/tags/Macro exmp36 title: Example 36: Global Macro diff --git a/tiddlers/Example 36_ Private Macro.tid b/tiddlers/Example 36_ Private Macro.tid index 8b4fd64..ca8bd83 100644 --- a/tiddlers/Example 36_ Private Macro.tid +++ b/tiddlers/Example 36_ Private Macro.tid @@ -1,6 +1,6 @@ created: 20190201123048206 creator: Mohammad -modified: 20190216180310619 +modified: 20190704155013917 modifier: Mohammad tags: exmp36 mycode title: Example 36: Private Macro diff --git a/tiddlers/Example 37_ Split Date.tid b/tiddlers/Example 37_ Split Date.tid index 54d9185..d8658f8 100644 --- a/tiddlers/Example 37_ Split Date.tid +++ b/tiddlers/Example 37_ Split Date.tid @@ -1,6 +1,6 @@ created: 20190202190402923 creator: Mohammad -modified: 20190216180310611 +modified: 20190704155013910 modifier: Mohammad tags: exmp37 title: Example 37: Split Date diff --git a/tiddlers/Example 43_ Macro Overloading.tid b/tiddlers/Example 43_ Macro Overloading.tid index 31fbc8d..3cad4bf 100644 --- a/tiddlers/Example 43_ Macro Overloading.tid +++ b/tiddlers/Example 43_ Macro Overloading.tid @@ -1,7 +1,7 @@ created: 20190207122736640 creator: Mohammad description: do not delete, this is part of exmp43 -modified: 20190216180310602 +modified: 20190704155013902 modifier: Mohammad tags: exmp43 title: Example 43: Macro Overloading diff --git a/tiddlers/Example 46_ Sort Tiddlers in Tag Pill.tid b/tiddlers/Example 46_ Sort Tiddlers in Tag Pill.tid index 2f2f806..beccf96 100644 --- a/tiddlers/Example 46_ Sort Tiddlers in Tag Pill.tid +++ b/tiddlers/Example 46_ Sort Tiddlers in Tag Pill.tid @@ -1,6 +1,6 @@ created: 20190208093239721 creator: Mohammad -modified: 20190216180310594 +modified: 20190704155013894 modifier: Mohammad tags: exmp46 title: Example 46: Sort Tiddlers in Tag Pill diff --git a/tiddlers/Example 48_ Sort Tag Wizard.tid b/tiddlers/Example 48_ Sort Tag Wizard.tid index a39c30e..239917c 100644 --- a/tiddlers/Example 48_ Sort Tag Wizard.tid +++ b/tiddlers/Example 48_ Sort Tag Wizard.tid @@ -1,6 +1,6 @@ created: 20190211075943439 creator: Mohammad -modified: 20190216180310588 +modified: 20190704155014697 modifier: Mohammad tags: exmp48 title: Example 48: Sort Tag Wizard diff --git a/tiddlers/Example 49_ Count Items in Tiddler Fields.tid b/tiddlers/Example 49_ Count Items in Tiddler Fields.tid index 50b0f8f..424f860 100644 --- a/tiddlers/Example 49_ Count Items in Tiddler Fields.tid +++ b/tiddlers/Example 49_ Count Items in Tiddler Fields.tid @@ -2,7 +2,7 @@ created: 20190211111413668 creator: Mohammad foo: a [[title with space]] c d e f keywords: count tiddler field -modified: 20190216180310582 +modified: 20190704155014688 modifier: Mohammad tags: exmp49 title: Example 49: Count Items in Tiddler Fields diff --git a/tiddlers/Example 50_ Tiddler Title with Zero Padded Number.tid b/tiddlers/Example 50_ Tiddler Title with Zero Padded Number.tid index 1142724..93aa953 100644 --- a/tiddlers/Example 50_ Tiddler Title with Zero Padded Number.tid +++ b/tiddlers/Example 50_ Tiddler Title with Zero Padded Number.tid @@ -1,6 +1,6 @@ created: 20190223065144463 creator: Mohammad -modified: 20190316114915179 +modified: 20190704155014680 modifier: Mohammad tags: exmp50 title: Example 50: Tiddler Title with Zero Padded Number diff --git a/tiddlers/Example 51_ Rules Only Pragma.tid b/tiddlers/Example 51_ Rules Only Pragma.tid index f55d402..4b54347 100644 --- a/tiddlers/Example 51_ Rules Only Pragma.tid +++ b/tiddlers/Example 51_ Rules Only Pragma.tid @@ -1,6 +1,6 @@ created: 20190227131118596 creator: Mohammad -modified: 20190316114915166 +modified: 20190704155014673 modifier: Mohammad tags: exmp51 title: Example 51: Rules Only Pragma diff --git a/tiddlers/Example 52_ Check if Variable Macro Exists.tid b/tiddlers/Example 52_ Check if Variable Macro Exists.tid index 9ff7708..966689c 100644 --- a/tiddlers/Example 52_ Check if Variable Macro Exists.tid +++ b/tiddlers/Example 52_ Check if Variable Macro Exists.tid @@ -1,6 +1,6 @@ created: 20190228054349538 creator: Mohammad -modified: 20190316114915156 +modified: 20190704155014664 modifier: Mohammad tags: exmp52 title: Example 52: Check if Variable Macro Exists diff --git a/tiddlers/Example 53_ Greater and Less Than Macro.tid b/tiddlers/Example 53_ Greater and Less Than Macro.tid index b71a403..fa6a02e 100644 --- a/tiddlers/Example 53_ Greater and Less Than Macro.tid +++ b/tiddlers/Example 53_ Greater and Less Than Macro.tid @@ -1,6 +1,6 @@ created: 20190312191650597 creator: Mohammad -modified: 20190316114915149 +modified: 20190704155014657 modifier: Mohammad tags: exmp53 title: Example 53: Greater and Less Than Macro diff --git a/tiddlers/Example 54_ Which Tiddler is Newer.tid b/tiddlers/Example 54_ Which Tiddler is Newer.tid index ec64652..405185d 100644 --- a/tiddlers/Example 54_ Which Tiddler is Newer.tid +++ b/tiddlers/Example 54_ Which Tiddler is Newer.tid @@ -1,6 +1,6 @@ created: 20190314201834721 creator: Mohammad -modified: 20190406122515783 +modified: 20190704155014652 modifier: Mohammad tags: exmp54 title: Example 54: Which Tiddler is Newer diff --git a/tiddlers/Example 57_ Doubly Sorted Table.tid b/tiddlers/Example 57_ Doubly Sorted Table.tid index 856a868..414f27b 100644 --- a/tiddlers/Example 57_ Doubly Sorted Table.tid +++ b/tiddlers/Example 57_ Doubly Sorted Table.tid @@ -1,6 +1,6 @@ created: 20190401052541941 creator: Mohammad -modified: 20190406122515776 +modified: 20190704155014641 modifier: Mohammad tags: exmp57 title: Example 57: Doubly Sorted Table diff --git a/tiddlers/Example 58_ Logic of Set Widget.tid b/tiddlers/Example 58_ Logic of Set Widget.tid index 13fdcf8..916d287 100644 --- a/tiddlers/Example 58_ Logic of Set Widget.tid +++ b/tiddlers/Example 58_ Logic of Set Widget.tid @@ -1,7 +1,7 @@ created: 20190331174211304 creator: Mohammad keywords: set widget logic -modified: 20190406122515768 +modified: 20190704155014632 modifier: Mohammad responder: Eric Shulman tags: exmp58 solution diff --git a/tiddlers/Example 60_ Demo of Tabs Macro with Template.tid b/tiddlers/Example 60_ Demo of Tabs Macro with Template.tid new file mode 100644 index 0000000..9b531a2 --- /dev/null +++ b/tiddlers/Example 60_ Demo of Tabs Macro with Template.tid @@ -0,0 +1,22 @@ +created: 20190608194339648 +creator: Mohammad +modified: 20190704155014623 +modifier: Mohammad +tags: exmp60 +title: Example 60: Demo of Tabs Macro with Template +type: text/vnd.tiddlywiki + +This tiddler shows demo for <>, in which ''tabs'' macro is used to display the content of tiddlers they have reference to fields or `currentTiddler` variavle + +* ''Works'' by using template +Here a template [[exmp60/template]] is used here to solve the issue of `{{!!field-name}}` referencing (transclusion). +<$macrocall $name="wikitext-example-without-html" +src="""><> +"""/> + +*''Does not work'', if template is not used +<$macrocall $name="wikitext-example-without-html" +src="""><> +"""/> + +<> \ No newline at end of file diff --git a/tiddlers/Example 61_ Pastille Macro.tid b/tiddlers/Example 61_ Pastille Macro.tid new file mode 100644 index 0000000..39fed90 --- /dev/null +++ b/tiddlers/Example 61_ Pastille Macro.tid @@ -0,0 +1,45 @@ +color: #ff8000 +created: 20190615174206162 +creator: Mohammad +modified: 20190704155014614 +modifier: Mohammad +tags: exmp61 +title: Example 61: Pastille Macro +type: text/vnd.tiddlywiki + +\define pastille(tagName) + + + +\end + +\define circle(color) + +>/> + +\end + +Sample example shows a macro create a svg where color is given to macro parameter. + +<$macrocall $name="wikitext-example-without-html" +src="""<> +"""/> + +!! Example ii +The circle macro is a simple form of pastille macro as below + +``` +\define circle(color) + +>/> + +\end +``` + +* Demo +<$macrocall $name="wikitext-example-without-html" +src=""" +<$list filter="red blue green cyan yellow orange purple " variable=color> +<$macrocall $name="circle" color=<> /> + +"""/> \ No newline at end of file diff --git a/tiddlers/Example 62_ Conditional Summary.tid b/tiddlers/Example 62_ Conditional Summary.tid new file mode 100644 index 0000000..7023c8a --- /dev/null +++ b/tiddlers/Example 62_ Conditional Summary.tid @@ -0,0 +1,12 @@ +created: 20190616030744615 +creator: Mohammad +modified: 20190704155014605 +modifier: Mohammad +summary: This is a summary filed displaying on the tiddler. +tags: exmp62 +title: Example 62: Conditional Summary +type: text/vnd.tiddlywiki + +This is a demo shows how [[Show a Summary on Tiddler]] can be implemented. + +The example uses a viewtemplate tiddler [[$:/.tb/ui/ViewTemplate/summary]] \ No newline at end of file diff --git a/tiddlers/Example 64_ Demo.tid b/tiddlers/Example 64_ Demo.tid new file mode 100644 index 0000000..cf4eeaf --- /dev/null +++ b/tiddlers/Example 64_ Demo.tid @@ -0,0 +1,25 @@ +created: 20190701064727700 +creator: Mohammad +modified: 20190704155014593 +modifier: Mohammad +tags: exmp64 +title: Example 64: Demo +type: text/vnd.tiddlywiki + +The below example shows how `mycls` CSS class is generated using dynamic stylesheet. + +The `mycls` is generated dynamically from several other tiddlers has CSS in [[exmp64/stylesheet]]. + +The [[exmp64/stylesheet]] is tagged with `$:/tags/Stylesheet` and so it is applied as a CSS stylesheet by Tiddlywiki. + + +<$macrocall $name="wikitext-example-without-html" +src="""
    +This is a DEMO! +
    +"""/> + +!!Remarks +The below tiddlers are used to create this demo + +<]" type:ol>> \ No newline at end of file diff --git a/tiddlers/Example Append Operator.tid b/tiddlers/Example Append Operator.tid index 9578429..6cf7aa1 100644 --- a/tiddlers/Example Append Operator.tid +++ b/tiddlers/Example Append Operator.tid @@ -1,6 +1,6 @@ created: 20181220095814770 creator: Mohammad -modified: 20190216180310576 +modified: 20190704155014586 modifier: Mohammad tags: operator append title: Example Append Operator diff --git a/tiddlers/Example List Numbers Using BTC Method.tid b/tiddlers/Example List Numbers Using BTC Method.tid index de9c4a1..1694245 100644 --- a/tiddlers/Example List Numbers Using BTC Method.tid +++ b/tiddlers/Example List Numbers Using BTC Method.tid @@ -1,7 +1,7 @@ created: 20180628031507794 creator: Mohammad list: -modified: 20190216180310570 +modified: 20190704155014577 modifier: Mohammad tags: 100.50 title: Example List Numbers Using BTC Method diff --git a/tiddlers/Example_ Add_Remove DataTiddler Indexes.tid b/tiddlers/Example_ Add_Remove DataTiddler Indexes.tid index ea841ce..6efa205 100644 --- a/tiddlers/Example_ Add_Remove DataTiddler Indexes.tid +++ b/tiddlers/Example_ Add_Remove DataTiddler Indexes.tid @@ -1,6 +1,6 @@ created: 20190207071205610 creator: Mohammad -modified: 20190216180310564 +modified: 20190704155014568 modifier: Mohammad tags: datatiddler exmp40 title: Example: Add/Remove DataTiddler Indexes diff --git a/tiddlers/Exclude Tag in TOC Macro.tid b/tiddlers/Exclude Tag in TOC Macro.tid index d4b5286..d2787b5 100644 --- a/tiddlers/Exclude Tag in TOC Macro.tid +++ b/tiddlers/Exclude Tag in TOC Macro.tid @@ -1,7 +1,7 @@ created: 20181004081600623 creator: Mohammad keywords: toc macro exclude tag toc-selective-expandable -modified: 20190216180310557 +modified: 20190704155014554 modifier: Mohammad responder: BurningTreeC tags: solution toc diff --git a/tiddlers/Exmp02-P01.tid b/tiddlers/Exmp02-P01.tid index 7f76e12..d14ec97 100644 --- a/tiddlers/Exmp02-P01.tid +++ b/tiddlers/Exmp02-P01.tid @@ -1,6 +1,6 @@ created: 20181031035633435 creator: Mohammad -modified: 20190216180310541 +modified: 20190704155014532 modifier: Mohammad tags: exmp02 title: Exmp02-P01 diff --git a/tiddlers/Exmp02-P02.tid b/tiddlers/Exmp02-P02.tid index 3242e94..5f65259 100644 --- a/tiddlers/Exmp02-P02.tid +++ b/tiddlers/Exmp02-P02.tid @@ -1,6 +1,6 @@ created: 20181031040230275 creator: Mohammad -modified: 20190216180310535 +modified: 20190704155014527 modifier: Mohammad tags: exmp02 title: Exmp02-P02 diff --git a/tiddlers/Exmp02-P03 Space in Title.tid b/tiddlers/Exmp02-P03 Space in Title.tid index b1d39c9..9358b49 100644 --- a/tiddlers/Exmp02-P03 Space in Title.tid +++ b/tiddlers/Exmp02-P03 Space in Title.tid @@ -1,6 +1,6 @@ created: 20190201083750265 creator: Mohammad -modified: 20190216180310529 +modified: 20190704155014516 modifier: Mohammad tags: exmp02 title: Exmp02-P03 Space in Title diff --git a/tiddlers/Exmp15-P01.tid b/tiddlers/Exmp15-P01.tid index 2696f36..289b6ea 100644 --- a/tiddlers/Exmp15-P01.tid +++ b/tiddlers/Exmp15-P01.tid @@ -1,7 +1,7 @@ color: #0000ff created: 20181122043102246 creator: Mohammad -modified: 20190216180310515 +modified: 20190704155014505 modifier: Mohammad tags: exmp15 title: Exmp15-P01 diff --git a/tiddlers/Exmp15-P02.tid b/tiddlers/Exmp15-P02.tid index cd05ac9..75cef81 100644 --- a/tiddlers/Exmp15-P02.tid +++ b/tiddlers/Exmp15-P02.tid @@ -1,7 +1,7 @@ color: #ff0000 created: 20181122043203570 creator: Mohammad -modified: 20190216180310509 +modified: 20190704155014499 modifier: Mohammad tags: exmp15 title: Exmp15-P02 diff --git a/tiddlers/Exmp15-Template.tid b/tiddlers/Exmp15-Template.tid index e25a61c..59cb194 100644 --- a/tiddlers/Exmp15-Template.tid +++ b/tiddlers/Exmp15-Template.tid @@ -1,7 +1,7 @@ created: 20181122042716132 creator: Mohammad description: Part of exmp15 solution -modified: 20190216180310500 +modified: 20190704155014492 modifier: Mohammad tags: title: Exmp15-Template diff --git a/tiddlers/Exmp29-P01.tid b/tiddlers/Exmp29-P01.tid index 7a6fe34..f54d738 100644 --- a/tiddlers/Exmp29-P01.tid +++ b/tiddlers/Exmp29-P01.tid @@ -1,6 +1,6 @@ created: 20190121044356711 creator: Mohammad -modified: 20190216180314814 +modified: 20190704155014467 modifier: Mohammad tags: exmp29 title: Exmp29-P01 diff --git a/tiddlers/Exmp29-P02.tid b/tiddlers/Exmp29-P02.tid index ef8beab..23f01a4 100644 --- a/tiddlers/Exmp29-P02.tid +++ b/tiddlers/Exmp29-P02.tid @@ -1,6 +1,6 @@ created: 20190121044438200 creator: Mohammad -modified: 20190216180314807 +modified: 20190704155014461 modifier: Mohammad tags: exmp29 title: Exmp29-P02 diff --git a/tiddlers/Exmp29-P03.tid b/tiddlers/Exmp29-P03.tid index 02d83ee..9d93f35 100644 --- a/tiddlers/Exmp29-P03.tid +++ b/tiddlers/Exmp29-P03.tid @@ -1,6 +1,6 @@ created: 20190121044445611 creator: Mohammad -modified: 20190216180314726 +modified: 20190704155014454 modifier: Mohammad tags: exmp29 title: Exmp29-P03 diff --git a/tiddlers/Export Latest Changes in Current Session.tid b/tiddlers/Export Latest Changes in Current Session.tid index 973b4a3..bb727c4 100644 --- a/tiddlers/Export Latest Changes in Current Session.tid +++ b/tiddlers/Export Latest Changes in Current Session.tid @@ -1,7 +1,7 @@ created: 20190129072819068 creator: Mohammad keywords: last modified change current-session haschanged emergency save -modified: 20190216180314406 +modified: 20190704155014943 modifier: Mohammad responder: Anthony Muscio (TonyM) tags: solution diff --git a/tiddlers/Export a List of Tiddlers.tid b/tiddlers/Export a List of Tiddlers.tid index edcefeb..4a75c5e 100644 --- a/tiddlers/Export a List of Tiddlers.tid +++ b/tiddlers/Export a List of Tiddlers.tid @@ -2,7 +2,7 @@ created: 20190201130724011 creator: Mohammad description: This a quick exporting tool. developer: Jed Carty -modified: 20190216180314419 +modified: 20190704155014950 modifier: Mohammad tags: Links title: Export a List of Tiddlers diff --git a/tiddlers/External Images and External Thumbnails.tid b/tiddlers/External Images and External Thumbnails.tid index ef557d8..4ecd6cd 100644 --- a/tiddlers/External Images and External Thumbnails.tid +++ b/tiddlers/External Images and External Thumbnails.tid @@ -1,7 +1,7 @@ created: 20181126050910359 creator: Mohammad keywords: image external -modified: 20190216180314396 +modified: 20190704155014933 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Fake and Inactive Button.tid b/tiddlers/Fake and Inactive Button.tid index 4193d35..bbb7b5d 100644 --- a/tiddlers/Fake and Inactive Button.tid +++ b/tiddlers/Fake and Inactive Button.tid @@ -1,6 +1,6 @@ created: 20180607182751008 creator: Mohammad -modified: 20190216180314387 +modified: 20190704155014926 modifier: Mohammad tags: developer learning title: Fake and Inactive Button diff --git a/tiddlers/Farzin.tid b/tiddlers/Farzin.tid index caf5979..93a535a 100644 --- a/tiddlers/Farzin.tid +++ b/tiddlers/Farzin.tid @@ -1,5 +1,5 @@ created: 20180620192050560 -modified: 20190216180314377 +modified: 20190704155015048 modifier: Mohammad tags: exmp01 contact colleague title: Farzin diff --git a/tiddlers/Favorites.json b/tiddlers/Favorites.json new file mode 100644 index 0000000..9a567c7 --- /dev/null +++ b/tiddlers/Favorites.json @@ -0,0 +1,16 @@ +[ + { + "created": "20181008201248802", + "title": "Favorites", + "text": "", + "creator": "Mohammad", + "modified": "20190704155015039", + "modifier": "Mohammad", + "tags": "Links", + "type": "text/vnd.tiddlywiki", + "description": "Simply add/remove tiddler to favorites tab
    A new release published at https://github.com/kookma/Reveal-Gradually ", + "developer": "Andrew Harrison", + "name": "Favorites", + "url": "http://favorites.tiddlyspot.com/" + } +] \ No newline at end of file diff --git a/tiddlers/Favorites.tid b/tiddlers/Favorites.tid deleted file mode 100644 index 15ff073..0000000 --- a/tiddlers/Favorites.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20181008201248802 -creator: Mohammad -description: Simply add/remove tiddler to favorites tab
    A new release published at https://github.com/kookma/Reveal-Gradually -developer: Andrew Harrison -modified: 20190216180314369 -modifier: Mohammad -name: Favorites -tags: Links -title: Favorites -type: text/vnd.tiddlywiki -url: http://favorites.tiddlyspot.com/ - diff --git a/tiddlers/Feather Icon Plugin.tid b/tiddlers/Feather Icon Plugin.tid new file mode 100644 index 0000000..da328be --- /dev/null +++ b/tiddlers/Feather Icon Plugin.tid @@ -0,0 +1,14 @@ +created: 20190509163225695 +creator: Mohammad +keywords: +modified: 20190704155015033 +modifier: Mohammad +responder: Sylvain Comte +tags: task solution +title: Feather Icon Plugin +type: text/vnd.tiddlywiki +url: + +<> + +https://groups.google.com/d/msg/tiddlywiki/NTFr-oFJD4E/iFN6Rz__AwAJ \ No newline at end of file diff --git a/tiddlers/Field Value as DataTiddler Index.tid b/tiddlers/Field Value as DataTiddler Index.tid index ad56b10..a70a598 100644 --- a/tiddlers/Field Value as DataTiddler Index.tid +++ b/tiddlers/Field Value as DataTiddler Index.tid @@ -1,7 +1,7 @@ created: 20181117200222608 creator: Mohammad keywords: datatiddler dictionary transclude field index -modified: 20190216180314355 +modified: 20190704155015027 modifier: Mohammad responder: BurningTreeC tags: solution datatiddler diff --git a/tiddlers/Field Values of Several Tiddlers.tid b/tiddlers/Field Values of Several Tiddlers.tid new file mode 100644 index 0000000..cf0c4df --- /dev/null +++ b/tiddlers/Field Values of Several Tiddlers.tid @@ -0,0 +1,36 @@ +created: 20190629044747705 +creator: Mohammad +keywords: field value filter get operator each +modified: 20190704155015221 +modifier: Mohammad +responder: TonyM +tags: exmp63 solution +title: Field Values of Several Tiddlers +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/368NGw5u-oM/Gd9XH0rcCgAJ + +; Assume several tiddlers have a common tag and a field called `ingredient`, how to display the value of the `ingredient` from all tiddlers with the tag? +: Use the `list` widget with `get` operator. Each input title is processed in turn. If the corresponding tiddler contains field `ingredient`, and the value of this field is //not empty//, then its value is appended to the output. For more information see [1]. + +!! Example +The below example displays the value of ingredient field from sveral tiddlers tagged with <> + +<$macrocall $name="wikitext-example-without-html" +src="""><$list filter="[tag[exmp63]get[ingredient]]"> +<>
    + +"""/> + +!! Duplicated values +; If there are several tiddlers with same ingredent value, how list (display) the value only one time (no repeated values)? +: Use the `each` operator, to remove duplicates. See [2] below + +``` +<$list filter="[tag[food]each[ingredient]get[ingredient]]"> + + +``` + +!! Reference +# https://tiddlywiki.com/#get%20Operator +# https://tiddlywiki.com/#each%20Operator \ No newline at end of file diff --git a/tiddlers/Fig01.description.tid b/tiddlers/Fig01.description.tid index 41cfd49..99dd26b 100644 --- a/tiddlers/Fig01.description.tid +++ b/tiddlers/Fig01.description.tid @@ -1,7 +1,7 @@ created: 20181007140708756 creator: Mohammad description: part of example 9, don't delete. See tag exmp09 -modified: 20190216180314337 +modified: 20190704155015211 modifier: Mohammad title: Fig01.description type: text/vnd.tiddlywiki diff --git a/tiddlers/Fig01.tid b/tiddlers/Fig01.tid index 86bfaa1..e1c7fe3 100644 --- a/tiddlers/Fig01.tid +++ b/tiddlers/Fig01.tid @@ -1,6 +1,6 @@ created: 20181007140630380 creator: Mohammad -modified: 20190216180314344 +modified: 20190704155015215 modifier: Mohammad tags: exmp09 title: Fig01 diff --git a/tiddlers/Fig02.description.tid b/tiddlers/Fig02.description.tid index 5c208c9..693c94a 100644 --- a/tiddlers/Fig02.description.tid +++ b/tiddlers/Fig02.description.tid @@ -1,7 +1,7 @@ created: 20181007140802151 creator: Mohammad description: part of example 9, don't delete. See tag exmp09 -modified: 20190216180314320 +modified: 20190704155015201 modifier: Mohammad title: Fig02.description type: text/vnd.tiddlywiki diff --git a/tiddlers/Fig02.tid b/tiddlers/Fig02.tid index 0603616..b52eb8d 100644 --- a/tiddlers/Fig02.tid +++ b/tiddlers/Fig02.tid @@ -1,6 +1,6 @@ created: 20181007140833784 creator: Mohammad -modified: 20190216180314325 +modified: 20190704155015206 modifier: Mohammad tags: exmp09 title: Fig02 diff --git a/tiddlers/Filename for Save Wiki Button.tid b/tiddlers/Filename for Save Wiki Button.tid index ab3addd..af99d96 100644 --- a/tiddlers/Filename for Save Wiki Button.tid +++ b/tiddlers/Filename for Save Wiki Button.tid @@ -1,6 +1,6 @@ created: 20190207035530432 creator: Mohammad -modified: 20190224163832743 +modified: 20190704155015196 modifier: Mohammad tags: tip title: Filename for Save Wiki Button diff --git a/tiddlers/Filter Returns Only the First suffix word.tid b/tiddlers/Filter Returns Only the First suffix word.tid index d6337d8..6eb37c3 100644 --- a/tiddlers/Filter Returns Only the First suffix word.tid +++ b/tiddlers/Filter Returns Only the First suffix word.tid @@ -1,7 +1,7 @@ created: 20190210053628665 creator: Mohammad keywords: filter prefix splitbefore suffix removeprefix -modified: 20190216180314307 +modified: 20190704155015191 modifier: Mohammad responder: S.S. tags: filter solution diff --git a/tiddlers/Filter Tutorial.tid b/tiddlers/Filter Tutorial.tid index 5aef7a6..ca28d81 100644 --- a/tiddlers/Filter Tutorial.tid +++ b/tiddlers/Filter Tutorial.tid @@ -1,6 +1,6 @@ created: 20180602031908733 creator: Mohammad -modified: 20190216180314292 +modified: 20190704155015186 modifier: Mohammad tags: tutorial learning filter title: Filter Tutorial diff --git a/tiddlers/Filter With Two Tags.tid b/tiddlers/Filter With Two Tags.tid index 9471001..bb98f4e 100644 --- a/tiddlers/Filter With Two Tags.tid +++ b/tiddlers/Filter With Two Tags.tid @@ -1,5 +1,5 @@ created: 20180702182537279 -modified: 20190216180314237 +modified: 20190704155015180 modifier: Mohammad tags: filter title: Filter With Two Tags diff --git a/tiddlers/Filtered Transclusion.tid b/tiddlers/Filtered Transclusion.tid index 98822b5..19a2561 100644 --- a/tiddlers/Filtered Transclusion.tid +++ b/tiddlers/Filtered Transclusion.tid @@ -1,7 +1,7 @@ created: 20181003040536290 creator: Mohammad keywords: transclude filter -modified: 20190224163832716 +modified: 20190704155015174 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Filters Learning Resources.tid b/tiddlers/Filters Learning Resources.tid index 6434fab..873e27c 100644 --- a/tiddlers/Filters Learning Resources.tid +++ b/tiddlers/Filters Learning Resources.tid @@ -1,6 +1,6 @@ created: 20180604193758351 creator: Mohammad -modified: 20190216180314165 +modified: 20190704155015162 modifier: Mohammad tags: filter title: Filters Learning Resources diff --git a/tiddlers/Filters inside Plugin Does not Work.tid b/tiddlers/Filters inside Plugin Does not Work.tid index b335ba6..29658ef 100644 --- a/tiddlers/Filters inside Plugin Does not Work.tid +++ b/tiddlers/Filters inside Plugin Does not Work.tid @@ -1,7 +1,7 @@ created: 20190312201747613 creator: Mohammad keywords: filter shadow -modified: 20190316114915825 +modified: 20190704155015167 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Find DataTiddlers with Certain Index_Value.tid b/tiddlers/Find DataTiddlers with Certain Index_Value.tid index 504a672..496939b 100644 --- a/tiddlers/Find DataTiddlers with Certain Index_Value.tid +++ b/tiddlers/Find DataTiddlers with Certain Index_Value.tid @@ -1,7 +1,7 @@ created: 20190208045918195 creator: Mohammad keywords: datatiddler json dictionary index -modified: 20190216180314145 +modified: 20190704155015158 modifier: Mohammad responder: S.S. tags: datatiddler solution diff --git a/tiddlers/Five Most Important Widgets.json b/tiddlers/Five Most Important Widgets.json new file mode 100644 index 0000000..3a64b13 --- /dev/null +++ b/tiddlers/Five Most Important Widgets.json @@ -0,0 +1,15 @@ +[ + { + "created": "20181223134620754", + "title": "Five Most Important Widgets", + "text": "My take on the 5 most important widgets to learn would be: \n\n* `<$transclude>` \n* `<$set>` (note that `<$tiddler>` is really just an instance of the `<$set>` widget) \n* `<$list>` \n* `<$text>` \n* `<$link>`\n\nAnd if I was allowed another 5 they would be: \n\n* `<$macrocall>` \n* `<$edit-text>` \n* `<$button>` \n* `<$navigator>` \n* `<$reveal>` \n\nThere’s also a bundle of widgets that I consider to be hacked that have hung over from the very early days of TW5. At the beginning we didn’t have flexible enough primitives to model some behaviour (like the story river), and so there’s a number of widgets that encapsulate blobs of JavaScript that could soon be replaced by more generic, smaller components: \n\n* `<$navigator>` \n* `<$fieldmangler>` \n* `<$linkcatcher>` \n* `<$encrypt>` for encrypting the payload of standalone HTML TiddlyWikis \n* `<$raw>` ", + "creator": "Mohammad", + "modified": "20190704155015152", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "widget ", + "responder": "Jeremy, BTC, Mohammad, Brian", + "url": "https://groups.google.com/d/msg/tiddlywikidev/IwfddsKnSDw/y4aE4zUeCgAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Five Most Important Widgets.tid b/tiddlers/Five Most Important Widgets.tid deleted file mode 100644 index b560b08..0000000 --- a/tiddlers/Five Most Important Widgets.tid +++ /dev/null @@ -1,34 +0,0 @@ -created: 20181223134620754 -creator: Mohammad -keywords: widget -modified: 20190216180314126 -modifier: Mohammad -responder: Jeremy, BTC, Mohammad, Brian -tags: solution -title: Five Most Important Widgets -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywikidev/IwfddsKnSDw/y4aE4zUeCgAJ - -My take on the 5 most important widgets to learn would be: - -* `<$transclude>` -* `<$set>` (note that `<$tiddler>` is really just an instance of the `<$set>` widget) -* `<$list>` -* `<$text>` -* `<$link>` - -And if I was allowed another 5 they would be: - -* `<$macrocall>` -* `<$edit-text>` -* `<$button>` -* `<$navigator>` -* `<$reveal>` - -There’s also a bundle of widgets that I consider to be hacked that have hung over from the very early days of TW5. At the beginning we didn’t have flexible enough primitives to model some behaviour (like the story river), and so there’s a number of widgets that encapsulate blobs of JavaScript that could soon be replaced by more generic, smaller components: - -* `<$navigator>` -* `<$fieldmangler>` -* `<$linkcatcher>` -* `<$encrypt>` for encrypting the payload of standalone HTML TiddlyWikis -* `<$raw>` \ No newline at end of file diff --git a/tiddlers/Float Images.tid b/tiddlers/Float Images.tid index 4fd6487..04ceb77 100644 --- a/tiddlers/Float Images.tid +++ b/tiddlers/Float Images.tid @@ -1,7 +1,7 @@ created: 20180618030524807 creator: Mohammad keywords: float image -modified: 20190216180312237 +modified: 20190704155015146 modifier: Mohammad responder: BTC tags: solution diff --git a/tiddlers/Floating Images HowTo.tid b/tiddlers/Floating Images HowTo.tid index d846a0d..6f4da03 100644 --- a/tiddlers/Floating Images HowTo.tid +++ b/tiddlers/Floating Images HowTo.tid @@ -1,7 +1,7 @@ created: 20150320130409526 creator: Mohammad keywords: float image center left right -modified: 20190216180312003 +modified: 20190704155015140 modifier: Mohammad responder: PMario tags: solution floating-images diff --git a/tiddlers/Folding Editor.tid b/tiddlers/Folding Editor.tid index a0cf4c9..a80fb3e 100644 --- a/tiddlers/Folding Editor.tid +++ b/tiddlers/Folding Editor.tid @@ -1,7 +1,7 @@ created: 20190111155159125 creator: Mohammad keywords: editor folding transclude -modified: 20190216180311983 +modified: 20190704155015134 modifier: Mohammad responder: Simon Huber (BTC) tags: solution diff --git a/tiddlers/Font Awesome.tid b/tiddlers/Font Awesome.tid index db744d8..cf6b6d9 100644 --- a/tiddlers/Font Awesome.tid +++ b/tiddlers/Font Awesome.tid @@ -2,7 +2,7 @@ created: 20181001171249762 creator: Mohammad description: Font Awesome makes it easy to add vector icons and social logos to your website. And version 5 is redesigned and built from the ground up! developer: TheDiveO -modified: 20190216180311964 +modified: 20190704155015127 modifier: Mohammad tags: Links icon title: Font Awesome diff --git a/tiddlers/Full Text Search Plugin.tid b/tiddlers/Full Text Search Plugin.tid index badd0d1..82174db 100644 --- a/tiddlers/Full Text Search Plugin.tid +++ b/tiddlers/Full Text Search Plugin.tid @@ -1,7 +1,7 @@ created: 20181125060711442 creator: Mohammad developer: Rob Hoelz -modified: 20190216180311927 +modified: 20190704155015111 modifier: Mohammad tags: Links title: Full Text Search Plugin diff --git a/tiddlers/Fullscreen editor.tid b/tiddlers/Fullscreen editor.tid index c0c1c68..bbc865c 100644 --- a/tiddlers/Fullscreen editor.tid +++ b/tiddlers/Fullscreen editor.tid @@ -2,11 +2,10 @@ created: 20190204142611868 creator: Mohammad description: With FullscreenEditor, you'll be able to edit the current tiddler distraction-free with this button, found at the usual tiddler controls developer: J.D -modified: 20190216180311910 +modified: 20190704155015105 modifier: Mohammad tags: Links title: Fullscreen editor type: text/vnd.tiddlywiki url: http://j.d.fullscreen.tiddlyspot.com/ -wiki-name: Full screen editor - +wiki-name: Full screen editor \ No newline at end of file diff --git a/tiddlers/Generic Template.tid b/tiddlers/Generic Template.tid index 171259a..50542c1 100644 --- a/tiddlers/Generic Template.tid +++ b/tiddlers/Generic Template.tid @@ -2,7 +2,7 @@ created: 20181028032541010 creator: Mohammad keywords: template variable list: -modified: 20190216180311889 +modified: 20190704155015099 modifier: Mohammad responder: Mark S tags: template solution exmp41/country-codes diff --git a/tiddlers/Get JavaScript Macro Output in Plain Format.tid b/tiddlers/Get JavaScript Macro Output in Plain Format.tid index 0e34398..1424fe7 100644 --- a/tiddlers/Get JavaScript Macro Output in Plain Format.tid +++ b/tiddlers/Get JavaScript Macro Output in Plain Format.tid @@ -1,7 +1,7 @@ created: 20190303130542711 creator: Mohammad keywords: macro Javascript plain text output variabe -modified: 20190316114917264 +modified: 20190704155015092 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Get Macro Name as String.tid b/tiddlers/Get Macro Name as String.tid index c1e81b7..152840d 100644 --- a/tiddlers/Get Macro Name as String.tid +++ b/tiddlers/Get Macro Name as String.tid @@ -1,7 +1,7 @@ created: 20190226150200580 creator: Mohammad keywords: macro name -modified: 20190316114917257 +modified: 20190704155015083 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Getting Started with Node.js on Windows.tid b/tiddlers/Getting Started with Node.js on Windows.tid index 9267592..cac2ac7 100644 --- a/tiddlers/Getting Started with Node.js on Windows.tid +++ b/tiddlers/Getting Started with Node.js on Windows.tid @@ -2,11 +2,10 @@ created: 20190124105531853 creator: Mohammad description: This how-to will describe how to download and install Node.js on your Windows machine. It isn't too difficult but you might want to consider running BOB instead. developer: Scott Kingery -modified: 20190216180311873 +modified: 20190704155015074 modifier: Mohammad tags: Links title: Getting Started with Node.js on Windows type: text/vnd.tiddlywiki url: https://techlifeweb.com/tw5tribalknowledge.html#Getting%20Started%20with%20Node.js%20on%20Windows -wiki-name: TW5 Tribal Knowledge - +wiki-name: TW5 Tribal Knowledge \ No newline at end of file diff --git a/tiddlers/Globally and Private Macro.tid b/tiddlers/Globally and Private Macro.tid index 0d1c848..4d2fd07 100644 --- a/tiddlers/Globally and Private Macro.tid +++ b/tiddlers/Globally and Private Macro.tid @@ -1,7 +1,7 @@ created: 20190201114457375 creator: Mohammad keywords: global private macro -modified: 20190216180311838 +modified: 20190704155015066 modifier: Mohammad responder: Eric Shulman tags: macro exmp36 solution diff --git a/tiddlers/Go Full Screen.tid b/tiddlers/Go Full Screen.tid index 079cbfe..125c32b 100644 --- a/tiddlers/Go Full Screen.tid +++ b/tiddlers/Go Full Screen.tid @@ -1,5 +1,5 @@ created: 20180704023721261 -modified: 20190216180311823 +modified: 20190704155015056 tags: button title: Go Full Screen type: text/vnd.tiddlywiki diff --git a/tiddlers/Go to Tab.tid b/tiddlers/Go to Tab.tid index 116d6ca..516e2f4 100644 --- a/tiddlers/Go to Tab.tid +++ b/tiddlers/Go to Tab.tid @@ -1,7 +1,7 @@ created: 20181008032959474 creator: Mohammad keywords: tab link -modified: 20190216180311798 +modified: 20190704155015406 modifier: Mohammad responder: Mat von TWaddle tags: solution diff --git a/tiddlers/Goto Previous Tiddler in Story List.tid b/tiddlers/Goto Previous Tiddler in Story List.tid index c1b9c74..254917c 100644 --- a/tiddlers/Goto Previous Tiddler in Story List.tid +++ b/tiddlers/Goto Previous Tiddler in Story List.tid @@ -1,7 +1,7 @@ created: 20180605152702509 creator: Mohammad keywords: navigate previous operator -modified: 20190216180311780 +modified: 20190704155015399 modifier: Mohammad tags: navigate title: Goto Previous Tiddler in Story List diff --git a/tiddlers/Greater and Less Than Macros.tid b/tiddlers/Greater and Less Than Macros.tid index 5e0ad67..5be5a44 100644 --- a/tiddlers/Greater and Less Than Macros.tid +++ b/tiddlers/Greater and Less Than Macros.tid @@ -1,7 +1,7 @@ created: 20190312191616305 creator: Mohammad keywords: comparison conditional greater less -modified: 20190316114917198 +modified: 20190704155015384 modifier: Mohammad responder: Arlen Beiler tags: exmp53 solution diff --git a/tiddlers/Gt6796c TW5 Plugins.tid b/tiddlers/Gt6796c TW5 Plugins.tid new file mode 100644 index 0000000..3bc7d3c --- /dev/null +++ b/tiddlers/Gt6796c TW5 Plugins.tid @@ -0,0 +1,11 @@ +created: 20190614095806122 +creator: Mohammad +description: This is a set of TW plugins for crating charts, graphs, pseudo code diagram, gant chart, flowchart and much more. It is self contained and very simple. +developer: gt6796c +modified: 20190704155015377 +modifier: Mohammad +tags: Links +title: Gt6796c TW5 Plugins +type: text/vnd.tiddlywiki +url: https://gt6796c.github.io/# +wiki-name: gt6796c TW5 Plugins \ No newline at end of file diff --git a/tiddlers/H5bp Source for CSS.tid b/tiddlers/H5bp Source for CSS.tid index cea5ede..aa8d226 100644 --- a/tiddlers/H5bp Source for CSS.tid +++ b/tiddlers/H5bp Source for CSS.tid @@ -2,7 +2,7 @@ created: 20181203160947573 creator: Mohammad description: A bunch of people creating open source software. Fork a project and get involved! developer: Hakim El Hattab -modified: 20190216180311764 +modified: 20190704155015364 modifier: Mohammad tags: Links title: H5bp Source for CSS diff --git a/tiddlers/HTML Entity.tid b/tiddlers/HTML Entity.tid index 090cfa3..761a828 100644 --- a/tiddlers/HTML Entity.tid +++ b/tiddlers/HTML Entity.tid @@ -1,6 +1,6 @@ created: 20181227142242021 creator: Mohammad -modified: 20190216180311314 +modified: 20190704155015461 modifier: Mohammad tags: symbol html5 title: HTML Entity diff --git a/tiddlers/HTML Entity_ Circled Digits.tid b/tiddlers/HTML Entity_ Circled Digits.tid index 39481d6..28caea6 100644 --- a/tiddlers/HTML Entity_ Circled Digits.tid +++ b/tiddlers/HTML Entity_ Circled Digits.tid @@ -1,6 +1,6 @@ created: 20181227080525748 creator: Mohammad -modified: 20190216180311293 +modified: 20190704155015455 modifier: Mohammad tags: symbol html5 title: HTML Entity: Circled Digits diff --git a/tiddlers/HTML Entity_ Stars.tid b/tiddlers/HTML Entity_ Stars.tid index 7316366..edc0473 100644 --- a/tiddlers/HTML Entity_ Stars.tid +++ b/tiddlers/HTML Entity_ Stars.tid @@ -1,6 +1,6 @@ created: 20181227154006768 creator: Mohammad -modified: 20190216180311275 +modified: 20190704155015448 modifier: Mohammad tags: symbol html5 title: HTML Entity: Stars diff --git a/tiddlers/HTML Entity_ Symbols.tid b/tiddlers/HTML Entity_ Symbols.tid index 79c03f8..e6bb766 100644 --- a/tiddlers/HTML Entity_ Symbols.tid +++ b/tiddlers/HTML Entity_ Symbols.tid @@ -1,6 +1,6 @@ created: 20181227143115627 creator: Mohammad -modified: 20190216180311256 +modified: 20190704155015441 modifier: Mohammad tags: symbol html5 title: HTML Entity: Symbols diff --git a/tiddlers/HTML References.json b/tiddlers/HTML References.json new file mode 100644 index 0000000..8b2ab0a --- /dev/null +++ b/tiddlers/HTML References.json @@ -0,0 +1,16 @@ +[ + { + "created": "20190131153212647", + "title": "HTML References", + "text": "", + "creator": "Mohammad", + "modified": "20190704155015431", + "modifier": "Mohammad", + "tags": "Links", + "type": "text/vnd.tiddlywiki", + "description": "Learn by example: htmlreference.io is a free guide to HTML. It features all elements and attributes. ", + "developer": "jgthms", + "url": "https://htmlreference.io/", + "wiki-name": "HTML References - A free guide to HTML" + } +] \ No newline at end of file diff --git a/tiddlers/HTML References.tid b/tiddlers/HTML References.tid deleted file mode 100644 index dc7defe..0000000 --- a/tiddlers/HTML References.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20190131153212647 -creator: Mohammad -description: Learn by example: htmlreference.io is a free guide to HTML. It features all elements and attributes. -developer: jgthms -modified: 20190216180311239 -modifier: Mohammad -tags: Links -title: HTML References -type: text/vnd.tiddlywiki -url: https://htmlreference.io/ -wiki-name: HTML References - A free guide to HTML - diff --git a/tiddlers/HTML5 embed Tag.tid b/tiddlers/HTML5 embed Tag.tid index e556d6c..a83da75 100644 --- a/tiddlers/HTML5 embed Tag.tid +++ b/tiddlers/HTML5 embed Tag.tid @@ -1,6 +1,6 @@ created: 20181121141304141 creator: Mohammad -modified: 20190216180311174 +modified: 20190704155015413 modifier: Mohammad tags: exmp14 title: HTML5 embed Tag diff --git a/tiddlers/Hacked Table of Content Macro.tid b/tiddlers/Hacked Table of Content Macro.tid index eb0126b..5f15f64 100644 --- a/tiddlers/Hacked Table of Content Macro.tid +++ b/tiddlers/Hacked Table of Content Macro.tid @@ -1,7 +1,7 @@ created: 20180718030309545 creator: Mohammad keywords: toc table-of-contents -modified: 20190216180311742 +modified: 20190704155015357 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Has Good Idea for Scripting.tid b/tiddlers/Has Good Idea for Scripting.tid index a8772dc..ae9523d 100644 --- a/tiddlers/Has Good Idea for Scripting.tid +++ b/tiddlers/Has Good Idea for Scripting.tid @@ -1,6 +1,6 @@ created: 20190113140559043 creator: Mohammad -modified: 20190216180311728 +modified: 20190704155015350 modifier: Mohammad tags: reading title: Has Good Idea for Scripting diff --git a/tiddlers/Help Button.tid b/tiddlers/Help Button.tid new file mode 100644 index 0000000..53fed9d --- /dev/null +++ b/tiddlers/Help Button.tid @@ -0,0 +1,12 @@ +created: 20190415110241011 +creator: Mohammad +keywords: +modified: 20190704155015343 +modifier: Mohammad +responder: +tags: solution +title: Help Button +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/64nbwN7VpC4/UjCv3oJOCgAJ + +<> \ No newline at end of file diff --git a/tiddlers/Hero.tid b/tiddlers/Hero.tid index 76b627a..b87638c 100644 --- a/tiddlers/Hero.tid +++ b/tiddlers/Hero.tid @@ -2,7 +2,7 @@ caption: Hirad is a hero class: alert-warning created: 20190124154238821 creator: Mohammad -modified: 20190216180311694 +modified: 20190704155015337 modifier: Mohammad tags: title: Hero diff --git a/tiddlers/Hide Count Output If Zero.tid b/tiddlers/Hide Count Output If Zero.tid index 4d56e55..a1f29f3 100644 --- a/tiddlers/Hide Count Output If Zero.tid +++ b/tiddlers/Hide Count Output If Zero.tid @@ -1,7 +1,7 @@ created: 20180730153952592 creator: Mohammad keywords: count zero hide -modified: 20190216180311664 +modified: 20190704155015318 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Hide Username Date and Tags in Printing.tid b/tiddlers/Hide Username Date and Tags in Printing.tid index ae635a0..47626b1 100644 --- a/tiddlers/Hide Username Date and Tags in Printing.tid +++ b/tiddlers/Hide Username Date and Tags in Printing.tid @@ -1,7 +1,7 @@ created: 20190109062515441 creator: Mohammad keywords: print css hide tag date usrname -modified: 20190216180311648 +modified: 20190704155015311 modifier: Mohammad responder: Tony Grener tags: solution diff --git a/tiddlers/Hide a Field in Edit Mode.tid b/tiddlers/Hide a Field in Edit Mode.tid index 271467a..928bb6b 100644 --- a/tiddlers/Hide a Field in Edit Mode.tid +++ b/tiddlers/Hide a Field in Edit Mode.tid @@ -1,7 +1,7 @@ created: 20180814174704772 creator: Mohammad keywords: hide field -modified: 20190216180311679 +modified: 20190704155015328 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Hierarchical Tag Tree.tid b/tiddlers/Hierarchical Tag Tree.tid new file mode 100644 index 0000000..401f2fe --- /dev/null +++ b/tiddlers/Hierarchical Tag Tree.tid @@ -0,0 +1,49 @@ +created: 20190606060808258 +creator: Mohammad +keywords: toc hieracy tag +modified: 20190704155015305 +modifier: Mohammad +responder: Mark S +tags: solution +title: Hierarchical Tag Tree +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/g0W0mcy1cW0/adMBHO5_BAAJ + +;How a table of contents can be displayed as tree like with connected colorful branches? +: It needs a custom TOC macro and stylesheet + +[[List Tree]] has been developed by //twMat// a stylesheet to reshape a bullet list into tree like display. It can be used with the below customized macro from [[Mark S|https://groups.google.com/d/msg/tiddlywiki/g0W0mcy1cW0/adMBHO5_BAAJ]]. + +!! Customised TOC macro +Note that, the "toc2" is the macro you will need to create to get your tree like table of contents. Install the [[List Tree]] plugin if you haven't already. +Then create a new tiddler and tag it `$:/tags/Macro`. Put in the following contents: + +``` +\define toc-body2(tag,sort:"",itemClassFilter,exclude,path) +
      + <$list filter="""[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]"""> + <$vars item=<> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}} excluded="""[enlist<__exclude__>] -[<__tag__>]"""> + <$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item" value="toc-item-selected"> +
    • + <$list filter="[all[current]toc-link[no]]" emptyMessage="<$link><$view field='caption'><$view field='title'/>"> + <> + + <$macrocall $name="toc-body" tag=<> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<> path=<>/> +
    • + + + +
    +\end + +\define toc2(tag,sort:"",itemClassFilter:" ") +<$macrocall $name="toc-body2" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> /> +\end +``` + +!! Usage +To call the TOC with the title of the current tiddler, use: + +``` +<$macrocall $name="toc2" tag=<>/> +``` \ No newline at end of file diff --git a/tiddlers/Highlight.js and Fortran Brush Issue.tid b/tiddlers/Highlight.js and Fortran Brush Issue.tid new file mode 100644 index 0000000..d1847f1 --- /dev/null +++ b/tiddlers/Highlight.js and Fortran Brush Issue.tid @@ -0,0 +1,39 @@ +created: 20190613071608242 +creator: Mohammad +modified: 20190704155015299 +modifier: Mohammad +tags: +title: Highlight.js and Fortran Brush Issue +type: text/vnd.tiddlywiki + +The current brush for Fortran in `highlight.js` original code does not correctly highlight the user defined precision e.g + +> 1234.567_wp + +Where it should be rendered as + +<<< +```fortran +1.23_wp +``` +<<< + + + +To resolve the issue you need to replace the format instruction in + +* `fortran.js` or +* `$:/plugins/tiddlywiki/highlight/highlight.js` or +* `Tiddlywiki\plugins\tiddlywiki\highlight\files` + +as below: + +* The number format in original code +```js +{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0} +``` + +* Should be eplaced with the correct modified number format as below +```js +{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0} +``` \ No newline at end of file diff --git a/tiddlers/Hirad.Tiddlyspot.tid b/tiddlers/Hirad.Tiddlyspot.tid new file mode 100644 index 0000000..4362761 --- /dev/null +++ b/tiddlers/Hirad.Tiddlyspot.tid @@ -0,0 +1,14 @@ +created: 20190531142552121 +creator: Mohammad +modified: 20190704155015274 +modifier: Mohammad +tags: mywiki +title: Hirad.Tiddlyspot +type: text/vnd.tiddlywiki + +<<\n<$list filter=\"[search:title[exmp65/data]tag[exmp65]]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-remove-tag\" $param=\"exmp65\"/>\n\n\n\n<$tiddler tiddler={{exmp65/state}}>\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-add-tag\" $param=\"exmp65\"/>\n\n\n\n\\end\n\n\n<>\n[[Read this and see it would be solved|https://groups.google.com/d/msg/tiddlywiki/cV1Gs0RV6Jg/XPspaCj2DAAJ]]\n\n \n;How swith a tag among a set of tiddlers? Only one tiddler can have the tag at a time!\n: The solution is to use `select` widget and an action macro\n\nThe below example demonstrate how to switch a tag among set of tiddlers. The code has two parts\n\n# select widget to choose one tiddler among set of tiddlers\n# action macro to set tag to the selected tiddler and remove it from previous tiddler\n\nHere for this example, tag `exmp65` between three tiddlers is switched. Only one tiddler has the tag at a time. The action macro called `applyTag` is as below\n\n```\n\\define applyTag()\n\n<$list filter=\"[search:title[exmp65/data]tag[exmp65]]\">\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-remove-tag\" $param=\"exmp65\"/>\n\n\n\n<$tiddler tiddler={{exmp65/state}}>\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-add-tag\" $param=\"exmp65\"/>\n\n\n\n\\end\n```\n\n\n<$macrocall $name=\"wikitext-example-without-html\" \nsrc=\"\"\"<$select \n tooltip=\"select a tiddler\"\n tiddler=\"exmp65/state\" \n field=\"text\"\n actions=<>\n>\n<$list filter=\"[search:title[exmp65/data]]\" variable=\"tid\">\n\n\n\n\"\"\"/>\n\n\n\n", + "creator": "Mohammad", + "modified": "20190704155015232", + "modifier": "Mohammad", + "tags": "task exmp65 solution", + "type": "text/vnd.tiddlywiki", + "keywords": "switch tag ", + "responder": "Mohammad", + "url": "" + } +] \ No newline at end of file diff --git a/tiddlers/How Use Now Macro inside a Filter.tid b/tiddlers/How Use Now Macro inside a Filter.tid index 78fa9c9..62fe51c 100644 --- a/tiddlers/How Use Now Macro inside a Filter.tid +++ b/tiddlers/How Use Now Macro inside a Filter.tid @@ -1,7 +1,7 @@ created: 20181020032733688 creator: Mohammad keywords: now macro filter -modified: 20190216180311389 +modified: 20190704155015487 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/How to Import a Bundle of Plugins and Tiddlers.tid b/tiddlers/How to Import a Bundle of Plugins and Tiddlers.tid index 05110c3..94b1d1d 100644 --- a/tiddlers/How to Import a Bundle of Plugins and Tiddlers.tid +++ b/tiddlers/How to Import a Bundle of Plugins and Tiddlers.tid @@ -1,6 +1,6 @@ created: 20180831115604149 creator: Mohammad -modified: 20190216180311536 +modified: 20190704155015558 modifier: Mohammad tags: title: How to Import a Bundle of Plugins and Tiddlers diff --git a/tiddlers/How to Make TW5 Readonly.tid b/tiddlers/How to Make TW5 Readonly.tid index cf006cc..179db08 100644 --- a/tiddlers/How to Make TW5 Readonly.tid +++ b/tiddlers/How to Make TW5 Readonly.tid @@ -2,7 +2,7 @@ created: 20190121050044578 creator: Mohammad description: This guide describes two ways to make TW readonly developer: Ton Gerner -modified: 20190216180311521 +modified: 20190704155015546 modifier: Mohammad tags: Links title: How to Make TW5 Readonly diff --git a/tiddlers/How to Show the Contents of Macro Tiddlers.tid b/tiddlers/How to Show the Contents of Macro Tiddlers.tid index ea0f6c8..9f9e0cc 100644 --- a/tiddlers/How to Show the Contents of Macro Tiddlers.tid +++ b/tiddlers/How to Show the Contents of Macro Tiddlers.tid @@ -1,6 +1,6 @@ created: 20180913100703176 creator: Mohammad -modified: 20190216180311496 +modified: 20190704155015538 modifier: Mohammad tags: title: How to Show the Contents of Macro Tiddlers diff --git a/tiddlers/How to Truncate Long String with Ellipsis.tid b/tiddlers/How to Truncate Long String with Ellipsis.tid index bcc2492..902ebde 100644 --- a/tiddlers/How to Truncate Long String with Ellipsis.tid +++ b/tiddlers/How to Truncate Long String with Ellipsis.tid @@ -1,7 +1,7 @@ created: 20181023162546741 creator: Mohammad keywords: truncate ellipsis -modified: 20190216180311478 +modified: 20190704155015528 modifier: Mohammad responder: Chris Coyier tags: solution diff --git a/tiddlers/How to Update List Field.tid b/tiddlers/How to Update List Field.tid index e163b85..78cd1cf 100644 --- a/tiddlers/How to Update List Field.tid +++ b/tiddlers/How to Update List Field.tid @@ -1,5 +1,5 @@ created: 20180726085822640 -modified: 20190216180311448 +modified: 20190704155015516 tags: title: How to Update List Field type: text/vnd.tiddlywiki diff --git a/tiddlers/How to Use.tid b/tiddlers/How to Use.tid index 4e44e65..d2625ee 100644 --- a/tiddlers/How to Use.tid +++ b/tiddlers/How to Use.tid @@ -1,7 +1,7 @@ colorcode: red created: 20181122083858789 creator: Mohammad -modified: 20190216180311436 +modified: 20190704155015508 modifier: Mohammad tags: title: How to Use diff --git a/tiddlers/How to Write a Plugin.json b/tiddlers/How to Write a Plugin.json new file mode 100644 index 0000000..d6dbf24 --- /dev/null +++ b/tiddlers/How to Write a Plugin.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190201125223257", + "title": "How to Write a Plugin", + "text": "Some resources that might be helpful for writting new plugins in Tiddlywiki:\n\n* https://tiddlywiki.com/#Plugins contains a brief explanation of what a plugin actually is, and how it works\n* https://tiddlywiki.com/dev/#Developing%20plugins%20using%20Node.js%20and%20GitHub explains how to create plugins under Node.js\n* https://tiddlywiki.com/dev/#How%20to%20create%20plugins%20in%20the%20browser is a brief guide to creating plugins in the browser\n* https://github.com/Jermolene/TiddlyWiki5/tree/master/plugins/tiddlywiki is a list of the official core plugins. Good simple examples include “blog”, “comments” and “help\"\n\n!!! Tinka plugin packager\n<<<\nThe Tinka plugin provides the ability to create and modify plugins in the browser, without requiring the use of Node.js.\n\nSee https://github.com/TinkaPlugin/Tinka for the GitHub repo, and demo page at https://tinkaplugin.github.io/\n<<<", + "creator": "Mohammad", + "modified": "20190704155015502", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "plugin ", + "responder": "Jeremy Ruston", + "url": "" + } +] \ No newline at end of file diff --git a/tiddlers/How to Write a Plugin.tid b/tiddlers/How to Write a Plugin.tid deleted file mode 100644 index ca3986f..0000000 --- a/tiddlers/How to Write a Plugin.tid +++ /dev/null @@ -1,24 +0,0 @@ -created: 20190201125223257 -creator: Mohammad -keywords: plugin -modified: 20190216180311422 -modifier: Mohammad -responder: Jeremy Ruston -tags: solution -title: How to Write a Plugin -type: text/vnd.tiddlywiki -url: - -Some resources that might be helpful for writting new plugins in Tiddlywiki: - -* https://tiddlywiki.com/#Plugins contains a brief explanation of what a plugin actually is, and how it works -* https://tiddlywiki.com/dev/#Developing%20plugins%20using%20Node.js%20and%20GitHub explains how to create plugins under Node.js -* https://tiddlywiki.com/dev/#How%20to%20create%20plugins%20in%20the%20browser is a brief guide to creating plugins in the browser -* https://github.com/Jermolene/TiddlyWiki5/tree/master/plugins/tiddlywiki is a list of the official core plugins. Good simple examples include “blog”, “comments” and “help" - -!!! Tinka plugin packager -<<< -The Tinka plugin provides the ability to create and modify plugins in the browser, without requiring the use of Node.js. - -See https://github.com/TinkaPlugin/Tinka for the GitHub repo, and demo page at https://tinkaplugin.github.io/ -<<< \ No newline at end of file diff --git a/tiddlers/How to build a settings panel for a plugin.tid b/tiddlers/How to build a settings panel for a plugin.tid index d8c4cce..70e909a 100644 --- a/tiddlers/How to build a settings panel for a plugin.tid +++ b/tiddlers/How to build a settings panel for a plugin.tid @@ -1,6 +1,6 @@ created: 20190215073423885 creator: Mohammad -modified: 20190224163833191 +modified: 20190704155015226 modifier: Mohammad tags: task title: How to build a settings panel for a plugin diff --git a/tiddlers/How to write Widgets.tid b/tiddlers/How to write Widgets.tid index c6dff70..2b8c73a 100644 --- a/tiddlers/How to write Widgets.tid +++ b/tiddlers/How to write Widgets.tid @@ -1,7 +1,7 @@ created: 20181221095310256 creator: Mohammad keywords: widget develop write -modified: 20190216180311403 +modified: 20190704155015495 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Html Comments Does Not Work Inside Macro.tid b/tiddlers/Html Comments Does Not Work Inside Macro.tid index d96fa34..0cffac3 100644 --- a/tiddlers/Html Comments Does Not Work Inside Macro.tid +++ b/tiddlers/Html Comments Does Not Work Inside Macro.tid @@ -1,5 +1,5 @@ created: 20180730165548424 -modified: 20190216180311329 +modified: 20190704155015466 tags: title: Html Comments Does Not Work Inside Macro type: text/vnd.tiddlywiki diff --git a/tiddlers/Html5 Date Attribute.tid b/tiddlers/Html5 Date Attribute.tid index eafea55..16f3bf2 100644 --- a/tiddlers/Html5 Date Attribute.tid +++ b/tiddlers/Html5 Date Attribute.tid @@ -1,7 +1,7 @@ created: 20181007153626104 creator: Mohammad keywords: date calendar html5 -modified: 20190216180311225 +modified: 20190704155015425 modifier: Mohammad responder: Anonymous tags: solution diff --git a/tiddlers/Html5 Detail Tag.tid b/tiddlers/Html5 Detail Tag.tid index 4b2772c..558f926 100644 --- a/tiddlers/Html5 Detail Tag.tid +++ b/tiddlers/Html5 Detail Tag.tid @@ -1,7 +1,7 @@ created: 20181005185428078 creator: Mohammad keywords: details summary tag -modified: 20190216180311212 +modified: 20190704155015418 modifier: Mohammad responder: MDN Web Docs tags: html5 solution diff --git a/tiddlers/Html5 Forms Elements.tid b/tiddlers/Html5 Forms Elements.tid index 7dbc6db..77e73b1 100644 --- a/tiddlers/Html5 Forms Elements.tid +++ b/tiddlers/Html5 Forms Elements.tid @@ -1,7 +1,7 @@ created: 20181007153426849 creator: Mohammad keywords: form label -modified: 20190216180311157 +modified: 20190704155015718 modifier: Mohammad responder: MDN Web Docs tags: html5 task solution diff --git a/tiddlers/IF-Else Clause Using List Widget.tid b/tiddlers/IF-Else Clause Using List Widget.tid index b78ca40..b5ad578 100644 --- a/tiddlers/IF-Else Clause Using List Widget.tid +++ b/tiddlers/IF-Else Clause Using List Widget.tid @@ -1,7 +1,7 @@ created: 20181002122100496 creator: Mohammad display: yes -modified: 20190216180315437 +modified: 20190704155015666 modifier: Mohammad my-field: false tags: list diff --git a/tiddlers/Ibox.tid b/tiddlers/Ibox.tid index 5549c70..fb22087 100644 --- a/tiddlers/Ibox.tid +++ b/tiddlers/Ibox.tid @@ -3,7 +3,7 @@ creator: Mohammad description: This wiki shows how to display images in TW > 5.1.5 using the <> macro. developer: Tobias Beer keywords: lightbox ibox image photo -modified: 20190216180311142 +modified: 20190704155015708 modifier: Mohammad tags: Links title: Ibox diff --git a/tiddlers/Icons and Graphics.tid b/tiddlers/Icons and Graphics.tid index a2c4e92..73d4e5c 100644 --- a/tiddlers/Icons and Graphics.tid +++ b/tiddlers/Icons and Graphics.tid @@ -1,6 +1,6 @@ created: 20181214164708550 creator: Mohammad -modified: 20190216180311129 +modified: 20190704155015698 modifier: Mohammad tags: image title: Icons and Graphics diff --git a/tiddlers/If Field Macro.tid b/tiddlers/If Field Macro.tid index 167c4b1..51503e9 100644 --- a/tiddlers/If Field Macro.tid +++ b/tiddlers/If Field Macro.tid @@ -1,7 +1,7 @@ created: 20180708133029847 creator: Mohammad keywords: if field conditional -modified: 20190216180311106 +modified: 20190704155015689 modifier: Mohammad note: Hi Mohammad responder: Mark S diff --git a/tiddlers/If Then Else Action Macro.tid b/tiddlers/If Then Else Action Macro.tid index c22e517..fbc31af 100644 --- a/tiddlers/If Then Else Action Macro.tid +++ b/tiddlers/If Then Else Action Macro.tid @@ -1,7 +1,7 @@ created: 20180905151612861 creator: Mohammad keywords: if conditional macro -modified: 20190216180315589 +modified: 20190704155015673 modifier: Mohammad responder: Mark S tags: macro solution diff --git a/tiddlers/If Then Else.tid b/tiddlers/If Then Else.tid index d4a562c..69e4721 100644 --- a/tiddlers/If Then Else.tid +++ b/tiddlers/If Then Else.tid @@ -1,7 +1,7 @@ created: 20181004060716821 creator: Mohammad keywords: conditional if-clause -modified: 20190216180311091 +modified: 20190704155015679 modifier: Mohammad responder: Thomas Elmiger tags: solution diff --git a/tiddlers/Iframe and Tiddlers Contains a Html Page.tid b/tiddlers/Iframe and Tiddlers Contains a Html Page.tid index 4fc6fb5..671b34b 100644 --- a/tiddlers/Iframe and Tiddlers Contains a Html Page.tid +++ b/tiddlers/Iframe and Tiddlers Contains a Html Page.tid @@ -1,7 +1,7 @@ created: 20190130164624887 creator: Mohammad keywords: iframe tiddler -modified: 20190216180315414 +modified: 20190704155015659 modifier: Mohammad responder: Jeremy Ruston tags: exmp32 solution diff --git a/tiddlers/Ignore draft tiddlers.tid b/tiddlers/Ignore draft tiddlers.tid index 0911a18..c1f681f 100644 --- a/tiddlers/Ignore draft tiddlers.tid +++ b/tiddlers/Ignore draft tiddlers.tid @@ -1,6 +1,6 @@ created: 20180604194350180 creator: Mohammad -modified: 20190216180315383 +modified: 20190704155015648 modifier: Mohammad tags: filter title: Ignore draft tiddlers diff --git a/tiddlers/Image with Tooltip.tid b/tiddlers/Image with Tooltip.tid index af45158..f98c1d5 100644 --- a/tiddlers/Image with Tooltip.tid +++ b/tiddlers/Image with Tooltip.tid @@ -1,7 +1,7 @@ created: 20180807130704039 creator: Mohammad keywords: image tooltip -modified: 20190216180315347 +modified: 20190704155015641 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Import JSON Tiddler.tid b/tiddlers/Import JSON Tiddler.tid index 716bce2..b0b750b 100644 --- a/tiddlers/Import JSON Tiddler.tid +++ b/tiddlers/Import JSON Tiddler.tid @@ -1,7 +1,7 @@ created: 20190206060401747 creator: Mohammad keywords: json datatiddler dictionary import -modified: 20190216180315327 +modified: 20190704155015633 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/In My Socks.tid b/tiddlers/In My Socks.tid index a12bfd4..27af692 100644 --- a/tiddlers/In My Socks.tid +++ b/tiddlers/In My Socks.tid @@ -2,11 +2,10 @@ created: 20190121164726130 creator: Mohammad description: The below links shows some wiki discussing use of CSS in Tiddlywiki developer: Jed Carty -modified: 20190216180315322 +modified: 20190704155015624 modifier: Mohammad tags: Links title: In My Socks type: text/vnd.tiddlywiki url: http://inmysocks.tiddlyspot.com/#Modifying%20CSS -wiki-name: In my socks - +wiki-name: In my socks \ No newline at end of file diff --git a/tiddlers/Inside Tiddlywiki.tid b/tiddlers/Inside Tiddlywiki.tid index bfdae03..7ae0d86 100644 --- a/tiddlers/Inside Tiddlywiki.tid +++ b/tiddlers/Inside Tiddlywiki.tid @@ -2,7 +2,7 @@ created: 20190122081328033 creator: Mohammad description: A guidebook for new users developer: Eric Shulman -modified: 20190216180315316 +modified: 20190704155015613 modifier: Mohammad tags: Links title: Inside Tiddlywiki diff --git a/tiddlers/Installing TiddlyWiki Prerelease on Node.js.tid b/tiddlers/Installing TiddlyWiki Prerelease on Node.js.tid new file mode 100644 index 0000000..b49f6ca --- /dev/null +++ b/tiddlers/Installing TiddlyWiki Prerelease on Node.js.tid @@ -0,0 +1,16 @@ +created: 20150926162849519 +creator: Mohammad +modified: 20190704155015597 +modifier: Mohammad +tags: nodejs +title: Installing TiddlyWiki Prerelease on Node.js +type: text/vnd.tiddlywiki + +# Clone a local copy of the TiddlyWiki5 GitHub repository from https://github.com/Jermolene/TiddlyWiki5 +# Open a command line terminal and change the current working directory to the root of the TiddlyWiki5 repo +# Type `npm link` (Windows) or `sudo npm link` (Mac/Linux) to tell [[npm]] to use this copy of the repo as the globally installed one +# Inside the root, you can launch ~TiddlyWiki like this:
    ``tiddlywiki editions/tw5.com-server --listen`` + +After this procedure you can work with TiddlyWiki5 via [[npm]] as though it had been installed in the usual way with `npm install -g tiddlywiki`. + +Update the clone from time to time in order to ensure that you have the latest code. diff --git a/tiddlers/Installing TiddlyWiki on Node.js.tid b/tiddlers/Installing TiddlyWiki on Node.js.tid new file mode 100644 index 0000000..ece264d --- /dev/null +++ b/tiddlers/Installing TiddlyWiki on Node.js.tid @@ -0,0 +1,37 @@ +created: 20131219100608529 +creator: Mohammad +modified: 20190704155015606 +modifier: Mohammad +tags: nodejs +title: Installing TiddlyWiki on Node.js +type: text/vnd.tiddlywiki + +# Install [[Node.js]] +#* either from your favourite package manager: typically `apt-get install nodejs` on Debian/Ubuntu Linux or [[Termux for Android|Serving TW5 from Android]], or `brew install node` on a Mac +#* or directly from http://nodejs.org +# Open a command line terminal and type: +#> `npm install -g tiddlywiki` +#> If it fails with an error you may need to re-run the command as an administrator: +#> `sudo npm install -g tiddlywiki` (Mac/Linux) +# Check TiddlyWiki is installed by typing: +#> `tiddlywiki --version` +# In response, you should see TiddlyWiki report its current version (eg "<>"; you may also see other debugging information reported) +# Try it out: +## `tiddlywiki mynewwiki --init server` to create a folder for a new wiki that includes server-related components +## `tiddlywiki mynewwiki --listen` to start TiddlyWiki +## Visit http://127.0.0.1:8080/ in your browser +## Try editing and creating tiddlers +# Optionally, make an offline copy: +#* click the {{$:/core/images/save-button}} ''save changes'' button in the sidebar, ''OR'' +#* `tiddlywiki mynewwiki --build index` + +The `-g` flag causes TiddlyWiki to be installed globally. Without it, TiddlyWiki will only be available in the directory where you installed it. + +If you are using Debian or Debian-based Linux and you are receiving a `node: command not found` error though node.js package is installed, you may need to create a symbolic link between `nodejs` and `node`. Consult your distro's manual and `whereis` to correctly create a link. See github [[issue 1434|http://github.com/Jermolene/TiddlyWiki5/issues/1434]] + +Example Debian v8.0: `sudo ln -s /usr/bin/nodejs /usr/bin/node` + +You can also install prior versions like this: + +> npm install -g tiddlywiki@5.1.13 + diff --git a/tiddlers/Intersection of Two Filter Expression.tid b/tiddlers/Intersection of Two Filter Expression.tid index fb586ce..67dd96e 100644 --- a/tiddlers/Intersection of Two Filter Expression.tid +++ b/tiddlers/Intersection of Two Filter Expression.tid @@ -1,7 +1,7 @@ created: 20190314150958744 creator: Mohammad keywords: intersection filter -modified: 20190316114916672 +modified: 20190704155015584 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Introduction to Tiddlywiki.tid b/tiddlers/Introduction to Tiddlywiki.tid index 9cb390e..0b29354 100644 --- a/tiddlers/Introduction to Tiddlywiki.tid +++ b/tiddlers/Introduction to Tiddlywiki.tid @@ -1,7 +1,7 @@ created: 20181231052414202 creator: Mohammad keywords: slideshow slide presentation theme edition -modified: 20190216180315310 +modified: 20190704155015576 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Iterate DataTiddler Indexes.tid b/tiddlers/Iterate DataTiddler Indexes.tid index 51695d4..8148c4d 100644 --- a/tiddlers/Iterate DataTiddler Indexes.tid +++ b/tiddlers/Iterate DataTiddler Indexes.tid @@ -1,7 +1,7 @@ created: 20190207101543826 creator: Mohammad keywords: index datatiddler table dictionary -modified: 20190216180315304 +modified: 20190704155015567 modifier: Mohammad responder: Tobias Beer tags: exmp39 solution diff --git a/tiddlers/themes/JD NEW MONO THEME.tid b/tiddlers/JD NEW MONO THEME.tid similarity index 69% rename from tiddlers/themes/JD NEW MONO THEME.tid rename to tiddlers/JD NEW MONO THEME.tid index 44b41d9..fb50806 100644 --- a/tiddlers/themes/JD NEW MONO THEME.tid +++ b/tiddlers/JD NEW MONO THEME.tid @@ -1,6 +1,6 @@ created: 20190204044251511 creator: Mohammad -modified: 20190216180315288 +modified: 20190704155015802 modifier: Mohammad tags: task title: JD NEW MONO THEME diff --git a/tiddlers/Javascript Macro.tid b/tiddlers/Javascript Macro.tid index 3e1fa22..492bf9f 100644 --- a/tiddlers/Javascript Macro.tid +++ b/tiddlers/Javascript Macro.tid @@ -1,7 +1,7 @@ created: 20190131185213604 creator: Mohammad keywords: javascript macro -modified: 20190216180315294 +modified: 20190704155015807 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Jeremy Federatial.tid b/tiddlers/Jeremy Federatial.tid new file mode 100644 index 0000000..e4b8944 --- /dev/null +++ b/tiddlers/Jeremy Federatial.tid @@ -0,0 +1,17 @@ +created: 20190413022738956 +creator: Mohammad +modified: 20190704155015796 +modifier: Mohammad +tags: task +title: Jeremy Federatial +type: text/vnd.tiddlywiki + +Let's easily make a website using Tiddlywiki + +<> + + +;Ref: +* GitHub source code (https://github.com/Federatial/website) +* Single page builder (https://xememex.com/federatial/) +* Group discussion (https://groups.google.com/d/msg/tiddlywiki/nbT4Z4ai5OQ/zw0v8vMxEgAJ) \ No newline at end of file diff --git a/tiddlers/Jeremy-Test.tid b/tiddlers/Jeremy-Test.tid index 60a461d..c283069 100644 --- a/tiddlers/Jeremy-Test.tid +++ b/tiddlers/Jeremy-Test.tid @@ -1,11 +1,3 @@ -created: 20190221142517068 -creator: Mohammad -modified: 20190224163832953 -modifier: Mohammad -tags: trash -title: Jeremy-Test -type: application/x-tiddler - \define utility(a, b) This is //$a$// and ''$b$''. \define test(tidName, v1, v2) diff --git a/tiddlers/Jeremy-Test.tid.meta b/tiddlers/Jeremy-Test.tid.meta new file mode 100644 index 0000000..7e68cd1 --- /dev/null +++ b/tiddlers/Jeremy-Test.tid.meta @@ -0,0 +1,7 @@ +created: 20190221142517068 +creator: Mohammad +modified: 20190704155015783 +modifier: Mohammad +tags: trash +title: Jeremy-Test +type: application/x-tiddler \ No newline at end of file diff --git a/tiddlers/Jump to the Top of Story River.tid b/tiddlers/Jump to the Top of Story River.tid index 627508a..62e43be 100644 --- a/tiddlers/Jump to the Top of Story River.tid +++ b/tiddlers/Jump to the Top of Story River.tid @@ -1,5 +1,5 @@ created: 20180703030324462 -modified: 20190216180315278 +modified: 20190704155015776 tags: title: Jump to the Top of Story River type: text/vnd.tiddlywiki diff --git a/tiddlers/KeeBoord Plugin.tid b/tiddlers/KeeBoord Plugin.tid index cdf233a..63ae7b6 100644 --- a/tiddlers/KeeBoord Plugin.tid +++ b/tiddlers/KeeBoord Plugin.tid @@ -2,7 +2,7 @@ author: BurningTreeC created: 20180829034040965 creator: Mohammad description: Keybord shorcuts lets bind shortcut keys with several TW actions. Note the github repository is located in: https://github.com/BurningTreeC/KeeBoord -modified: 20190216180315272 +modified: 20190704155015766 modifier: Mohammad name: KeeBoord plugin tags: Links diff --git a/tiddlers/Kookma.tid b/tiddlers/Kookma.tid index f036cb9..e25637f 100644 --- a/tiddlers/Kookma.tid +++ b/tiddlers/Kookma.tid @@ -1,6 +1,6 @@ created: 20180905161401120 creator: Mohammad -modified: 20190216180315228 +modified: 20190704155015761 modifier: Mohammad tags: mywiki title: Kookma diff --git a/tiddlers/Latest Topics.json b/tiddlers/Latest Topics.json new file mode 100644 index 0000000..dd1de9c --- /dev/null +++ b/tiddlers/Latest Topics.json @@ -0,0 +1,12 @@ +[ + { + "created": "20190122152943164", + "title": "Latest Topics", + "text": "Latest solutions added to TW-Scripts within last 7 days.\n\n<>\n", + "creator": "Mohammad", + "modified": "20190704155015755", + "modifier": "Mohammad", + "type": "text/vnd.tiddlywiki", + "class": " Appricot" + } +] \ No newline at end of file diff --git a/tiddlers/Latest Topics.tid b/tiddlers/Latest Topics.tid deleted file mode 100644 index cbec30a..0000000 --- a/tiddlers/Latest Topics.tid +++ /dev/null @@ -1,11 +0,0 @@ -class: Appricot -created: 20190122152943164 -creator: Mohammad -modified: 20190224163832928 -modifier: Mohammad -title: Latest Topics -type: text/vnd.tiddlywiki - -Latest solutions added to TW-Scripts within last 7 days. - -<> diff --git a/tiddlers/Learn CSS in 30 Seconds.tid b/tiddlers/Learn CSS in 30 Seconds.tid new file mode 100644 index 0000000..3bf40d8 --- /dev/null +++ b/tiddlers/Learn CSS in 30 Seconds.tid @@ -0,0 +1,11 @@ +created: 20190629111634947 +creator: Mohammad +description: A curated collection of useful CSS snippets you can understand in 30 seconds or less. This has many tips and trucks to work with CSS including background images. +developer: 30-seconds.github.io +modified: 20190704155015750 +modifier: Mohammad +tags: Links +title: Learn CSS in 30 Seconds +type: text/vnd.tiddlywiki +url: https://30-seconds.github.io/30-seconds-of-css/ +wiki-name: 30 Seconds of CSS \ No newline at end of file diff --git a/tiddlers/Learning Resources.tid b/tiddlers/Learning Resources.tid index 6245d68..8e4f191 100644 --- a/tiddlers/Learning Resources.tid +++ b/tiddlers/Learning Resources.tid @@ -1,6 +1,6 @@ created: 20180517010725068 creator: Mohammad -modified: 20190216180315192 +modified: 20190704155015734 modifier: Mohammad tags: Links title: Learning Resources diff --git a/tiddlers/Leftbar Plugin.tid b/tiddlers/Leftbar Plugin.tid index b19c708..6af972f 100644 --- a/tiddlers/Leftbar Plugin.tid +++ b/tiddlers/Leftbar Plugin.tid @@ -2,11 +2,10 @@ author: Mat von TWaddle created: 20180905160337554 creator: Mohammad description: Leftbar is a plugin to get a second sidebar on the left side -modified: 20190216180315177 +modified: 20190704155015726 modifier: Mohammad name: Leftbar tags: Links title: Leftbar Plugin type: text/vnd.tiddlywiki -url: http://leftbar.tiddlyspot.com/ - +url: http://leftbar.tiddlyspot.com/ \ No newline at end of file diff --git a/tiddlers/Line break in Filters Attributes.tid b/tiddlers/Line break in Filters Attributes.tid index 59153ba..611d730 100644 --- a/tiddlers/Line break in Filters Attributes.tid +++ b/tiddlers/Line break in Filters Attributes.tid @@ -1,7 +1,7 @@ created: 20190111074214190 creator: Mohammad keywords: filter attribute linebreak -modified: 20190216180315166 +modified: 20190704155015980 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Link to Tabs.json b/tiddlers/Link to Tabs.json new file mode 100644 index 0000000..a954670 --- /dev/null +++ b/tiddlers/Link to Tabs.json @@ -0,0 +1,16 @@ +[ + { + "created": "20181226191518911", + "title": "Link to Tabs", + "text": "", + "creator": "Mohammad", + "modified": "20190704155015956", + "modifier": "Mohammad", + "tags": "Links", + "type": "text/vnd.tiddlywiki", + "description": "This plugin adds a little link icon to every tab", + "developer": "Mario Pietsch ", + "url": "https://wikilabs.github.io/editions/link-to-tabs/", + "wiki-name": "" + } +] \ No newline at end of file diff --git a/tiddlers/Link to Tabs.tid b/tiddlers/Link to Tabs.tid deleted file mode 100644 index 3112dcf..0000000 --- a/tiddlers/Link to Tabs.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20181226191518911 -creator: Mohammad -description: This plugin adds a little link icon to every tab -developer: Mario Pietsch -modified: 20190216180315136 -modifier: Mohammad -tags: Links -title: Link to Tabs -type: text/vnd.tiddlywiki -url: https://wikilabs.github.io/editions/link-to-tabs/ -wiki-name: - diff --git a/tiddlers/Link to a PDF File on a Specific Page.tid b/tiddlers/Link to a PDF File on a Specific Page.tid index 36f234e..1c3be2a 100644 --- a/tiddlers/Link to a PDF File on a Specific Page.tid +++ b/tiddlers/Link to a PDF File on a Specific Page.tid @@ -1,7 +1,7 @@ created: 20181011062926118 creator: Mohammad keywords: external link pdf page -modified: 20190216180315156 +modified: 20190704155015968 modifier: Mohammad responder: Mark S tags: exmp26 solution diff --git a/tiddlers/Link to a Tiddler Based on a Field Value.tid b/tiddlers/Link to a Tiddler Based on a Field Value.tid index b90a3ea..76234fb 100644 --- a/tiddlers/Link to a Tiddler Based on a Field Value.tid +++ b/tiddlers/Link to a Tiddler Based on a Field Value.tid @@ -1,7 +1,7 @@ created: 20190209050057116 creator: Mohammad keywords: link field -modified: 20190216180315141 +modified: 20190704155015962 modifier: Mohammad tags: field title: Link to a Tiddler Based on a Field Value diff --git a/tiddlers/Link to the Top of Story River.tid b/tiddlers/Link to the Top of Story River.tid index d130412..d3b7af2 100644 --- a/tiddlers/Link to the Top of Story River.tid +++ b/tiddlers/Link to the Top of Story River.tid @@ -1,5 +1,5 @@ created: 20180728065915859 -modified: 20190216180315128 +modified: 20190704155015948 tags: title: Link to the Top of Story River type: text/vnd.tiddlywiki diff --git a/tiddlers/Links.tid b/tiddlers/Links.tid index b825514..8974bd2 100644 --- a/tiddlers/Links.tid +++ b/tiddlers/Links.tid @@ -1,9 +1,8 @@ created: 20180616072859836 creator: Mohammad list: [[Action JSON Widget]] ActionListops [[Andrew Harrison Adventures]] [[Animation CSS]] [[Batch Manupulator]] Calendar [[Check List Demo]] [[Class Field]] [[Color Contrast Analyzer]] [[Color Palette]] [[Community Search]] [[Concept Book]] [[CSS Library]] [[CSS Minifier]] Effects.CSS [[Encrypt Tiddler Plugin]] [[EscapeCSS Plugin]] [[Export a List of Tiddlers]] Favorites [[Font Awesome]] [[Full Text Search Plugin]] [[Fullscreen editor]] [[Getting Started with Node.js on Windows]] [[H5bp Source for CSS]] [[How to Make TW5 Readonly]] [[HTML References]] Ibox [[In My Socks]] [[Inside Tiddlywiki]] [[KeeBoord Plugin]] [[Learning Resources]] [[Leftbar Plugin]] [[Link to Tabs]] [[Material Icons]] [[Mobile theme]] [[No Learning Required]] [[Noteself forum]] Octicons [[Online Store]] [[OpenAll Button Plugin]] [[OpenAll Tagged]] [[Playgroung by Magnus]] [[PSaT Wiki]] [[Public Sidebar]] [[Spellcheck Plugin for Codemirror]] [[Stephan Hradek]] [[Stephen Teacher Test]] Tesseract [[The Lost Admin]] [[Theming with CSS variables in RGBA]] [[Thomas Elmiger Plugins]] [[Tiddlywiki 5 Adventures]] [[Toggle Admin]] [[Toggle Macro]] [[TW and Social Media]] [[TW as Online Store]] [[TW Community Serach]] [[TW Hacks]] TW-Admin [[TW5 Quick Ref]] -modified: 20190216180315122 +modified: 20190704155015940 modifier: Mohammad tags: contents title: Links -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/List All Tiddlers Created or Modified in Last x Days.tid b/tiddlers/List All Tiddlers Created or Modified in Last x Days.tid index 45487cb..92426a3 100644 --- a/tiddlers/List All Tiddlers Created or Modified in Last x Days.tid +++ b/tiddlers/List All Tiddlers Created or Modified in Last x Days.tid @@ -1,7 +1,7 @@ created: 20190201095848057 creator: Mohammad keywords: days modified -modified: 20190224163833646 +modified: 20190704155015902 modifier: Mohammad responder: Anthony Muscio (TonyM) tags: solution diff --git a/tiddlers/List All Tiddlers Modified in Last x Days.tid b/tiddlers/List All Tiddlers Modified in Last x Days.tid deleted file mode 100644 index 4ab956f..0000000 --- a/tiddlers/List All Tiddlers Modified in Last x Days.tid +++ /dev/null @@ -1,24 +0,0 @@ -created: 20190201095848057 -creator: Mohammad -keywords: days modified -modified: 20190216180315069 -modifier: Mohammad -responder: Anthony Muscio (TonyM) -tags: solution -title: List All Tiddlers Modified in Last x Days -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/hDU8Ed1UArQ/Zo0UgxH-HAAJ - -;How to list all tiddlers modified in the last x days? -: Use `days` operator. -As described in [[Days Operator|https://tiddlywiki.com/#days%20Operator]] -Select tiddlers where a specified date field (default "modified") is within a specified date range. Time portion is ignored. - -!! Example -List all tiddlers tagged with `solution` and modified within the last two days. - -<$macrocall $name="wikitext-example-without-html" -src="""><$list filter="[tag[solution]days[-2]!sort[modified]]"> - - -"""/> diff --git a/tiddlers/List Changes in Current Session.tid b/tiddlers/List Changes in Current Session.tid index 8b3ba47..1133830 100644 --- a/tiddlers/List Changes in Current Session.tid +++ b/tiddlers/List Changes in Current Session.tid @@ -1,7 +1,7 @@ created: 20190128050643481 creator: Mohammad keywords: last modified change current-session haschanged -modified: 20190216180315047 +modified: 20190704155015867 modifier: Mohammad tags: operator title: List Changes in Current Session diff --git a/tiddlers/List Contact Tiddlers Based on a Category.tid b/tiddlers/List Contact Tiddlers Based on a Category.tid index 58786bd..f1da2f7 100644 --- a/tiddlers/List Contact Tiddlers Based on a Category.tid +++ b/tiddlers/List Contact Tiddlers Based on a Category.tid @@ -1,7 +1,7 @@ created: 20180620190444548 creator: Mohammad keywords: list sorting hierarchy -modified: 20190216180315039 +modified: 20190704155015861 modifier: Mohammad responder: Eric Shulman tags: exmp01 solution diff --git a/tiddlers/List Results into Hardcopy.tid b/tiddlers/List Results into Hardcopy.tid index dd6c18a..08f080a 100644 --- a/tiddlers/List Results into Hardcopy.tid +++ b/tiddlers/List Results into Hardcopy.tid @@ -1,7 +1,7 @@ created: 20181213053823906 creator: Mohammad keywords: list static hardcopy convert merge -modified: 20190216180315030 +modified: 20190704155015846 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/List Tiddler Tags Based on a Field.json b/tiddlers/List Tiddler Tags Based on a Field.json new file mode 100644 index 0000000..b5b5aaf --- /dev/null +++ b/tiddlers/List Tiddler Tags Based on a Field.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190109095528835", + "title": "List Tiddler Tags Based on a Field", + "text": "There as a question by [[bimlas|https://groups.google.com/d/msg/tiddlywiki/uYGhHaZzo9w/zK6mMJtEEQAJ]] on using a stored variabe value in other scopes. \n\n[[Mark S|https://groups.google.com/d/msg/tiddlywiki/uYGhHaZzo9w/x-RIBEuuEQAJ]] gave a neat solution as below (I have modified it for minor issues)\n\n```\n\\define mytiddlerslist()\n<$list filter=\"[has[myfield]tags[]]\"><$view field=title/> \n\\end\n<$wikify name=\"mytiddlers\" text=<>>\n<$list filter=\"\" variable=\"v\"><>\n\n```\nThis means using a macro the same variable can be used in different scope. A working example based on this has been given in [[Example 21: List Tags Based on a Field]]. It that all tiddlers with a //responder// `filed` are listed and then their tags are displayed using a list widget in another scope.\n\n<>\n", + "creator": "Mohammad", + "modified": "20190704155015833", + "modifier": "Mohammad", + "tags": "exmp21 solution", + "type": "text/vnd.tiddlywiki", + "keywords": "variable wikify store value scope ", + "responder": "Mohammad", + "url": "https://groups.google.com/d/msg/tiddlywiki/uYGhHaZzo9w/QpULYX7eBwAJ" + } +] \ No newline at end of file diff --git a/tiddlers/List Tiddler Tags Based on a Field.tid b/tiddlers/List Tiddler Tags Based on a Field.tid deleted file mode 100644 index edcc51f..0000000 --- a/tiddlers/List Tiddler Tags Based on a Field.tid +++ /dev/null @@ -1,26 +0,0 @@ -created: 20190109095528835 -creator: Mohammad -keywords: variable wikify store value scope -modified: 20190216180315009 -modifier: Mohammad -responder: Mohammad -tags: exmp21 solution -title: List Tiddler Tags Based on a Field -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/uYGhHaZzo9w/QpULYX7eBwAJ - -There as a question by [[bimlas|https://groups.google.com/d/msg/tiddlywiki/uYGhHaZzo9w/zK6mMJtEEQAJ]] on using a stored variabe value in other scopes. - -[[Mark S|https://groups.google.com/d/msg/tiddlywiki/uYGhHaZzo9w/x-RIBEuuEQAJ]] gave a neat solution as below (I have modified it for minor issues) - -``` -\define mytiddlerslist() -<$list filter="[has[myfield]tags[]]"><$view field=title/> -\end -<$wikify name="mytiddlers" text=<>> -<$list filter="" variable="v"><> - -``` -This means using a macro the same variable can be used in different scope. A working example based on this has been given in [[Example 21: List Tags Based on a Field]]. It that all tiddlers with a //responder// `filed` are listed and then their tags are displayed using a list widget in another scope. - -<> diff --git a/tiddlers/List Tiddlers with Special Field.tid b/tiddlers/List Tiddlers with Special Field.tid index 77fe2f6..e8c622d 100644 --- a/tiddlers/List Tiddlers with Special Field.tid +++ b/tiddlers/List Tiddlers with Special Field.tid @@ -1,5 +1,5 @@ created: 20180621053320019 -modified: 20190216180315001 +modified: 20190704155015826 tags: title: List Tiddlers with Special Field type: text/vnd.tiddlywiki diff --git a/tiddlers/List Tiddlers with Their Tags as Tagpill.tid b/tiddlers/List Tiddlers with Their Tags as Tagpill.tid index 5574a15..22f8db2 100644 --- a/tiddlers/List Tiddlers with Their Tags as Tagpill.tid +++ b/tiddlers/List Tiddlers with Their Tags as Tagpill.tid @@ -1,7 +1,7 @@ created: 20180621061324745 creator: Mohammad keywords: tag tagpill list -modified: 20190216180314993 +modified: 20190704155015820 modifier: Mohammad responder: Anthony Muscio tags: solution diff --git a/tiddlers/List Tree.tid b/tiddlers/List Tree.tid new file mode 100644 index 0000000..0fe89d1 --- /dev/null +++ b/tiddlers/List Tree.tid @@ -0,0 +1,11 @@ +created: 20190606064630133 +creator: Mohammad +description: ListTree is a stylesheet plugin to reshape common TW asterisk/bullet lists into list trees. You just apply a style to the bullet list. This useful for creating customize unordered list. +developer: twMat +modified: 20190704155015813 +modifier: Mohammad +tags: Links +title: List Tree +type: text/vnd.tiddlywiki +url: http://listtree.tiddlyspot.com/ +wiki-name: List Tree \ No newline at end of file diff --git a/tiddlers/List Widget Variable.tid b/tiddlers/List Widget Variable.tid index 5a73608..21b4d9f 100644 --- a/tiddlers/List Widget Variable.tid +++ b/tiddlers/List Widget Variable.tid @@ -1,5 +1,5 @@ created: 20180701133610921 -modified: 20190216180314987 +modified: 20190704155016150 tags: list exmp03 test-field: 100 title: List Widget Variable diff --git a/tiddlers/List all DataTiddlers.tid b/tiddlers/List all DataTiddlers.tid index 3f450c4..44f003b 100644 --- a/tiddlers/List all DataTiddlers.tid +++ b/tiddlers/List all DataTiddlers.tid @@ -1,6 +1,6 @@ created: 20190207061624681 creator: Mohammad -modified: 20190216180315115 +modified: 20190704155015931 modifier: Mohammad tags: datatiddler title: List all DataTiddlers diff --git a/tiddlers/List all Fields in the Current TW.tid b/tiddlers/List all Fields in the Current TW.tid index e540df0..c5f610f 100644 --- a/tiddlers/List all Fields in the Current TW.tid +++ b/tiddlers/List all Fields in the Current TW.tid @@ -1,7 +1,7 @@ created: 20190131191009343 creator: Mohammad keywords: select fields operator -modified: 20190216180315105 +modified: 20190704155015918 modifier: Mohammad tags: exmp34 title: List all Fields in the Current TW diff --git a/tiddlers/List all Tiddlers Created in x Days.tid b/tiddlers/List all Tiddlers Created in x Days.tid index 70cea27..0c05126 100644 --- a/tiddlers/List all Tiddlers Created in x Days.tid +++ b/tiddlers/List all Tiddlers Created in x Days.tid @@ -1,7 +1,7 @@ created: 20180730153712290 creator: Mohammad keywords: created day list -modified: 20190216180315075 +modified: 20190704155015910 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/List and ListWidget.tid b/tiddlers/List and ListWidget.tid index 0030dff..a8c32e4 100644 --- a/tiddlers/List and ListWidget.tid +++ b/tiddlers/List and ListWidget.tid @@ -1,6 +1,6 @@ created: 20180421071642344 creator: Mohammad -modified: 20190216180315063 +modified: 20190704155015893 modifier: Mohammad tags: learn title: List and ListWidget diff --git a/tiddlers/List and Transclude Tiddlers with Today Date.tid b/tiddlers/List and Transclude Tiddlers with Today Date.tid index d7fb701..69acf72 100644 --- a/tiddlers/List and Transclude Tiddlers with Today Date.tid +++ b/tiddlers/List and Transclude Tiddlers with Today Date.tid @@ -1,7 +1,7 @@ created: 20181018133453367 creator: Mohammad keywords: transclude list now date -modified: 20190216180315057 +modified: 20190704155015882 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/List by Tag but Sort and Show by Field Value.tid b/tiddlers/List by Tag but Sort and Show by Field Value.tid index e08faa2..6d143c0 100644 --- a/tiddlers/List by Tag but Sort and Show by Field Value.tid +++ b/tiddlers/List by Tag but Sort and Show by Field Value.tid @@ -1,7 +1,7 @@ created: 20190331091058156 creator: Mohammad keywords: list sort field get -modified: 20190406122518105 +modified: 20190704155015876 modifier: Mohammad responder: Jed Carty tags: exmp56 solution diff --git a/tiddlers/List filter with empty tiddler values.tid b/tiddlers/List filter with empty tiddler values.tid new file mode 100644 index 0000000..e7dc561 --- /dev/null +++ b/tiddlers/List filter with empty tiddler values.tid @@ -0,0 +1,12 @@ +created: 20190405202056425 +creator: Mohammad +keywords: +modified: 20190704155015854 +modifier: Mohammad +responder: S.S. +tags: solution +title: List filter with empty tiddler values +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/8w1ECnon6qA/zx24c8ANCQAJ + +<> \ No newline at end of file diff --git a/tiddlers/List the Last Ten Modified Tiddlers.tid b/tiddlers/List the Last Ten Modified Tiddlers.tid index b5b20d1..b569c8d 100644 --- a/tiddlers/List the Last Ten Modified Tiddlers.tid +++ b/tiddlers/List the Last Ten Modified Tiddlers.tid @@ -1,7 +1,7 @@ created: 20190127102432404 creator: Mohammad keywords: last modified limit change -modified: 20190216180315022 +modified: 20190704155015840 modifier: Mohammad responder: Jeremy Ruston tags: exmp31 solution diff --git a/tiddlers/List-Link Macro.tid b/tiddlers/List-Link Macro.tid index 064e03f..a724454 100644 --- a/tiddlers/List-Link Macro.tid +++ b/tiddlers/List-Link Macro.tid @@ -1,6 +1,6 @@ created: 20180421082547817 creator: Mohammad -modified: 20190216180314976 +modified: 20190704155016142 modifier: Mohammad tags: list filter title: List-Link Macro diff --git a/tiddlers/ListWidget Examples 2.tid b/tiddlers/ListWidget Examples 2.tid index d68e775..1f098ec 100644 --- a/tiddlers/ListWidget Examples 2.tid +++ b/tiddlers/ListWidget Examples 2.tid @@ -1,6 +1,6 @@ created: 20180421083314148 creator: Mohammad -modified: 20190216180314945 +modified: 20190704155016102 modifier: Mohammad tags: title: ListWidget Examples 2 diff --git a/tiddlers/ListWidget More Examples.tid b/tiddlers/ListWidget More Examples.tid index ea5b273..4426a16 100644 --- a/tiddlers/ListWidget More Examples.tid +++ b/tiddlers/ListWidget More Examples.tid @@ -1,6 +1,6 @@ created: 20180421081851618 creator: Mohammad -modified: 20190216180314938 +modified: 20190704155016092 modifier: Mohammad tags: learn title: ListWidget More Examples diff --git a/tiddlers/ListWidget-CSS.css.meta b/tiddlers/ListWidget-CSS.css.meta index 6983e59..8554f6b 100644 --- a/tiddlers/ListWidget-CSS.css.meta +++ b/tiddlers/ListWidget-CSS.css.meta @@ -1,7 +1,7 @@ created: 20180421083212333 creator: Mohammad -modified: 20190216180314929 +modified: 20190704155016082 modifier: Mohammad tags: learn $:/tags/Stylesheet title: ListWidget-CSS -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/Listing DataTiddler Properties.tid b/tiddlers/Listing DataTiddler Properties.tid index ecb286d..09d4841 100644 --- a/tiddlers/Listing DataTiddler Properties.tid +++ b/tiddlers/Listing DataTiddler Properties.tid @@ -1,6 +1,6 @@ created: 20190207042248903 creator: Mohammad -modified: 20190216180314957 +modified: 20190704155016121 modifier: Mohammad tags: datatiddler exmp39 title: Listing DataTiddler Properties diff --git a/tiddlers/Lists in Tiddlywiki.tid b/tiddlers/Lists in Tiddlywiki.tid index 212ee14..96c30e7 100644 --- a/tiddlers/Lists in Tiddlywiki.tid +++ b/tiddlers/Lists in Tiddlywiki.tid @@ -1,6 +1,6 @@ created: 20190317164107191 creator: Mohammad -modified: 20190406122518014 +modified: 20190704155016110 modifier: Mohammad tags: concept title: Lists in Tiddlywiki diff --git a/tiddlers/Load a Local HTML File in an Iframe.tid b/tiddlers/Load a Local HTML File in an Iframe.tid index 2387881..bbd9f6b 100644 --- a/tiddlers/Load a Local HTML File in an Iframe.tid +++ b/tiddlers/Load a Local HTML File in an Iframe.tid @@ -1,7 +1,7 @@ created: 20190130165138330 creator: Mohammad keywords: iframe local html file -modified: 20190216180314921 +modified: 20190704155016076 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/Logical Opertaion with Filters.json b/tiddlers/Logical Opertaion with Filters.json new file mode 100644 index 0000000..0ac3945 --- /dev/null +++ b/tiddlers/Logical Opertaion with Filters.json @@ -0,0 +1,15 @@ +[ + { + "created": "20181022181955857", + "title": "Logical Opertaion with Filters", + "text": "Filtering is very powerful and it can be used for logical operations. This is some notes about logic operations using filtering in tiddlywiki. Most of what is here isn't all that useful generally, but hopefully it can be used to simplify filtering problems in tiddlywiki.\n\nFilter operators that this applies to the operators //days//, //field//, //has//, //haschanged//, //is//, //regexp//, //sameday//, //search//, //prefix//, //suffix//, //tag// and untagged\n\n\n<>", + "creator": "Mohammad", + "modified": "20190704155016067", + "modifier": "Mohammad", + "tags": "filter solution", + "type": "text/vnd.tiddlywiki", + "keywords": "filter list logical ", + "responder": "Jed Carty", + "url": "https://ooktech.com/jed/ExampleWikis/FilterLogicExamples/" + } +] \ No newline at end of file diff --git a/tiddlers/Logical Opertaion with Filters.tid b/tiddlers/Logical Opertaion with Filters.tid deleted file mode 100644 index a3f66f7..0000000 --- a/tiddlers/Logical Opertaion with Filters.tid +++ /dev/null @@ -1,17 +0,0 @@ -created: 20181022181955857 -creator: Mohammad -keywords: filter list logical -modified: 20190216180314906 -modifier: Mohammad -responder: Jed Carty -tags: filter solution -title: Logical Opertaion with Filters -type: text/vnd.tiddlywiki -url: https://ooktech.com/jed/ExampleWikis/FilterLogicExamples/ - -Filtering is very powerful and it can be used for logical operations. This is some notes about logic operations using filtering in tiddlywiki. Most of what is here isn't all that useful generally, but hopefully it can be used to simplify filtering problems in tiddlywiki. - -Filter operators that this applies to the operators //days//, //field//, //has//, //haschanged//, //is//, //regexp//, //sameday//, //search//, //prefix//, //suffix//, //tag// and untagged - - -<> \ No newline at end of file diff --git a/tiddlers/LoremIpsum.tid b/tiddlers/LoremIpsum.tid index e386348..f45a54f 100644 --- a/tiddlers/LoremIpsum.tid +++ b/tiddlers/LoremIpsum.tid @@ -1,5 +1,5 @@ created: 20180814091650055 -modified: 20190216180314886 +modified: 20190704155016060 title: LoremIpsum type: text/vnd.tiddlywiki diff --git a/tiddlers/Macro Overloading.json b/tiddlers/Macro Overloading.json new file mode 100644 index 0000000..71af70b --- /dev/null +++ b/tiddlers/Macro Overloading.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190207124605082", + "title": "Macro Overloading", + "text": "<<< [[Wikipedia|https://en.wikipedia.org/wiki/Function_overloading]]\nIn some programming languages, function overloading or method overloading is the ability to create multiple functions of the same name with different implementations. Calls to an overloaded function will run a specific implementation of that function appropriate to the context of the call, allowing one function call to perform different tasks depending on context. \n<<<\n\n;What is macro overloading in TiddlyWiki?\n: If a macro is called in a scope one (e.g inside a tiddler) and the macro itself calls another macro (a second macro) internally say //maymac//, then if this second macro //maymac// is existed in the scope of calling tiddler, it will override the core or other scope macro! This is macro overloading.\n\nA good example is the `toc-caption` macro. For more information see Jeremy Ruston explanation [[here|https://groups.google.com/d/msg/tiddlywiki/sZNfQBxMs3c/eOXiDEFxDAAJ]].\n\n!! Example\nA set of macros has been defined in [[exmp43/macro/overloading]] as follows:\n\n>
    <$view tiddler=\"exmp43/macro/overloading\" />
    \nIf the macro `mac-xx` is called the expected output is as below:\n\n<<<\n<>\n<<<\n\nNow, consider it is called from [[Example 43: Macro Overloading]] which itself has an internal macro with the same name `mac-xx` as defined in [[exmp43/macro/overloading]].\n\n>
    <$view tiddler=\"Example 43: Macro Overloading\"/>
    \n\nStrangely the out is as bellow:\n\n>{{Example 43: Macro Overloading}}\n\nWhat happened is, in the second case there is a `mac-xx` defined inside [[Example 43: Macro Overloading]], so TW overloads the original macro with this one.", + "creator": "Mohammad", + "modified": "20190704155016032", + "modifier": "Mohammad", + "tags": "exmp43 solution", + "type": "text/vnd.tiddlywiki", + "keywords": "macro variable overload ", + "responder": "Jeremy Ruston", + "url": "https://groups.google.com/d/msg/tiddlywiki/sZNfQBxMs3c/c-QLG4F0DAAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Macro Overloading.tid b/tiddlers/Macro Overloading.tid deleted file mode 100644 index 2d3107a..0000000 --- a/tiddlers/Macro Overloading.tid +++ /dev/null @@ -1,39 +0,0 @@ -created: 20190207124605082 -creator: Mohammad -keywords: macro variable overload -modified: 20190216180314871 -modifier: Mohammad -responder: Jeremy Ruston -tags: exmp43 solution -title: Macro Overloading -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/sZNfQBxMs3c/c-QLG4F0DAAJ - -<<< [[Wikipedia|https://en.wikipedia.org/wiki/Function_overloading]] -In some programming languages, function overloading or method overloading is the ability to create multiple functions of the same name with different implementations. Calls to an overloaded function will run a specific implementation of that function appropriate to the context of the call, allowing one function call to perform different tasks depending on context. -<<< - -;What is macro overloading in TiddlyWiki? -: If a macro is called in a scope one (e.g inside a tiddler) and the macro itself calls another macro (a second macro) internally say //maymac//, then if this second macro //maymac// is existed in the scope of calling tiddler, it will override the core or other scope macro! This is macro overloading. - -A good example is the `toc-caption` macro. For more information see Jeremy Ruston explanation [[here|https://groups.google.com/d/msg/tiddlywiki/sZNfQBxMs3c/eOXiDEFxDAAJ]]. - -!! Example -A set of macros has been defined in [[exmp43/macro/overloading]] as follows: - ->
    <$view tiddler="exmp43/macro/overloading" />
    -If the macro `mac-xx` is called the expected output is as below: - -<<< -<> -<<< - -Now, consider it is called from [[Example 43: Macro Overloading]] which itself has an internal macro with the same name `mac-xx` as defined in [[exmp43/macro/overloading]]. - ->
    <$view tiddler="Example 43: Macro Overloading"/>
    - -Strangely the out is as bellow: - ->{{Example 43: Macro Overloading}} - -What happened is, in the second case there is a `mac-xx` defined inside [[Example 43: Macro Overloading]], so TW overloads the original macro with this one. \ No newline at end of file diff --git a/tiddlers/Macro Tutorial.tid b/tiddlers/Macro Tutorial.tid index e587d0c..06f9576 100644 --- a/tiddlers/Macro Tutorial.tid +++ b/tiddlers/Macro Tutorial.tid @@ -1,6 +1,6 @@ created: 20180602031908733 creator: Mohammad -modified: 20190216180314862 +modified: 20190704155016025 modifier: Mohammad tags: macro tutorial learning title: Macro Tutorial diff --git a/tiddlers/Macro in Exmp 12.tid b/tiddlers/Macro in Exmp 12.tid index 7f1958c..c349eb1 100644 --- a/tiddlers/Macro in Exmp 12.tid +++ b/tiddlers/Macro in Exmp 12.tid @@ -1,6 +1,6 @@ created: 20181028044341194 creator: Mohammad -modified: 20190216180314876 +modified: 20190704155016047 modifier: Mohammad tags: exmp12 $:/tags/Macro title: Macro in Exmp 12 diff --git a/tiddlers/Macro in Tiddlywiki_ A Programming Issue.tid b/tiddlers/Macro in Tiddlywiki_ A Programming Issue.tid index a445615..386ebbe 100644 --- a/tiddlers/Macro in Tiddlywiki_ A Programming Issue.tid +++ b/tiddlers/Macro in Tiddlywiki_ A Programming Issue.tid @@ -1,7 +1,7 @@ created: 20190226082832151 creator: Mohammad keywords: macro script -modified: 20190316114917819 +modified: 20190704155016041 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Macro with Variable Number of Arguments.tid b/tiddlers/Macro with Variable Number of Arguments.tid index 6efb80b..e80dec3 100644 --- a/tiddlers/Macro with Variable Number of Arguments.tid +++ b/tiddlers/Macro with Variable Number of Arguments.tid @@ -1,7 +1,7 @@ created: 20181121135914234 creator: Mohammad keywords: macro attribute parameter argument variable -modified: 20190216180314855 +modified: 20190704155016016 modifier: Mohammad responder: Mark S tags: exmp13 solution diff --git a/tiddlers/Make Version Incremented Backup on Windows.tid b/tiddlers/Make Version Incremented Backup on Windows.tid new file mode 100644 index 0000000..60f4b28 --- /dev/null +++ b/tiddlers/Make Version Incremented Backup on Windows.tid @@ -0,0 +1,97 @@ +created: 20190407220556955 +creator: Mohammad +keywords: robocopy backup windows +modified: 20190704155016277 +modifier: Mohammad +responder: Mohammad rahmani +tags: solution +title: Make Version Incremented Backup on Windows +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/j28oUuw5x3A/du8r_yLGCQAJ + +The below code uses robocopy to create a version-incremented copies of files (here tiddlers) + +The script: + +* always create an identical copy of source tiddlers +* create version-incremented copies of all files differ from their source (you may change a tiddler in source or backup folder) +* version number started from 000 ~ 999, so this is maximum number of versions +* use robocopy which is very fast method for creating backups +* +!! How to use +* change the source and destination folders to meet your case +* run the batch file + +``` +:: Ref: https://www.experts-exchange.com/questions/23427327/How-to-use-Robocopy-to-create-files-Versions.html +:: Running the script will first Robocopy any files which don't already exist in the destination, +:: then use xcopy to create version-incremented copies of any files which do exist in the destination. +:: Mohammad Rahmani +:: Github: https://github.com/kookma + +:: Rev 0.9 +:: Apr 8th, 2019 + + +@echo off +cls + + +:: Source and destination paths. Do not include a trailing backslash +set SourceFolder="G:\Test-Robocopy\my source" +set DestinationFolder="G:\Test-Robocopy\my dest" + + :: ------------------------------------------------------------------------------------------------ + + :: Remove double and single qoutes if any + set source=%SourceFolder:"=% + set source=%source:'=% + set dest=%DestinationFolder:"=% + set dest=%dest:'=% + + setlocal EnableDelayedExpansion + :: Copy any file, folder not existed in the destination +robocopy "%source%" "%dest%" /XC /XN /XO /R:3 /W:3 /E /XX + +:: List all files existed in destination, but there is a difference between each file and its +:: source +for /F "tokens=*" %%G in ('robocopy "%source%" "%dest%" /XX /L /NDL /NS /NC /NJH /NJS /E') do ( + call :_process "%%G" +) +goto :eof + +:: The process subroutine here does the below tasks +:: a. create a new copy of destination file prefixed with _vxxx, where xxx: 001 ~ 999 (version-incremented copies ) +:: so this only keep 1000 revisions and cannot work for more revisions +:: b. copy the source file and overwrite the destination. So, destination is always equal to source +:_process +set counter=0 +set version=000 +set source_path=%~dp1 +set file=%~n1 +set ext=%~x1 + +:: Create the destionation path for the existed file. by replacing the +:: source path with destination path. (search and replace) +set dest_path=!source_path:%source%=%dest%! + + +:: Check to see what is the last version number to create the next version number +:_loop +if exist "%dest_path%%file%_v%version%%ext%" ( + set /A counter+=1 + :: create a number with leading zeros like 001 ~ 999 + set version=000!counter! + set version=!version:~-3! + goto :_loop +) + +:: Increment the version number of the file in destination which differes from its identical one in source +echo F|xcopy "%dest_path%%file%%ext%" "%dest_path%%file%_v%version%%ext%" /C /H /R /Z /Q +:: Copy from source and overwrite the respective file in destination: source = destination +echo F|xcopy %1 "%dest_path%\%file%%ext%" /C /H /R /Z /Y /Q +goto :eof + +endlocal + +``` \ No newline at end of file diff --git a/tiddlers/Make a List of Buttons.tid b/tiddlers/Make a List of Buttons.tid index 4fc5193..658f8b9 100644 --- a/tiddlers/Make a List of Buttons.tid +++ b/tiddlers/Make a List of Buttons.tid @@ -1,7 +1,7 @@ created: 20180628053232315 creator: Mohammad list: [[Exmp02-P03 Space in Title]] -modified: 20190216180316127 +modified: 20190704155016285 modifier: Mohammad tags: button exmp02 title: Make a List of Buttons diff --git a/tiddlers/Add More Languages to Highlight.js.tid b/tiddlers/Manually Add More Language Brushes to Highlight.js.tid similarity index 82% rename from tiddlers/Add More Languages to Highlight.js.tid rename to tiddlers/Manually Add More Language Brushes to Highlight.js.tid index 0107588..01610b3 100644 --- a/tiddlers/Add More Languages to Highlight.js.tid +++ b/tiddlers/Manually Add More Language Brushes to Highlight.js.tid @@ -1,11 +1,11 @@ created: 20181225092038216 creator: Mohammad keywords: highlight.js language fortran -modified: 20190216180308279 +modified: 20190704155016269 modifier: Mohammad responder: Mohammad -tags: highlight solution -title: Add More Languages to Highlight.js +tags: solution +title: Manually Add More Language Brushes to Highlight.js type: text/vnd.tiddlywiki url: https://groups.google.com/d/msg/tiddlywiki/ufyuVgqjT9Y/CTaQQ8DnBAAJ @@ -39,4 +39,5 @@ That's all <> !! Remarks -* To add Fortran, Matlab and other languages not available in TW official plugin do as described above \ No newline at end of file +* See [[Add More Language Brushes to Highlight.js Plugin]] +* Using these procedure, you can add brushes for Fortran, Matlab, Julia, ... \ No newline at end of file diff --git a/tiddlers/Material Icons.tid b/tiddlers/Material Icons.tid index 1a2bc92..6f89265 100644 --- a/tiddlers/Material Icons.tid +++ b/tiddlers/Material Icons.tid @@ -2,7 +2,7 @@ author: Google created: 20181002042641108 creator: Mohammad description: Material icons are delightful, beautifully crafted symbols for common actions and items. -modified: 20190216180316110 +modified: 20190704155016263 modifier: Mohammad name: Material Icons tags: icon Links diff --git a/tiddlers/Maths in Tiddlywiki.tid b/tiddlers/Maths in Tiddlywiki similarity index 92% rename from tiddlers/Maths in Tiddlywiki.tid rename to tiddlers/Maths in Tiddlywiki index ab1ffc4..7014d12 100644 --- a/tiddlers/Maths in Tiddlywiki.tid +++ b/tiddlers/Maths in Tiddlywiki @@ -1,11 +1,3 @@ -created: 20190208043656547 -creator: Mohammad -modified: 20190216180316090 -modifier: Mohammad -tags: task -title: Maths in Tiddlywiki -type: application/x-tiddler-dictionary - Ref: https://groups.google.com/d/msg/tiddlywiki/T_v5vSiCEDA/63DmurWSDAAJ negate: negation abs: absolute value diff --git a/tiddlers/Maths in Tiddlywiki.meta b/tiddlers/Maths in Tiddlywiki.meta new file mode 100644 index 0000000..df57443 --- /dev/null +++ b/tiddlers/Maths in Tiddlywiki.meta @@ -0,0 +1,7 @@ +created: 20190208043656547 +creator: Mohammad +modified: 20190704155016258 +modifier: Mohammad +tags: task +title: Maths in Tiddlywiki +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/Maximum Width of TOC.tid b/tiddlers/Maximum Width of TOC.tid index f558300..2c8990d 100644 --- a/tiddlers/Maximum Width of TOC.tid +++ b/tiddlers/Maximum Width of TOC.tid @@ -1,7 +1,7 @@ created: 20181231151801763 creator: Mohammad keywords: toc table content width tabbed size -modified: 20190216180316069 +modified: 20190704155016253 modifier: Mohammad responder: Mark S tags: toc solution diff --git a/tiddlers/Mobile theme.tid b/tiddlers/Mobile theme.tid index e5120fb..89ca82c 100644 --- a/tiddlers/Mobile theme.tid +++ b/tiddlers/Mobile theme.tid @@ -2,11 +2,10 @@ created: 20190130182804433 creator: Mohammad description: This is a simple mobile theme. developer: Ton Gerner -modified: 20190216180316052 +modified: 20190704155016248 modifier: Mohammad tags: theme Links title: Mobile theme type: text/vnd.tiddlywiki url: http://tw5mobile.tiddlyspot.com/ -wiki-name: - +wiki-name: \ No newline at end of file diff --git a/tiddlers/Mohammad.tid b/tiddlers/Mohammad.tid index 0ae0eb3..c0bf811 100644 --- a/tiddlers/Mohammad.tid +++ b/tiddlers/Mohammad.tid @@ -1,6 +1,6 @@ created: 20180823200810883 creator: Mohammad -modified: 20190216180316036 +modified: 20190704155016242 modifier: Mohammad title: Mohammad type: text/vnd.tiddlywiki diff --git a/tiddlers/More on Conditional Output.json b/tiddlers/More on Conditional Output.json new file mode 100644 index 0000000..93e4852 --- /dev/null +++ b/tiddlers/More on Conditional Output.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190109081509307", + "title": "More on Conditional Output", + "text": "When `transclude` or `view` widgets are used for conditional output, an issue raised with empty `caption` field.\n\nConsider below solution [[Eric Shulman|Conditional Output]]\n\n```\n<$view field=\"caption\">\n <$view field=\"title\">\n\n```\n\nor this one by [[THomas Elmiger|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/b4vWK6yTEQAJ]]:\n\n```\n<$link tooltip={{!!title}}><$transclude field=\"caption\"><$view field=\"title\"/> \n```\n\n<<<[[S.S.|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/EwUqundEEQAJ]]\nThe problem with the above code is that if there is a `caption` field, but it is empty, nothing will show. I find that unacceptable. This was the exact issue I tried to have fixed (on github) but that hasn't been resolved because of possible performance issues in a large table of contents.\n<<<\n\nThe better solution proposed by [[S.S.|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/EwUqundEEQAJ]] as below\n\n<<< Best solution\n```\n<$list filter=\"[all[current]has[caption]]\"\n emptyMessage=\"\"\"<$view field=\"title\"/>\"\"\">\n <$transclude field=\"caption\"/>\n\n```\n<<< See also [[Jeremy note|https://github.com/Jermolene/TiddlyWiki5/issues/3624#issuecomment-445157136]] on GitHub\n\n!! Remarks\n[[TonyM|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/vPJjeTBFEQAJ]] proposed a solution if you want to make a link to a tiddler when there is a caption and it has higher priority\n\n```\n<$list filter=\"[all[current]has[caption]get[caption]] ~[{!!title}]\" variable=name>\n<$link to=<> tooltip=\"Custom tooltip\"><>\n\n```\n\nYou can also make a macro for this as below\n\n```\n\\define caption-title()\n<$list filter=\"[all[current]has[caption]get[caption]] ~[{!!title}]\" variable=name>\n<$link to=<> tooltip=\"Custom tooltip\"><>\n\n\\end\n\nand use <> no paramters to always show first the caption, then the titlewith an active link.\n```", + "creator": "Mohammad", + "modified": "20190704155016232", + "modifier": "Mohammad", + "tags": "conditional solution", + "type": "text/vnd.tiddlywiki", + "keywords": "conditional transclude view empty caption", + "responder": "S.S. ", + "url": "https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/EwUqundEEQAJ" + } +] \ No newline at end of file diff --git a/tiddlers/More on Conditional Output.tid b/tiddlers/More on Conditional Output.tid deleted file mode 100644 index f5e400e..0000000 --- a/tiddlers/More on Conditional Output.tid +++ /dev/null @@ -1,62 +0,0 @@ -created: 20190109081509307 -creator: Mohammad -keywords: conditional transclude view empty caption -modified: 20190216180316022 -modifier: Mohammad -responder: S.S. -tags: conditional solution -title: More on Conditional Output -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/EwUqundEEQAJ - -When `transclude` or `view` widgets are used for conditional output, an issue raised with empty `caption` field. - -Consider below solution [[Eric Shulman|Conditional Output]] - -``` -<$view field="caption"> - <$view field="title"> - -``` - -or this one by [[THomas Elmiger|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/b4vWK6yTEQAJ]]: - -``` -<$link tooltip={{!!title}}><$transclude field="caption"><$view field="title"/>  -``` - -<<<[[S.S.|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/EwUqundEEQAJ]] -The problem with the above code is that if there is a `caption` field, but it is empty, nothing will show. I find that unacceptable. This was the exact issue I tried to have fixed (on github) but that hasn't been resolved because of possible performance issues in a large table of contents. -<<< - -The better solution proposed by [[S.S.|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/EwUqundEEQAJ]] as below - -<<< Best solution -``` -<$list filter="[all[current]has[caption]]" - emptyMessage="""<$view field="title"/>"""> - <$transclude field="caption"/> - -``` -<<< See also [[Jeremy note|https://github.com/Jermolene/TiddlyWiki5/issues/3624#issuecomment-445157136]] on GitHub - -!! Remarks -[[TonyM|https://groups.google.com/d/msg/tiddlywiki/dzZWAa5Hmlo/vPJjeTBFEQAJ]] proposed a solution if you want to make a link to a tiddler when there is a caption and it has higher priority - -``` -<$list filter="[all[current]has[caption]get[caption]] ~[{!!title}]" variable=name> -<$link to=<> tooltip="Custom tooltip"><> - -``` - -You can also make a macro for this as below - -``` -\define caption-title() -<$list filter="[all[current]has[caption]get[caption]] ~[{!!title}]" variable=name> -<$link to=<> tooltip="Custom tooltip"><> - -\end - -and use <> no paramters to always show first the caption, then the titlewith an active link. -``` \ No newline at end of file diff --git a/tiddlers/Multi Column Tiddler.tid b/tiddlers/Multi Column Tiddler.tid index 17732a0..23330c3 100644 --- a/tiddlers/Multi Column Tiddler.tid +++ b/tiddlers/Multi Column Tiddler.tid @@ -1,5 +1,5 @@ created: 20180823204648758 -modified: 20190216180316007 +modified: 20190704155016226 tags: title: Multi Column Tiddler type: text/vnd.tiddlywiki diff --git a/tiddlers/Multiline paragraph in list.tid b/tiddlers/Multiline paragraph in list.tid deleted file mode 100644 index a70e02f..0000000 --- a/tiddlers/Multiline paragraph in list.tid +++ /dev/null @@ -1,83 +0,0 @@ -created: 20180502213625201 -creator: Mohammad -modified: 20190216180315976 -modifier: Mohammad -tags: tutorial -title: Multiline paragraph in list -type: text/vnd.tiddlywiki - -* ''Use three double qoutes'' -<<< -``` -# One -# """ Hi Mohammad -Are you Okay -""" -# Best -# Better -``` - -# One -# """ Hi Mohammad -Are you Okay -""" -# Best -# Better -<<< - -* ''Use div tag'' -<<< -Note that the double linebreak preceding this paragraph is significant. - -``` - -# One -#
    - -Hi Mohammad. Are you Okay? - -> This is a qoute -This is an image -[img width=96 [fortran_logo.png]] -
    -# Best -# Better - -``` - -# One -#
    - -Hi Mohammad. Are you Okay? - -> This is a qoute -This is an image -[img width=96 [fortran_logo.png]] -
    -# Best -# Better - -<<< - -!! Other example - -* To do today -*# Eat -* To get someone else to do -*# This -*# That -*## And the other -* Next level -*# One -*# Two - -!!! With CSS class -*.liBlue List One -*.liBrown List Two (use data Tiddler) -*.liGreen List Three - - \ No newline at end of file diff --git a/tiddlers/Multiple Sort Rules in TOC.json b/tiddlers/Multiple Sort Rules in TOC.json new file mode 100644 index 0000000..6263d9d --- /dev/null +++ b/tiddlers/Multiple Sort Rules in TOC.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190220142757982", + "title": "Multiple Sort Rules in TOC", + "text": ";How to create a table of contents and sort sub branches?\n\nIf you make a table of contents from all tiddlers tagged with `TableOfContents` then\n\n```\n<>\n```\n\nThe sorting is fine for most cases, but you would like all your items tagged `Journal` to be sorted by the created field. How can you apply a separate sort order to just those sub-items tagged Journal?\n\nThe trick is to add a field to the parent tagging tiddler (i.e. `Journal`) that points to a different sort criteria. Let's call the field `fuzzy`, and populate it with the value `created` (created is the name of the field that contains a tiddler's creation date).\n\nNow change your Table of Contents to look like this:\n\n```\n<>\n```\n\n!! Other readings\n* [[TOC in Sidebar|https://tiddlywiki.com/#Adding%20a%20table%20of%20contents%20to%20the%20sidebar]]\n* [[Sort order of sub branches|https://tiddlywiki.com/prerelease/#How%20to%20change%20the%20sort%20order%20of%20sub-branches%20in%20a%20TOC%20macro]]", + "creator": "Mohammad", + "modified": "20190704155016221", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "toc sort ", + "responder": "S.S. and Ikaro", + "url": "https://groups.google.com/d/msg/tiddlywiki/pAXFBDjxp64/sVX1A3aeAAAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Multiple Sort Rules in TOC.tid b/tiddlers/Multiple Sort Rules in TOC.tid deleted file mode 100644 index 4c13090..0000000 --- a/tiddlers/Multiple Sort Rules in TOC.tid +++ /dev/null @@ -1,32 +0,0 @@ -created: 20190220142757982 -creator: Mohammad -keywords: toc sort -modified: 20190224163833409 -modifier: Mohammad -responder: S.S. and Ikaro -tags: solution -title: Multiple Sort Rules in TOC -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/pAXFBDjxp64/sVX1A3aeAAAJ - -;How to create a table of contents and sort sub branches? - -If you make a table of contents from all tiddlers tagged with `TableOfContents` then - -``` -<> -``` - -The sorting is fine for most cases, but you would like all your items tagged `Journal` to be sorted by the created field. How can you apply a separate sort order to just those sub-items tagged Journal? - -The trick is to add a field to the parent tagging tiddler (i.e. `Journal`) that points to a different sort criteria. Let's call the field `fuzzy`, and populate it with the value `created` (created is the name of the field that contains a tiddler's creation date). - -Now change your Table of Contents to look like this: - -``` -<> -``` - -!! Other readings -* [[TOC in Sidebar|https://tiddlywiki.com/#Adding%20a%20table%20of%20contents%20to%20the%20sidebar]] -* [[Sort order of sub branches|https://tiddlywiki.com/prerelease/#How%20to%20change%20the%20sort%20order%20of%20sub-branches%20in%20a%20TOC%20macro]] \ No newline at end of file diff --git a/tiddlers/Multiple Wiki and Browser Tab Management.tid b/tiddlers/Multiple Wiki and Browser Tab Management.tid index 47c56e5..2c70dde 100644 --- a/tiddlers/Multiple Wiki and Browser Tab Management.tid +++ b/tiddlers/Multiple Wiki and Browser Tab Management.tid @@ -1,7 +1,7 @@ created: 20190111062405687 creator: Mohammad keywords: browser tab multiple link -modified: 20190216180315960 +modified: 20190704155016215 modifier: Mohammad responder: Anthony Muscio (TonyM) tags: solution diff --git a/tiddlers/My Site on TiddlySpot.tid b/tiddlers/My Site on TiddlySpot.tid index 10e9ba8..5b9ccf7 100644 --- a/tiddlers/My Site on TiddlySpot.tid +++ b/tiddlers/My Site on TiddlySpot.tid @@ -1,6 +1,6 @@ created: 20180429025433836 creator: Mohammad -modified: 20190216180315870 +modified: 20190704155016210 modifier: Mohammad tags: mywiki title: My Site on TiddlySpot diff --git a/tiddlers/MyNumberTiddler.tid b/tiddlers/MyNumberTiddler.tid index 4444b84..9cf1280 100644 --- a/tiddlers/MyNumberTiddler.tid +++ b/tiddlers/MyNumberTiddler.tid @@ -1,7 +1,7 @@ created: 20180628031229157 creator: Mohammad list: 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 -modified: 20190316114917536 +modified: 20190704155016204 modifier: Mohammad tags: 100.50 title: MyNumberTiddler diff --git a/tiddlers/NEED disucssion.tid b/tiddlers/NEED disucssion.tid index ffb8229..91ac005 100644 --- a/tiddlers/NEED disucssion.tid +++ b/tiddlers/NEED disucssion.tid @@ -1,7 +1,7 @@ created: 20190326113843736 creator: Mohammad keywords: -modified: 20190406122518558 +modified: 20190704155016429 modifier: Mohammad responder: tags: solution diff --git a/tiddlers/Naming Rules for Coding.tid b/tiddlers/Naming Rules for Coding.tid index 24f0133..a7f37ae 100644 --- a/tiddlers/Naming Rules for Coding.tid +++ b/tiddlers/Naming Rules for Coding.tid @@ -1,6 +1,6 @@ created: 20181024043250197 creator: Mohammad -modified: 20190216180315614 +modified: 20190704155016441 modifier: Mohammad tags: coding concept title: Naming Rules for Coding diff --git a/tiddlers/Navigate to a Tiddler with Space in Title.tid b/tiddlers/Navigate to a Tiddler with Space in Title.tid index ba98f31..ef0c08b 100644 --- a/tiddlers/Navigate to a Tiddler with Space in Title.tid +++ b/tiddlers/Navigate to a Tiddler with Space in Title.tid @@ -1,7 +1,7 @@ created: 20180729200523939 creator: Mohammad keywords: navigate space title -modified: 20190216180317370 +modified: 20190704155016435 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Nested Lists Tutorial.tid b/tiddlers/Nested Lists Tutorial.tid index f0b402a..69d1df2 100644 --- a/tiddlers/Nested Lists Tutorial.tid +++ b/tiddlers/Nested Lists Tutorial.tid @@ -1,6 +1,6 @@ created: 20180628133245319 creator: Mohammad -modified: 20190216180317365 +modified: 20190704155016423 modifier: Mohammad tags: tutorial learning title: Nested Lists Tutorial diff --git a/tiddlers/Nested Referencing Fields.tid b/tiddlers/Nested Referencing Fields.tid index cddc5f6..cb5d6f2 100644 --- a/tiddlers/Nested Referencing Fields.tid +++ b/tiddlers/Nested Referencing Fields.tid @@ -1,7 +1,7 @@ created: 20180709151148119 creator: Mohammad keywords: nested field -modified: 20190216180317360 +modified: 20190704155016418 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Nestetd Macro - Passing Variable.tid b/tiddlers/Nestetd Macro - Passing Variable.tid index e2c4bec..cb87a00 100644 --- a/tiddlers/Nestetd Macro - Passing Variable.tid +++ b/tiddlers/Nestetd Macro - Passing Variable.tid @@ -1,9 +1,3 @@ -created: 20180620024947885 -modified: 20190216180317354 -tags: macro -title: Nestetd Macro - Passing Variable -type: application/x-tiddler - \define firstlevel(param1:"the parameter") <> \end diff --git a/tiddlers/Nestetd Macro - Passing Variable.tid.meta b/tiddlers/Nestetd Macro - Passing Variable.tid.meta new file mode 100644 index 0000000..dc295c7 --- /dev/null +++ b/tiddlers/Nestetd Macro - Passing Variable.tid.meta @@ -0,0 +1,5 @@ +created: 20180620024947885 +modified: 20190704155016413 +tags: macro +title: Nestetd Macro - Passing Variable +type: application/x-tiddler \ No newline at end of file diff --git a/tiddlers/New Codes Standard Tiddlers.tid b/tiddlers/New Codes Standard Tiddlers.tid index e53a00b..9aed99f 100644 --- a/tiddlers/New Codes Standard Tiddlers.tid +++ b/tiddlers/New Codes Standard Tiddlers.tid @@ -1,6 +1,6 @@ created: 20181115033549515 creator: Mohammad -modified: 20190216180317349 +modified: 20190704155016402 modifier: Mohammad tags: coding title: New Codes Standard Tiddlers diff --git a/tiddlers/New Math Filter Operation.tid b/tiddlers/New Math Filter Operation.tid index 45e9ab9..33436ca 100644 --- a/tiddlers/New Math Filter Operation.tid +++ b/tiddlers/New Math Filter Operation.tid @@ -1,6 +1,6 @@ created: 20190208043914160 creator: Mohammad -modified: 20190216180317343 +modified: 20190704155016396 modifier: Mohammad tags: task title: New Math Filter Operation diff --git a/tiddlers/New Tiddler 1.tid b/tiddlers/New Tiddler 1.tid index e3ba0bf..eaa090e 100644 --- a/tiddlers/New Tiddler 1.tid +++ b/tiddlers/New Tiddler 1.tid @@ -1,7 +1,7 @@ created: 20190317091437454 creator: Mohammad keywords: -modified: 20190406122518491 +modified: 20190704155016374 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/New Tiddler 2.tid b/tiddlers/New Tiddler 2.tid index 7f70150..32b2024 100644 --- a/tiddlers/New Tiddler 2.tid +++ b/tiddlers/New Tiddler 2.tid @@ -1,7 +1,7 @@ created: 20190320154123513 creator: Mohammad keywords: -modified: 20190406122518484 +modified: 20190704155016366 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/New Tiddler 3.tid b/tiddlers/New Tiddler 3.tid index 345df2b..06897b5 100644 --- a/tiddlers/New Tiddler 3.tid +++ b/tiddlers/New Tiddler 3.tid @@ -1,7 +1,7 @@ created: 20190326052650652 creator: Mohammad keywords: -modified: 20190406122518477 +modified: 20190704155016359 modifier: Mohammad responder: tags: solution diff --git a/tiddlers/New Tiddler 4.tid b/tiddlers/New Tiddler 4.tid new file mode 100644 index 0000000..b5c8279 --- /dev/null +++ b/tiddlers/New Tiddler 4.tid @@ -0,0 +1,24 @@ +created: 20190406202428656 +creator: Mohammad +modified: 20190704155016349 +modifier: Mohammad +tags: +title: New Tiddler 4 +type: text/vnd.tiddlywiki + +\define append-text(tidTitle, text:"", btnLabel:"Append Text", sep:"
    ") +<$button> $btnLabel$ +<$list variable="newText" filter="[<__tidTitle__>get[text]addsuffix<__sep__>addsuffix<__text__>]" emptyMessage="""<$action-setfield $tiddler=<<__tidTitle__>> text=<<__text__>> />""" > +<$action-setfield $tiddler=<<__tidTitle__>> text=<> /> + + +\end + +Example 1: + +<> + + +Example 2: + +<$macrocall $name=append-text tidTitle="TidB" text={{TidA}} sep=" " /> \ No newline at end of file diff --git a/tiddlers/New Tiddler 5.tid b/tiddlers/New Tiddler 5.tid new file mode 100644 index 0000000..65e557b --- /dev/null +++ b/tiddlers/New Tiddler 5.tid @@ -0,0 +1,16 @@ +created: 20190407043615960 +creator: Mohammad +keywords: +modified: 20190704155016341 +modifier: Mohammad +responder: Jeremy +tags: solution +title: New Tiddler 5 +type: text/vnd.tiddlywiki +url: + +<> + +https://groups.google.com/d/msg/tiddlywiki/VvzQpl0Rytw/p0I8EbNUCQAJ + +Add all refs \ No newline at end of file diff --git a/tiddlers/New Tiddler.tid b/tiddlers/New Tiddler.tid index aa1d1a8..9ddfa7b 100644 --- a/tiddlers/New Tiddler.tid +++ b/tiddlers/New Tiddler.tid @@ -1,6 +1,6 @@ created: 20190123054555393 creator: Mohammad -modified: 20190216180317338 +modified: 20190704155016380 modifier: Mohammad tags: title: New Tiddler diff --git a/tiddlers/New slide....tid b/tiddlers/New slide....tid new file mode 100644 index 0000000..9c7142f --- /dev/null +++ b/tiddlers/New slide....tid @@ -0,0 +1,9 @@ +created: 20190629131534264 +creator: Mohammad +modified: 20190704155016388 +modifier: Mohammad +tags: svg-image +title: New slide... +type: text/vnd.tiddlywiki + +fill in the contents .... \ No newline at end of file diff --git a/tiddlers/Nightly Build.tid b/tiddlers/Nightly Build.tid index cb5c520..76ac4fa 100644 --- a/tiddlers/Nightly Build.tid +++ b/tiddlers/Nightly Build.tid @@ -1,7 +1,7 @@ created: 20190226102901635 creator: Mohammad keywords: build release -modified: 20190316114919167 +modified: 20190704155016331 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/No Learning Required.tid b/tiddlers/No Learning Required.tid index 5130020..6e9d1ba 100644 --- a/tiddlers/No Learning Required.tid +++ b/tiddlers/No Learning Required.tid @@ -2,11 +2,10 @@ created: 20190207151140539 creator: Mohammad description: This is a wiki of scripts and solution for no technical people. There is tools to accomplish individual tasks, such as a task list or contacts database developer: Jed Carty -modified: 20190216180317332 +modified: 20190704155016323 modifier: Mohammad tags: Links title: No Learning Required type: text/vnd.tiddlywiki url: http://nolearningrequired-full.tiddlyspot.com/ -wiki-name: No Learning Required - +wiki-name: No Learning Required \ No newline at end of file diff --git a/tiddlers/Node.js.tid b/tiddlers/Node.js.tid new file mode 100644 index 0000000..4ed88ba --- /dev/null +++ b/tiddlers/Node.js.tid @@ -0,0 +1,13 @@ +created: 20131129094739786 +modified: 20190704155016311 +tags: Definitions +title: Node.js +type: text/vnd.tiddlywiki + +''Node.js'' is a downloadable application for your PC, Mac or Linux computer that lets it run JavaScript applications. Unlike ~JavaScript applications running in a web browser, Node.js code has full access to the file system and other resources of the computer, enabling it to perform the roles that have traditionally been the preserve of languages like Java, PHP and Python. See http://nodejs.org for more details. + +For ~TiddlyWiki, Node.js means that we can have a single code base that can run in the browser or on the server, giving great flexibility in how it is used. + +For end users, Node.js is no more complicated to install than a web browser, but unlocks powerful capabilities such as the ability to run ~TiddlyWiki as a web server that you can connect to from other devices. + +See [[TiddlyWiki on Node.js]] for more details. diff --git a/tiddlers/Notebox.tid b/tiddlers/Notebox.tid index 0ba5c2a..c2a1c61 100644 --- a/tiddlers/Notebox.tid +++ b/tiddlers/Notebox.tid @@ -1,6 +1,6 @@ created: 20180905161739809 creator: Mohammad -modified: 20190216180317326 +modified: 20190704155016303 modifier: Mohammad tags: mywiki title: Notebox diff --git a/tiddlers/Notes on Macro.tid b/tiddlers/Notes on Macro.tid index 3d29e2a..7d47c80 100644 --- a/tiddlers/Notes on Macro.tid +++ b/tiddlers/Notes on Macro.tid @@ -1,7 +1,7 @@ created: 20190122093640227 creator: Mohammad keywords: macro -modified: 20190216180317320 +modified: 20190704155016565 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Notes on Using External Web Content v1.tid b/tiddlers/Notes on Using External Web Content v1.tid index 4f30c9c..8ffea20 100644 --- a/tiddlers/Notes on Using External Web Content v1.tid +++ b/tiddlers/Notes on Using External Web Content v1.tid @@ -1,14 +1,3 @@ -created: 20190119114344746 -creator: Gloom -keywords: external web content -modified: 20190216180317314 -modifier: Mohammad -responder: barro -tags: solution -title: Notes on Using External Web Content v1 -type: application/x-tiddler -url: https://groups.google.com/d/msg/tiddlywiki/A7QDK1yIms4/aEcWOhMCGwAJ - Displaying external Web based content: (testing in progress, using Firefox 64) diff --git a/tiddlers/Notes on Using External Web Content v1.tid.meta b/tiddlers/Notes on Using External Web Content v1.tid.meta new file mode 100644 index 0000000..95c36e0 --- /dev/null +++ b/tiddlers/Notes on Using External Web Content v1.tid.meta @@ -0,0 +1,10 @@ +created: 20190119114344746 +creator: Gloom +keywords: external web content +modified: 20190704155016560 +modifier: Mohammad +responder: barro +tags: solution +title: Notes on Using External Web Content v1 +type: application/x-tiddler +url: https://groups.google.com/d/msg/tiddlywiki/A7QDK1yIms4/aEcWOhMCGwAJ \ No newline at end of file diff --git a/tiddlers/Noteself forum.tid b/tiddlers/Noteself forum.tid index 9dbbb03..700023a 100644 --- a/tiddlers/Noteself forum.tid +++ b/tiddlers/Noteself forum.tid @@ -1,6 +1,6 @@ created: 20180618162248155 creator: Mohammad -modified: 20190216180317307 +modified: 20190704155016554 modifier: Mohammad tags: Links title: Noteself forum diff --git a/tiddlers/Notification Duration.tid b/tiddlers/Notification Duration.tid index eecc2fc..233e9c9 100644 --- a/tiddlers/Notification Duration.tid +++ b/tiddlers/Notification Duration.tid @@ -1,7 +1,7 @@ created: 20181115151628355 creator: Mohammad keywords: notification duration time -modified: 20190216180317301 +modified: 20190704155016548 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Octicons.json b/tiddlers/Octicons.json new file mode 100644 index 0000000..62641fe --- /dev/null +++ b/tiddlers/Octicons.json @@ -0,0 +1,16 @@ +[ + { + "created": "20190121171410846", + "title": "Octicons", + "text": "See also:\n\n * [[Font Awesome]]\n * [[Material Icons]]", + "creator": "Mohammad", + "modified": "20190704155016542", + "modifier": "Mohammad", + "tags": "Links", + "type": "text/vnd.tiddlywiki", + "description": "Octicons are a set of SVG icons built by GitHub for GitHub. ", + "developer": "Unknown", + "url": "https://octicons.github.com", + "wiki-name": "Octicons" + } +] \ No newline at end of file diff --git a/tiddlers/Octicons.tid b/tiddlers/Octicons.tid deleted file mode 100644 index 614ef5b..0000000 --- a/tiddlers/Octicons.tid +++ /dev/null @@ -1,16 +0,0 @@ -created: 20190121171410846 -creator: Mohammad -description: Octicons are a set of SVG icons built by GitHub for GitHub. -developer: Unknown -modified: 20190216180317295 -modifier: Mohammad -tags: Links -title: Octicons -type: text/vnd.tiddlywiki -url: https://octicons.github.com -wiki-name: Octicons - -See also: - - * [[Font Awesome]] - * [[Material Icons]] \ No newline at end of file diff --git a/tiddlers/Online Dictionary Lookup.tid b/tiddlers/Online Dictionary Lookup.tid index 7430822..c66276a 100644 --- a/tiddlers/Online Dictionary Lookup.tid +++ b/tiddlers/Online Dictionary Lookup.tid @@ -1,7 +1,7 @@ created: 20190119045518541 creator: Mohammad keywords: search query lookup online dictionary -modified: 20190216180317290 +modified: 20190704155016535 modifier: Mohammad responder: S.S. tags: exmp28 solution diff --git a/tiddlers/Online Store.tid b/tiddlers/Online Store.tid index e234721..59715a4 100644 --- a/tiddlers/Online Store.tid +++ b/tiddlers/Online Store.tid @@ -2,11 +2,10 @@ created: 20190121171034401 creator: Mohammad description: This is a great website uses google drive and TW to create an online store. developer: Siniy Kit -modified: 20190216180317284 +modified: 20190704155016526 modifier: Mohammad tags: Links title: Online Store type: text/vnd.tiddlywiki url: https://groups.google.com/d/msg/tiddlywiki/IGDe8tjtA5U/wyWTHwymCgAJ -wiki-name: Online store with TW - +wiki-name: Online store with TW \ No newline at end of file diff --git a/tiddlers/Open All Tiddlers Meet Some Criteria.tid b/tiddlers/Open All Tiddlers Meet Some Criteria.tid index 2bc924b..a5a8eef 100644 --- a/tiddlers/Open All Tiddlers Meet Some Criteria.tid +++ b/tiddlers/Open All Tiddlers Meet Some Criteria.tid @@ -1,7 +1,7 @@ created: 20190209202932422 creator: Mohammad keywords: open-all macro close-all filter -modified: 20190216180317278 +modified: 20190704155016518 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/tags/Open all Tiddlers with Tag-X.tid b/tiddlers/Open all Tiddlers with Tag-X.tid similarity index 96% rename from tiddlers/tags/Open all Tiddlers with Tag-X.tid rename to tiddlers/Open all Tiddlers with Tag-X.tid index 5d37294..71436dc 100644 --- a/tiddlers/tags/Open all Tiddlers with Tag-X.tid +++ b/tiddlers/Open all Tiddlers with Tag-X.tid @@ -1,7 +1,7 @@ created: 20190131172724975 creator: Mohammad keywords: open navigate -modified: 20190216180317272 +modified: 20190704155016514 modifier: Mohammad responder: Mohammad tags: exmp33 solution diff --git a/tiddlers/OpenAll Button Plugin.tid b/tiddlers/OpenAll Button Plugin.tid index d0ea9d5..675b12c 100644 --- a/tiddlers/OpenAll Button Plugin.tid +++ b/tiddlers/OpenAll Button Plugin.tid @@ -2,11 +2,10 @@ created: 20190211062107103 creator: Mohammad description: This plugin adds the button to the tag manager drop down menu using the system tag. The open all button opens all non system tiddlers tagged with that drop down tag. developer: Andrew Harrison -modified: 20190216180317267 +modified: 20190704155016509 modifier: Mohammad tags: Links title: OpenAll Button Plugin type: text/vnd.tiddlywiki url: http://openall.tiddlyspot.com/ -wiki-name: OpenAll plugin - +wiki-name: OpenAll plugin \ No newline at end of file diff --git a/tiddlers/OpenAll Tagged.json b/tiddlers/OpenAll Tagged.json new file mode 100644 index 0000000..4ab895a --- /dev/null +++ b/tiddlers/OpenAll Tagged.json @@ -0,0 +1,16 @@ +[ + { + "created": "20190211062621908", + "title": "OpenAll Tagged", + "text": "", + "creator": "Mohammad", + "modified": "20190704155016504", + "modifier": "Mohammad", + "tags": "Links", + "type": "text/vnd.tiddlywiki", + "description": "Open all tiddler tagged say with myTag. This is a simple macro opens all tiddlers tagged with sepecified one.", + "developer": "Mat TWaddle ", + "url": "http://openalltagged.tiddlyspot.com/#About", + "wiki-name": "openalltagged " + } +] \ No newline at end of file diff --git a/tiddlers/OpenAll Tagged.tid b/tiddlers/OpenAll Tagged.tid deleted file mode 100644 index fcaca21..0000000 --- a/tiddlers/OpenAll Tagged.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20190211062621908 -creator: Mohammad -description: Open all tiddler tagged say with myTag. This is a simple macro opens all tiddlers tagged with sepecified one. -developer: Mat TWaddle -modified: 20190216180317261 -modifier: Mohammad -tags: Links -title: OpenAll Tagged -type: text/vnd.tiddlywiki -url: http://openalltagged.tiddlyspot.com/#About -wiki-name: openalltagged - diff --git a/tiddlers/Optimize Svg Image.tid b/tiddlers/Optimize Svg Image.tid new file mode 100644 index 0000000..28b54f3 --- /dev/null +++ b/tiddlers/Optimize Svg Image.tid @@ -0,0 +1,11 @@ +created: 20190629075202787 +creator: Mohammad +description: SvgOmg optimize the svg images and remove the extra settings and vendor data from svg file. It also remove extra white space and optimize for size. +developer: Jake Archibald +modified: 20190704155016499 +modifier: Mohammad +tags: Links +title: Optimize Svg Image +type: text/vnd.tiddlywiki +url: https://jakearchibald.github.io/svgomg/ +wiki-name: svgomg \ No newline at end of file diff --git a/tiddlers/Optimize Svg Images.tid b/tiddlers/Optimize Svg Images.tid new file mode 100644 index 0000000..6a766fd --- /dev/null +++ b/tiddlers/Optimize Svg Images.tid @@ -0,0 +1,10 @@ +class: Beige +created: 20190629091740046 +creator: Mohammad +modified: 20190704155016493 +modifier: Mohammad +tags: svg-image +title: Optimize Svg Images +type: text/vnd.tiddlywiki + +fill in the contents .... \ No newline at end of file diff --git a/tiddlers/Order of Stylesheets in Tiddlywiki.tid b/tiddlers/Order of Stylesheets in Tiddlywiki.tid index 3d1be52..4fa25cf 100644 --- a/tiddlers/Order of Stylesheets in Tiddlywiki.tid +++ b/tiddlers/Order of Stylesheets in Tiddlywiki.tid @@ -1,7 +1,7 @@ created: 20190125045017991 creator: Mohammad keywords: stylesheet css order -modified: 20190216180317255 +modified: 20190704155016482 modifier: Mohammad responder: Anthony Muscio tags: solution diff --git a/tiddlers/Other Matching Types.tid b/tiddlers/Other Matching Types.tid index a5c9b98..a296bd5 100644 --- a/tiddlers/Other Matching Types.tid +++ b/tiddlers/Other Matching Types.tid @@ -1,6 +1,6 @@ created: 20181007161551032 creator: Mohammad -modified: 20190216180317111 +modified: 20190704155016471 modifier: Mohammad tags: reveal title: Other Matching Types diff --git a/tiddlers/PDF Document Link.tid b/tiddlers/PDF Document Link.tid index ec10813..7957b5b 100644 --- a/tiddlers/PDF Document Link.tid +++ b/tiddlers/PDF Document Link.tid @@ -1,7 +1,7 @@ created: 20190113163412387 creator: Mohammad keywords: link pdf page -modified: 20190216180317079 +modified: 20190704155016705 modifier: Mohammad responder: Anthony Musico (TonyM) tags: solution diff --git a/tiddlers/PSaT Wiki.tid b/tiddlers/PSaT Wiki.tid index e2130bd..f818894 100644 --- a/tiddlers/PSaT Wiki.tid +++ b/tiddlers/PSaT Wiki.tid @@ -2,11 +2,10 @@ created: 20190123044255914 creator: Mohammad description: This is a collection of notes, scripts, documentation on using Tiddlywiki. developer: Anthony Muscio (TonyM) -modified: 20190216180316821 +modified: 20190704155016656 modifier: Mohammad tags: Links title: PSaT Wiki type: text/vnd.tiddlywiki url: http://tiddlywiki.psat.com.au -wiki-name: TiddlyWiki at PSaT - +wiki-name: TiddlyWiki at PSaT \ No newline at end of file diff --git a/tiddlers/tinka/Packaging with Tinka.tid b/tiddlers/Packaging with Tinka.tid similarity index 84% rename from tiddlers/tinka/Packaging with Tinka.tid rename to tiddlers/Packaging with Tinka.tid index fa54164..51860db 100644 --- a/tiddlers/tinka/Packaging with Tinka.tid +++ b/tiddlers/Packaging with Tinka.tid @@ -1,6 +1,6 @@ created: 20181006040607995 creator: Mohammad -modified: 20190216180317103 +modified: 20190704155016465 modifier: Mohammad tags: tools title: Packaging with Tinka diff --git a/tiddlers/Paragraphs in Numbered Lists.tid b/tiddlers/Paragraphs in Numbered Lists.tid index c514e8d..a59c7e8 100644 --- a/tiddlers/Paragraphs in Numbered Lists.tid +++ b/tiddlers/Paragraphs in Numbered Lists.tid @@ -1,7 +1,7 @@ created: 20180502213625201 creator: Mohammad keywords: typed-list ordered -modified: 20190406122519289 +modified: 20190704155016452 modifier: Mohammad tags: tutorial title: Paragraphs in Numbered Lists diff --git a/tiddlers/Pass a Macro Result into Variable.tid b/tiddlers/Pass a Macro Result into Variable.tid index ae5f944..1cf20fc 100644 --- a/tiddlers/Pass a Macro Result into Variable.tid +++ b/tiddlers/Pass a Macro Result into Variable.tid @@ -1,5 +1,5 @@ created: 20180812183429564 -modified: 20190216180317087 +modified: 20190704155016447 note100: tags: variable title: Pass a Macro Result into Variable diff --git a/tiddlers/Performance Instrumentation.tid b/tiddlers/Performance Instrumentation.tid index bc904e5..8ffda17 100644 --- a/tiddlers/Performance Instrumentation.tid +++ b/tiddlers/Performance Instrumentation.tid @@ -1,7 +1,7 @@ created: 20190317061701212 creator: Mohammad keywords: performance time -modified: 20190406122519261 +modified: 20190704155016699 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Playgroung by Magnus.tid b/tiddlers/Playgroung by Magnus.tid index 049ca9e..5fcf878 100644 --- a/tiddlers/Playgroung by Magnus.tid +++ b/tiddlers/Playgroung by Magnus.tid @@ -2,11 +2,10 @@ created: 20190208052918308 creator: Mohammad description: A great application of TW. Image lightbox, dictionaries and tables are customized and can be used for learning and practice purpose. developer: Magnus Evald -modified: 20190216180316863 +modified: 20190704155016682 modifier: Mohammad tags: Links title: Playgroung by Magnus type: text/vnd.tiddlywiki url: http://magnus.playground.tiddlyspot.com/# -wiki-name: Playground - +wiki-name: Playground \ No newline at end of file diff --git a/tiddlers/Playing with flex box.tid b/tiddlers/Playing with flex box.tid index 3299233..5e59982 100644 --- a/tiddlers/Playing with flex box.tid +++ b/tiddlers/Playing with flex box.tid @@ -1,6 +1,6 @@ created: 20180503091309284 creator: Mohammad -modified: 20190216180316856 +modified: 20190704155016677 modifier: Mohammad tags: beta title: Playing with flex box diff --git a/tiddlers/Plugin Setting Panel.tid b/tiddlers/Plugin Setting Panel.tid index 841d069..a9c31d9 100644 --- a/tiddlers/Plugin Setting Panel.tid +++ b/tiddlers/Plugin Setting Panel.tid @@ -1,6 +1,6 @@ created: 20190214072235553 creator: Mohammad -modified: 20190224163833900 +modified: 20190704155016671 modifier: Mohammad tags: task title: Plugin Setting Panel diff --git a/tiddlers/Preferences.tid b/tiddlers/Preferences.tid index 899b769..c0b9157 100644 --- a/tiddlers/Preferences.tid +++ b/tiddlers/Preferences.tid @@ -1,6 +1,6 @@ created: 20180603030505239 creator: Mohammad -modified: 20190216180316845 +modified: 20190704155016667 modifier: Mohammad note: This tiddler is used for demonstration of filter usage tags: diff --git a/tiddlers/Private Macro_ A Case Study.tid b/tiddlers/Private Macro_ A Case Study.tid index ab90ee6..59313e6 100644 --- a/tiddlers/Private Macro_ A Case Study.tid +++ b/tiddlers/Private Macro_ A Case Study.tid @@ -1,6 +1,6 @@ created: 20190201120700539 creator: Mohammad -modified: 20190216180316829 +modified: 20190704155016661 modifier: Mohammad tags: exmp36 title: Private Macro: A Case Study diff --git a/tiddlers/Public Sidebar.tid b/tiddlers/Public Sidebar.tid index 8e4b29d..a4590e1 100644 --- a/tiddlers/Public Sidebar.tid +++ b/tiddlers/Public Sidebar.tid @@ -2,7 +2,7 @@ created: 20190121050014544 creator: Mohammad description: The PublicSidebar lets you display different sidebars depending on domain (url). developer: Mat von TWaddle -modified: 20190216180316810 +modified: 20190704155016649 modifier: Mohammad tags: Links title: Public Sidebar diff --git a/tiddlers/Read from CSV File.tid b/tiddlers/Read from CSV File.tid new file mode 100644 index 0000000..defd8bd --- /dev/null +++ b/tiddlers/Read from CSV File.tid @@ -0,0 +1,12 @@ +created: 20190629044115863 +creator: Mohammad +keywords: csv parse +modified: 20190704155016637 +modifier: Mohammad +responder: TonyM +tags: solution +title: Read from CSV File +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/DPqqF_tgLeE/LjbeP-UFCwAJ + +<> \ No newline at end of file diff --git a/tiddlers/Recent Tab and Bold Timeline.tid b/tiddlers/Recent Tab and Bold Timeline.tid index 3b2b7e0..a9113cb 100644 --- a/tiddlers/Recent Tab and Bold Timeline.tid +++ b/tiddlers/Recent Tab and Bold Timeline.tid @@ -1,7 +1,7 @@ created: 20190122143056237 creator: Mohammad keywords: recent tab format date timeline -modified: 20190216180316792 +modified: 20190704155016623 modifier: Mohammad responder: Thomas Telmiger tags: exmp30 solution diff --git a/tiddlers/RegExp Tester Page.tid b/tiddlers/RegExp Tester Page.tid index 5cb0726..984e42a 100644 --- a/tiddlers/RegExp Tester Page.tid +++ b/tiddlers/RegExp Tester Page.tid @@ -1,6 +1,6 @@ created: 20190227185924990 creator: Mohammad -modified: 20190316114918263 +modified: 20190704155016615 modifier: Mohammad title: RegExp Tester Page type: text/vnd.tiddlywiki diff --git a/tiddlers/Regexp to Find all Tiddlers with .ext in Their Name.tid b/tiddlers/Regexp to Find all Tiddlers with .ext in Their Name.tid index 80809f1..96f3dfc 100644 --- a/tiddlers/Regexp to Find all Tiddlers with .ext in Their Name.tid +++ b/tiddlers/Regexp to Find all Tiddlers with .ext in Their Name.tid @@ -1,7 +1,7 @@ created: 20180715031400001 creator: Mohammad keywords: rexexp search -modified: 20190216180316785 +modified: 20190704155016607 modifier: Mohammad responder: Mark S tags: regexp exmp06 solution diff --git a/tiddlers/Remove Blue Border from Button.tid b/tiddlers/Remove Blue Border from Button.tid index 7f2936e..d3162c7 100644 --- a/tiddlers/Remove Blue Border from Button.tid +++ b/tiddlers/Remove Blue Border from Button.tid @@ -1,7 +1,7 @@ created: 20190123185617789 creator: Mohammad keywords: button border -modified: 20190216180316778 +modified: 20190704155016598 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Remove Index_Value Using Form.tid b/tiddlers/Remove Index_Value Using Form.tid index a7e73a4..3c73294 100644 --- a/tiddlers/Remove Index_Value Using Form.tid +++ b/tiddlers/Remove Index_Value Using Form.tid @@ -1,6 +1,6 @@ created: 20190207111737747 creator: Mohammad -modified: 20190216180316771 +modified: 20190704155016591 modifier: Mohammad tags: datatiddler exmp42 title: Remove Index/Value Using Form diff --git a/tiddlers/Remove Surrounding Quotes.tid b/tiddlers/Remove Surrounding Quotes.tid index b8add4e..727853d 100644 --- a/tiddlers/Remove Surrounding Quotes.tid +++ b/tiddlers/Remove Surrounding Quotes.tid @@ -1,7 +1,7 @@ created: 20181220063559583 creator: Mohammad keywords: else filter quote remove -modified: 20190216180316764 +modified: 20190704155016584 modifier: Mohammad responder: Mohammad tags: else solution diff --git a/tiddlers/tags/Replace-tag.tid b/tiddlers/Replace-tag.tid similarity index 97% rename from tiddlers/tags/Replace-tag.tid rename to tiddlers/Replace-tag.tid index 7e77564..c65bcb9 100644 --- a/tiddlers/tags/Replace-tag.tid +++ b/tiddlers/Replace-tag.tid @@ -1,6 +1,6 @@ created: 20150213200150156 creator: Tobias Beer -modified: 20190216180316757 +modified: 20190704155016575 modifier: Mohammad summary: a wizard to search and replace an old tag name with a new one tags: tools diff --git a/tiddlers/Reveal Gradually.tid b/tiddlers/Reveal Gradually.tid index abecc98..9ef145b 100644 --- a/tiddlers/Reveal Gradually.tid +++ b/tiddlers/Reveal Gradually.tid @@ -1,6 +1,6 @@ created: 20180905161646064 creator: Mohammad -modified: 20190216180316747 +modified: 20190704155016825 modifier: Mohammad tags: mywiki title: Reveal Gradually diff --git a/tiddlers/Reveal Helper Tiddler.tid b/tiddlers/Reveal Helper Tiddler.tid index 0d5d05c..a16ea09 100644 --- a/tiddlers/Reveal Helper Tiddler.tid +++ b/tiddlers/Reveal Helper Tiddler.tid @@ -1,6 +1,6 @@ created: 20181007162109777 creator: Mohammad -modified: 20190216180316739 +modified: 20190704155016815 modifier: Mohammad tags: reveal title: Reveal Helper Tiddler diff --git a/tiddlers/Reveal Widget Example I.tid b/tiddlers/Reveal Widget Example I.tid index d8bc2bb..7f49fd3 100644 --- a/tiddlers/Reveal Widget Example I.tid +++ b/tiddlers/Reveal Widget Example I.tid @@ -1,11 +1,3 @@ -created: 20180510144923879 -creator: Mohammad -modified: 20190216180316724 -modifier: Mohammad -tags: reveal -title: Reveal Widget Example I -type: application/x-tiddler - Use two buttons to show/hide contents using the reveal widget <Show me diff --git a/tiddlers/Reveal Widget Example I.tid.meta b/tiddlers/Reveal Widget Example I.tid.meta new file mode 100644 index 0000000..eb2495f --- /dev/null +++ b/tiddlers/Reveal Widget Example I.tid.meta @@ -0,0 +1,7 @@ +created: 20180510144923879 +creator: Mohammad +modified: 20190704155016801 +modifier: Mohammad +tags: reveal +title: Reveal Widget Example I +type: application/x-tiddler \ No newline at end of file diff --git a/tiddlers/Reveal Widget Example II.tid b/tiddlers/Reveal Widget Example II.tid index 16e1824..fe1d630 100644 --- a/tiddlers/Reveal Widget Example II.tid +++ b/tiddlers/Reveal Widget Example II.tid @@ -1,6 +1,6 @@ created: 20181002110923068 creator: Mohammad -modified: 20190216180316715 +modified: 20190704155016795 modifier: Mohammad show_image: hide tags: reveal diff --git a/tiddlers/Reveal Widget and Fileds.tid b/tiddlers/Reveal Widget and Fileds.tid index e695a1c..c47a0d0 100644 --- a/tiddlers/Reveal Widget and Fileds.tid +++ b/tiddlers/Reveal Widget and Fileds.tid @@ -1,6 +1,6 @@ created: 20181008035243424 creator: Mohammad -modified: 20190216180316731 +modified: 20190704155016809 modifier: Mohammad tags: reveal title: Reveal Widget and Fileds diff --git a/tiddlers/Reveal Windget and Transclusion.tid b/tiddlers/Reveal Windget and Transclusion.tid index 07c5311..53288e5 100644 --- a/tiddlers/Reveal Windget and Transclusion.tid +++ b/tiddlers/Reveal Windget and Transclusion.tid @@ -1,6 +1,6 @@ created: 20181008054408759 creator: Mohammad -modified: 20190216180316705 +modified: 20190704155016789 modifier: Mohammad tags: reveal title: Reveal Windget and Transclusion diff --git a/tiddlers/Revision History.tid b/tiddlers/Revision History.tid index 77670be..b8fb8c7 100644 --- a/tiddlers/Revision History.tid +++ b/tiddlers/Revision History.tid @@ -1,6 +1,6 @@ created: 20180905085705897 creator: Mohammad -modified: 20190216180316695 +modified: 20190704155016781 modifier: Mohammad title: Revision History type: text/vnd.tiddlywiki diff --git a/tiddlers/Rewrite of TOC Macro.tid b/tiddlers/Rewrite of TOC Macro.tid index 1f6aecc..8bbd2a7 100644 --- a/tiddlers/Rewrite of TOC Macro.tid +++ b/tiddlers/Rewrite of TOC Macro.tid @@ -1,7 +1,7 @@ created: 20181005144715707 creator: Mohammad keywords: toc hide level macro -modified: 20190216180316689 +modified: 20190704155016773 modifier: Mohammad responder: Mark S tags: toc solution diff --git a/tiddlers/Richlinks.tid b/tiddlers/Richlinks.tid index e51303a..e56c0cd 100644 --- a/tiddlers/Richlinks.tid +++ b/tiddlers/Richlinks.tid @@ -2,11 +2,10 @@ created: 20190319171257843 creator: Mohammad description: RichLinks lets you display external links as "objects". developer: Mat von Twaddle -modified: 20190406122519816 +modified: 20190704155016765 modifier: Mohammad tags: starIt Links title: Richlinks type: text/vnd.tiddlywiki url: http://richlinks.tiddlyspot.com/ -wiki-name: Richlinks - +wiki-name: Richlinks \ No newline at end of file diff --git a/tiddlers/Rouin.tid b/tiddlers/Rouin.tid index 592e46c..deeda52 100644 --- a/tiddlers/Rouin.tid +++ b/tiddlers/Rouin.tid @@ -1,5 +1,5 @@ created: 20180620193620769 -modified: 20190216180316681 +modified: 20190704155016760 modifier: Mohammad tags: exmp01 contact colleague title: Rouin diff --git a/tiddlers/S.S._data_dictionaryLinks.tid b/tiddlers/S.S._data_dictionaryLinks similarity index 77% rename from tiddlers/S.S._data_dictionaryLinks.tid rename to tiddlers/S.S._data_dictionaryLinks index a0515fa..1657ea9 100644 --- a/tiddlers/S.S._data_dictionaryLinks.tid +++ b/tiddlers/S.S._data_dictionaryLinks @@ -1,11 +1,3 @@ -created: 20190119042401815 -creator: Mohammad -modified: 20190216180316676 -modifier: Mohammad -tags: exmp28 -title: S.S./data/dictionaryLinks -type: application/x-tiddler-dictionary - Dictionary.com: https://www.dictionary.com/browse/ The Free Dict.: http://www.thefreedictionary.com/ Merrium-Webster: https://www.merriam-webster.com/dictionary/ diff --git a/tiddlers/S.S._data_dictionaryLinks.meta b/tiddlers/S.S._data_dictionaryLinks.meta new file mode 100644 index 0000000..81d509d --- /dev/null +++ b/tiddlers/S.S._data_dictionaryLinks.meta @@ -0,0 +1,7 @@ +created: 20190119042401815 +creator: Mohammad +modified: 20190704155016755 +modifier: Mohammad +tags: exmp28 +title: S.S./data/dictionaryLinks +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/S.S._maro_dictionary.tid b/tiddlers/S.S._maro_dictionary.tid index 4b3312e..6198e5d 100644 --- a/tiddlers/S.S._maro_dictionary.tid +++ b/tiddlers/S.S._maro_dictionary.tid @@ -1,6 +1,6 @@ created: 20190119042329206 creator: Mohammad -modified: 20190216180316670 +modified: 20190704155016750 modifier: Mohammad tags: exmp28 $:/tags/Macro title: S.S./maro/dictionary diff --git a/tiddlers/S.S._viewtemplate_lookup.tid b/tiddlers/S.S._viewtemplate_lookup.tid index e8ccc05..01c514f 100644 --- a/tiddlers/S.S._viewtemplate_lookup.tid +++ b/tiddlers/S.S._viewtemplate_lookup.tid @@ -1,6 +1,6 @@ created: 20190119052112576 creator: Mohammad -modified: 20190216180316664 +modified: 20190704155016743 modifier: Mohammad tags: exmp28 $:/tags/ViewTemplate title: S.S./viewtemplate/lookup diff --git a/tiddlers/SVG Backgrounds.tid b/tiddlers/SVG Backgrounds.tid new file mode 100644 index 0000000..3a2d07c --- /dev/null +++ b/tiddlers/SVG Backgrounds.tid @@ -0,0 +1,11 @@ +created: 20190620072840593 +creator: Mohammad +description: Customize and apply backgrounds fast SVGs enable full-screen hi-res visuals with a file-size near 5KB and are well-supported by all modern browsers. What's not to love? +developer: Matt +modified: 20190704155017428 +modifier: Mohammad +tags: Links +title: SVG Backgrounds +type: text/vnd.tiddlywiki +url: https://www.svgbackgrounds.com/ +wiki-name: SVG Backgrounds \ No newline at end of file diff --git a/tiddlers/SVG Example 1.tid b/tiddlers/SVG Example 1.tid new file mode 100644 index 0000000..fee2dd7 --- /dev/null +++ b/tiddlers/SVG Example 1.tid @@ -0,0 +1,47 @@ +created: 20190608063022519 +creator: Mohammad +modified: 20190704155017422 +modifier: Mohammad +tags: exmp59 +title: SVG Example 1 +type: text/vnd.tiddlywiki + +!! A sample svg image +<<< +In the below example the two + +* [[$:/core/images/folder]] +* [[$:/core/images/copy-clipboard]] +svg files have been used +<<< + +!! Simple transclusion +<<< +To simply transclude the svg do as below + +<> +<<< + +!! Applyding css style +<<< +The below exmple shows how css class can be applied to a transcluded svg image. +< +.my-gallery svg { +width: 4em; +height: 4em; +margin: 0.1em; +fill:green; +} + + + +<$transclude tiddler="$:/core/images/folder"/> +<$transclude tiddler="$:/core/images/copy-clipboard"/> + +""">> +<<< + diff --git a/tiddlers/SVG Example 2.tid b/tiddlers/SVG Example 2.tid new file mode 100644 index 0000000..e45e410 --- /dev/null +++ b/tiddlers/SVG Example 2.tid @@ -0,0 +1,34 @@ +created: 20190608143636259 +creator: Mohammad +modified: 20190704155017415 +modifier: Mohammad +tags: exmp59 +title: SVG Example 2 +type: text/vnd.tiddlywiki + +Here a svg tiddlers are used for demonstration + +* The [[osa.svg]] with the content type has been set as (image/svg+xml) +* The [[python.svg]] with empty content type + +!! Include in wikitext as image +<<< +As the conent type is set to `image/svg+xml` it can be embeded as a self contained image using `img` syntax. + +<> + +<> + +!! Simple transclusion +Note that, the below code works as it transclude the [[python.svg]] + +<> + +<<< + +!! Remarks + * The tiddler with content type is not set to one of the image forms inclusing `image/svg+xml` cannot embed as self-contained `` element. \ No newline at end of file diff --git a/tiddlers/SVG Example 3.tid b/tiddlers/SVG Example 3.tid new file mode 100644 index 0000000..1641c87 --- /dev/null +++ b/tiddlers/SVG Example 3.tid @@ -0,0 +1,27 @@ +created: 20190608152308338 +creator: Mohammad +modified: 20190704155017409 +modifier: Mohammad +tags: exmp59 +title: SVG Example 3 +type: text/vnd.tiddlywiki + +This example shows how svg images in a tiddler with empty content type can be used for ''css'' styling + +<$macrocall $name="wikitext-example-without-html" +src=""" +
    +<$list filter="[all[tiddlers+shadows]tag[$:/tags/Image]last[10]] -[[$:/core/images/blank]]"> +>> +<$transclude/> + + +
    +"""/> \ No newline at end of file diff --git a/tiddlers/SVG ICONS as BUTTONS.tid b/tiddlers/SVG ICONS as BUTTONS.tid new file mode 100644 index 0000000..bafb32d --- /dev/null +++ b/tiddlers/SVG ICONS as BUTTONS.tid @@ -0,0 +1,43 @@ +created: 20181112070818002 +creator: Mohammad +keywords: svg icon button page-controls +modified: 20190704155017626 +modifier: Mohammad +responder: Thomas Elmiger +tags: solution +title: SVG ICONS as BUTTONS +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/fxhVN0DCBDc/aTWACf_bAwAJ + +The below instruction shows how to use css effectively for styling embeded svg tiddlers as buttons. + +!! Change the fill color of svg buttons +; The image-buttons (svg) on the top right of TW5 have a hover effect, having your custom svg button how it is possible to have the same behavior? +: The CSS selectors that control these buttons look like this (with different colour definitions) +:
    +.tc-page-controls button.tc-selected svg {
    +   fill: rgb(99, 99, 99);
    +}
    +
    +.tc-page-controls svg {
    +   fill: rgb(150, 150, 150);
    +}
    +
    +.tc-page-controls button:hover svg,
    +.tc-page-controls a:hover svg {
    +   fill: rgb(99, 99, 99);
    +}
    +
    +So make sure you use svg images and that you can control their fill colour via CSS (no fill colors inside the graphics). +
    + +!! The content type of svg tiddlers +;Why the svg tiddlers having the content type (`image/svg+xml`) does not take affect from css selectors? +: The reason is explained in [[Tiddlywiki.com|https://tiddlywiki.com/#Using%20SVG]]. Tiddlers with the type `image/svg+xml` are interpreted as SVG images, and displayed and transcluded as self-contained `` elements with the SVG embedded as a data `URI` in the src attribute. + +!! Example +See [[SVG Example 2]] for further details. Also [[SVG Example 3]] for applying css classes to svg transcluded as inline image (button). + +!! References +# [[Using svg|https://tiddlywiki.com/#Using%20SVG]] explains what happens, if the content type of an svg tiddler is set. +# [[Vanilla theme|https://tiddlywiki.com/#%24%3A%2Fthemes%2Ftiddlywiki%2Fvanilla%2Fbase]] explains, the class `tc-image-button` to be used only for sizes, not for fill-definitions. diff --git a/tiddlers/SVG Images Transclusion.tid b/tiddlers/SVG Images Transclusion.tid index 787d38f..d3d52cd 100644 --- a/tiddlers/SVG Images Transclusion.tid +++ b/tiddlers/SVG Images Transclusion.tid @@ -1,7 +1,7 @@ created: 20190207035753048 creator: Mohammad keywords: svg image transclude -modified: 20190224163834539 +modified: 20190704155017610 modifier: Mohammad responder: Jeremy Rustopn tags: solution diff --git a/tiddlers/Sample Code in Exmp 12.txt.meta b/tiddlers/Sample Code in Exmp 12.txt.meta index bb98685..c3d6def 100644 --- a/tiddlers/Sample Code in Exmp 12.txt.meta +++ b/tiddlers/Sample Code in Exmp 12.txt.meta @@ -1,7 +1,7 @@ created: 20181028044358400 creator: Mohammad -modified: 20190216180316656 +modified: 20190704155016732 modifier: Mohammad tags: exmp12 $:/tags/highlight/fortran title: Sample Code in Exmp 12 -type: text/plain +type: text/plain \ No newline at end of file diff --git a/tiddlers/Sample-Exmp03.tid b/tiddlers/Sample-Exmp03.tid index 5986365..1dc2ef9 100644 --- a/tiddlers/Sample-Exmp03.tid +++ b/tiddlers/Sample-Exmp03.tid @@ -1,5 +1,5 @@ created: 20180701133923145 -modified: 20190216180316639 +modified: 20190704155016722 tags: exmp03 test-field: 9999 title: Sample-Exmp03 diff --git a/tiddlers/Sandbox.tid b/tiddlers/Sandbox.tid index d111612..81baca8 100644 --- a/tiddlers/Sandbox.tid +++ b/tiddlers/Sandbox.tid @@ -1,6 +1,6 @@ created: 20190123061702696 creator: Mohammad -modified: 20190216180316578 +modified: 20190704155016715 modifier: Mohammad tags: title: Sandbox diff --git a/tiddlers/Save Tiddlywiki.tid b/tiddlers/Save Tiddlywiki.tid new file mode 100644 index 0000000..e1be957 --- /dev/null +++ b/tiddlers/Save Tiddlywiki.tid @@ -0,0 +1,32 @@ +created: 20190616140822598 +creator: Mohammad +keywords: saving +modified: 20190704155016955 +modifier: Mohammad +responder: Eric Shulman +tags: solution +title: Save Tiddlywiki +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/ixTpZ1siFsY/B52keETHBgAJ + +For security reasons, modern web browsers do not let you ''directly'' write to the local filesystem. + +TiddlyWiki is built on top of browser tech. As such, it has the same restrictions on local filesystem access. + +Fortunately, nearly all web browsers DO have one reliable method of writing to the local filesystem: ''downloading a file''. + +Downloading offers some measure of implicit information privacy/security because it requires user-interaction (no silent saving of files), and uses system-level dialogs to access the filesystem (no direct program access to read your directory info). + +By default, when you try to save a locally-stored TiddlyWiki without any add-ons or helper apps, it triggers what appears to be a ''download'' activity, even though the file is clearly already on your own system. + +Many browsers automatically save downloaded files to a specific location (e.g., "/Downloads" or similar). + +Some browsers allow you to change this default location to a different directory and/or "ask for location" each time you download so you can specify the desired filename and directory. + +If you tell your browser to point to the directory in which your TiddlyWiki file is stored, then when you press "save", you get a system-level dialog that allows you to enter a new filename or select an existing file. + +Most systems will automatically suggest a filename by appending a number to the current filename, e.g., "index.html (1)". You can, of course, select the *existing* TiddlyWiki filename, e.g., index.html (without any "(n)" suffix), which should then prompt you for permission to overwrite the previously saved file. After saving, if you reload your TiddlyWiki file, it will contain your saved changes as you would expect. + +Although the "default download saver" ultimately ''does'' let you save changes locally, some people find the experience to be less-than-optimal. To address this, there are ''many different add-ons'' and system-specific helper apps that can potentially provide a smoother experience, depending upon your usage patterns and platform(s) of choice. + +https://tiddlywiki.com/#GettingStarted \ No newline at end of file diff --git a/tiddlers/Save the Filter Output.tid b/tiddlers/Save the Filter Output.tid index f40a369..f64c536 100644 --- a/tiddlers/Save the Filter Output.tid +++ b/tiddlers/Save the Filter Output.tid @@ -1,7 +1,7 @@ created: 20181214182400914 creator: Mohammad keywords: list output store variable save -modified: 20190216180316381 +modified: 20190704155016710 modifier: Mohammad responder: Bimlas tags: solution diff --git a/tiddlers/Scope of field.tid b/tiddlers/Scope of field.tid new file mode 100644 index 0000000..b3f9aea --- /dev/null +++ b/tiddlers/Scope of field.tid @@ -0,0 +1,9 @@ +created: 20190606203621102 +creator: Mohammad +modified: 20190704155016949 +modifier: Mohammad +tags: task +title: Scope of field +type: text/vnd.tiddlywiki + +https://groups.google.com/d/msg/tiddlywiki/Qi8aOL8jDBg/c9pEVgm7BAAJ \ No newline at end of file diff --git a/tiddlers/Scroll to top when click on a tiddler in storyriver.tid b/tiddlers/Scroll to top when click on a tiddler in storyriver.tid index df79b59..93fda75 100644 --- a/tiddlers/Scroll to top when click on a tiddler in storyriver.tid +++ b/tiddlers/Scroll to top when click on a tiddler in storyriver.tid @@ -1,7 +1,7 @@ created: 20190301131444966 creator: Mohammad keywords: -modified: 20190316114920114 +modified: 20190704155016943 modifier: Mohammad responder: Simon Huber (BTC) tags: solution diff --git a/tiddlers/search/Search Case Sensitive.tid b/tiddlers/Search Case Sensitive.tid similarity index 95% rename from tiddlers/search/Search Case Sensitive.tid rename to tiddlers/Search Case Sensitive.tid index daf4f51..5776fd6 100644 --- a/tiddlers/search/Search Case Sensitive.tid +++ b/tiddlers/Search Case Sensitive.tid @@ -1,6 +1,6 @@ created: 20190124153838923 creator: Mohammad -modified: 20190216180316284 +modified: 20190704155016925 modifier: Mohammad tags: search title: Search Case Sensitive diff --git a/tiddlers/search/Search DataTiddler Using regexp.tid b/tiddlers/Search DataTiddler Using regexp.tid similarity index 98% rename from tiddlers/search/Search DataTiddler Using regexp.tid rename to tiddlers/Search DataTiddler Using regexp.tid index 6109146..b883384 100644 --- a/tiddlers/search/Search DataTiddler Using regexp.tid +++ b/tiddlers/Search DataTiddler Using regexp.tid @@ -1,7 +1,7 @@ created: 20190207052514719 creator: Mohammad keywords: datatiddler search -modified: 20190216180316263 +modified: 20190704155016917 modifier: Mohammad responder: Stephan Heradek tags: datatiddler solution diff --git a/tiddlers/Search Local TWs.tid b/tiddlers/Search Local TWs.tid index 56db6e4..3dce3d1 100644 --- a/tiddlers/Search Local TWs.tid +++ b/tiddlers/Search Local TWs.tid @@ -1,6 +1,6 @@ created: 20190129081944200 creator: Mohammad -modified: 20190224163834241 +modified: 20190704155016858 modifier: Mohammad tags: tools title: Search Local TWs diff --git a/tiddlers/Search System or Non-System Tiddlers.tid b/tiddlers/Search System or Non-System Tiddlers.tid index 573dae9..dcbdee0 100644 --- a/tiddlers/Search System or Non-System Tiddlers.tid +++ b/tiddlers/Search System or Non-System Tiddlers.tid @@ -1,6 +1,6 @@ created: 20190124173410311 creator: Mohammad -modified: 20190224163834235 +modified: 20190704155016851 modifier: Mohammad tags: search title: Search System or Non-System Tiddlers diff --git a/tiddlers/Search TW-Scripts.tid b/tiddlers/Search TW-Scripts.tid index 84f5102..24448ab 100644 --- a/tiddlers/Search TW-Scripts.tid +++ b/tiddlers/Search TW-Scripts.tid @@ -1,6 +1,6 @@ created: 20190124130809032 creator: Mohammad -modified: 20190224163834211 +modified: 20190704155017090 modifier: Mohammad tags: tools title: Search TW-Scripts diff --git a/tiddlers/Search Tiddlywiki Toolmap.tid b/tiddlers/Search Tiddlywiki Toolmap.tid index c21ac1f..18720ef 100644 --- a/tiddlers/Search Tiddlywiki Toolmap.tid +++ b/tiddlers/Search Tiddlywiki Toolmap.tid @@ -1,6 +1,6 @@ created: 20190119043257485 creator: Mohammad -modified: 20190224163834230 +modified: 20190704155016845 modifier: Mohammad tags: tools title: Search Tiddlywiki Toolmap diff --git a/tiddlers/Search Tiddlywiki.com.tid b/tiddlers/Search Tiddlywiki.com.tid index 367c45d..a8a5ae4 100644 --- a/tiddlers/Search Tiddlywiki.com.tid +++ b/tiddlers/Search Tiddlywiki.com.tid @@ -1,6 +1,6 @@ created: 20190124111011095 creator: Mohammad -modified: 20190224163834224 +modified: 20190704155016838 modifier: Mohammad tags: tools title: Search Tiddlywiki.com diff --git a/tiddlers/Search Titles Followed by Text.json b/tiddlers/Search Titles Followed by Text.json new file mode 100644 index 0000000..1e2802c --- /dev/null +++ b/tiddlers/Search Titles Followed by Text.json @@ -0,0 +1,15 @@ +[ + { + "created": "20180901180711126", + "title": "Search Titles Followed by Text", + "text": ";Is there any way to refine a search in title followed by a search in text body of that tiddler?\nYes, the search operator can be refined by field name. So I assume that the most optimized filters for your queries would work like:\n\n```\n[search:title[foo]search:text[bar]]\n```\nIn the above snippet, all tiddlers have foo in their titles and bar in their text will be shown!\n\n\n!!! Example\n```\n{{{[search:title[kookma]search:text[rb]]}}}\n```\n\n{{{[search:title[kookma]search:text[rb]]}}}\n", + "creator": "Mohammad", + "modified": "20190704155016832", + "modifier": "Mohammad", + "tags": "search operator solution", + "type": "text/vnd.tiddlywiki", + "keywords": "search ", + "responder": "Mark S", + "url": "https://groups.google.com/d/msg/tiddlywiki/q_AStBDQCxI/Qpcc9YzsAgAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Search Titles Followed by Text.tid b/tiddlers/Search Titles Followed by Text.tid deleted file mode 100644 index 345610e..0000000 --- a/tiddlers/Search Titles Followed by Text.tid +++ /dev/null @@ -1,26 +0,0 @@ -created: 20180901180711126 -creator: Mohammad -keywords: search -modified: 20190224163834218 -modifier: Mohammad -responder: Mark S -tags: search operator solution -title: Search Titles Followed by Text -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/q_AStBDQCxI/Qpcc9YzsAgAJ - -;Is there any way to refine a search in title followed by a search in text body of that tiddler? -Yes, the search operator can be refined by field name. So I assume that the most optimized filters for your queries would work like: - -``` -[search:title[foo]search:text[bar]] -``` -In the above snippet, all tiddlers have foo in their titles and bar in their text will be shown! - - -!!! Example -``` -{{{[search:title[kookma]search:text[rb]]}}} -``` - -{{{[search:title[kookma]search:text[rb]]}}} diff --git a/tiddlers/Search Wiki.tid b/tiddlers/Search Wiki.tid index 1956bb2..e98c6e8 100644 --- a/tiddlers/Search Wiki.tid +++ b/tiddlers/Search Wiki.tid @@ -1,6 +1,6 @@ created: 20190117094436710 creator: Mohammad -modified: 20190224163834204 +modified: 20190704155017082 modifier: Mohammad tags: title: Search Wiki diff --git a/tiddlers/Search in Official Tiddlywiki Site.json b/tiddlers/Search in Official Tiddlywiki Site.json new file mode 100644 index 0000000..796045a --- /dev/null +++ b/tiddlers/Search in Official Tiddlywiki Site.json @@ -0,0 +1,13 @@ +[ + { + "created": "20190124111327541", + "title": "Search in Official Tiddlywiki Site", + "text": "Enter a keyword and click on the created link to search the Tiddlywiki toolmap.\n\n{{Search Tiddlywiki.com}}\n", + "creator": "Mohammad", + "modified": "20190704155016911", + "modifier": "Mohammad", + "tags": "", + "type": "text/vnd.tiddlywiki", + "class": " AliceBlue" + } +] \ No newline at end of file diff --git a/tiddlers/search/Search in All Fields.tid b/tiddlers/Search in All Fields.tid similarity index 95% rename from tiddlers/search/Search in All Fields.tid rename to tiddlers/Search in All Fields.tid index b8779f6..db76b8f 100644 --- a/tiddlers/search/Search in All Fields.tid +++ b/tiddlers/Search in All Fields.tid @@ -1,6 +1,6 @@ created: 20190124155034032 creator: Mohammad -modified: 20190216180316218 +modified: 20190704155016901 modifier: Mohammad tags: search title: Search in All Fields diff --git a/tiddlers/search/Search in Field.tid b/tiddlers/Search in Field.tid similarity index 95% rename from tiddlers/search/Search in Field.tid rename to tiddlers/Search in Field.tid index 2972e12..195c528 100644 --- a/tiddlers/search/Search in Field.tid +++ b/tiddlers/Search in Field.tid @@ -1,6 +1,6 @@ created: 20180614111149720 creator: Mohammad -modified: 20190216180316198 +modified: 20190704155016895 modifier: Mohammad tags: exmp35 search title: Search in Field diff --git a/tiddlers/search/Search in Fields.tid b/tiddlers/Search in Fields.tid similarity index 89% rename from tiddlers/search/Search in Fields.tid rename to tiddlers/Search in Fields.tid index eb7852d..4ca41a6 100644 --- a/tiddlers/search/Search in Fields.tid +++ b/tiddlers/Search in Fields.tid @@ -1,7 +1,7 @@ created: 20181115125359408 creator: Mohammad keywords: search field -modified: 20190216180316172 +modified: 20190704155016888 modifier: Mohammad responder: Tobias Beer tags: solution diff --git a/tiddlers/search/Search in Local Wiki Files.tid b/tiddlers/Search in Local Wiki Files.tid similarity index 98% rename from tiddlers/search/Search in Local Wiki Files.tid rename to tiddlers/Search in Local Wiki Files.tid index c1e73de..a486dc0 100644 --- a/tiddlers/search/Search in Local Wiki Files.tid +++ b/tiddlers/Search in Local Wiki Files.tid @@ -1,7 +1,7 @@ created: 20190130040857378 creator: Mohammad keywords: search local-wiki -modified: 20190216180316146 +modified: 20190704155016881 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/Search in Several Fields.tid b/tiddlers/Search in Several Fields.tid index 3f97fa3..df1933a 100644 --- a/tiddlers/Search in Several Fields.tid +++ b/tiddlers/Search in Several Fields.tid @@ -1,7 +1,7 @@ created: 20190124152545321 creator: Mohammad keywords: -modified: 20190224163834258 +modified: 20190704155016875 modifier: Mohammad tags: search title: Search in Several Fields diff --git a/tiddlers/Search in Tags.tid b/tiddlers/Search in Tags.tid index 4de24c2..3a4e969 100644 --- a/tiddlers/Search in Tags.tid +++ b/tiddlers/Search in Tags.tid @@ -1,7 +1,7 @@ created: 20180820164741629 creator: Mohammad keywords: search tag -modified: 20190224163834251 +modified: 20190704155016870 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Search in Tiddlywiki Toolmap.json b/tiddlers/Search in Tiddlywiki Toolmap.json new file mode 100644 index 0000000..4c09093 --- /dev/null +++ b/tiddlers/Search in Tiddlywiki Toolmap.json @@ -0,0 +1,13 @@ +[ + { + "created": "20190119041414166", + "title": "Search in Tiddlywiki Toolmap", + "text": "[[Tiddlywiki toolmap|https://dynalist.io/d/zUP-nIWu2FFoXH-oM7L7d9DM]] is a topical index of known plugins, tutorials, themes, and other helpful tools for TiddlyWiki.\n\nEnter a keyword and click on the created link to search the Tiddlywiki toolmap.\n\n\n\n{{Search Tiddlywiki Toolmap}}\n", + "creator": "Mohammad", + "modified": "20190704155016864", + "modifier": "Mohammad", + "tags": "", + "type": "text/vnd.tiddlywiki", + "class": " Honeydew " + } +] \ No newline at end of file diff --git a/tiddlers/Search in Tiddlywiki Toolmap.tid b/tiddlers/Search in Tiddlywiki Toolmap.tid deleted file mode 100644 index e7c7bbe..0000000 --- a/tiddlers/Search in Tiddlywiki Toolmap.tid +++ /dev/null @@ -1,16 +0,0 @@ -class: Honeydew -created: 20190119041414166 -creator: Mohammad -modified: 20190224163834246 -modifier: Mohammad -tags: -title: Search in Tiddlywiki Toolmap -type: text/vnd.tiddlywiki - -[[Tiddlywiki toolmap|https://dynalist.io/d/zUP-nIWu2FFoXH-oM7L7d9DM]] is a topical index of known plugins, tutorials, themes, and other helpful tools for TiddlyWiki. - -Enter a keyword and click on the created link to search the Tiddlywiki toolmap. - - - -{{Search Tiddlywiki Toolmap}} diff --git a/tiddlers/Select Icon.tid b/tiddlers/Select Icon.tid index 06c4c1d..d3070de 100644 --- a/tiddlers/Select Icon.tid +++ b/tiddlers/Select Icon.tid @@ -1,15 +1,3 @@ -created: 20181004010541350 -creator: Mohammad -icon: $:/core/images/advanced-search-button -keywords: icon fontawesome -modified: 20190316114919768 -modifier: Mohammad -responder: TonyM -tags: solution -title: Select Icon -type: application/x-tiddler -url: - \define edit-fields-image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]",subfilter:"")
    <$vars state-system=<>> diff --git a/tiddlers/Select Icon.tid.meta b/tiddlers/Select Icon.tid.meta new file mode 100644 index 0000000..d1601b1 --- /dev/null +++ b/tiddlers/Select Icon.tid.meta @@ -0,0 +1,11 @@ +created: 20181004010541350 +creator: Mohammad +icon: $:/core/images/advanced-search-button +keywords: icon fontawesome +modified: 20190704155017076 +modifier: Mohammad +responder: TonyM +tags: solution +title: Select Icon +type: application/x-tiddler +url: \ No newline at end of file diff --git a/tiddlers/Select Widget and DataTiddler.tid b/tiddlers/Select Widget and DataTiddler.tid index f53f121..d82386e 100644 --- a/tiddlers/Select Widget and DataTiddler.tid +++ b/tiddlers/Select Widget and DataTiddler.tid @@ -1,6 +1,6 @@ created: 20190206153606428 creator: Mohammad -modified: 20190224163834191 +modified: 20190704155017067 modifier: Mohammad search-engine: DuckDuckGo tags: datatiddler exmp38 diff --git a/tiddlers/Set a field.tid b/tiddlers/Set a field.tid index caee9d6..368b822 100644 --- a/tiddlers/Set a field.tid +++ b/tiddlers/Set a field.tid @@ -1,11 +1,3 @@ -created: 20180629121425137 -creator: Mohammad -modified: 20190224163834177 -modifier: Mohammad -tags: field -title: Set a field -type: application/x-tiddler - \define setNote(myVal:"100") <$button>Push me <$action-setfield $tiddler="myTiddler" $field="note" $value=$myVal$/> diff --git a/tiddlers/Set a field.tid.meta b/tiddlers/Set a field.tid.meta new file mode 100644 index 0000000..eed99b4 --- /dev/null +++ b/tiddlers/Set a field.tid.meta @@ -0,0 +1,7 @@ +created: 20180629121425137 +creator: Mohammad +modified: 20190704155017053 +modifier: Mohammad +tags: field +title: Set a field +type: application/x-tiddler \ No newline at end of file diff --git a/tiddlers/Set currentTiddler as Default Value for Macro Parameter.tid b/tiddlers/Set currentTiddler as Default Value for Macro Parameter.tid new file mode 100644 index 0000000..98ee15c --- /dev/null +++ b/tiddlers/Set currentTiddler as Default Value for Macro Parameter.tid @@ -0,0 +1,31 @@ +created: 20190405045313404 +creator: Mohammad +keywords: macro parameter empty default +modified: 20190704155017047 +modifier: Mohammad +responder: Anthony Muscio (TonyM) +tags: solution +title: Set currentTiddler as Default Value for Macro Parameter +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/73PPfQHUQJU/IaTCPu_pCAAJ + +;How to use `currentTiddler` as default value, when a macro parameter getting a tiddler title is empty? +:Use `$set` widget and set the emptyValue attribute! + +!! Example +The below macro needs a tiddler title as its parameter `tiddlername`, the `$set` widget defines a new variable and + +* if the parameter `tiddlername` //has been passed//, the `selected-tiddler` variable assigned to it +* if the parameter `tiddlername` //has not been passed//, then the `selected-tiddler` variable assigned to `currentTiddler`. + + +``` +\define mymacro(tiddlername) +<$set name=selected-tiddler value="$tiddlername$" emptyValue=<> > +Action: <> + +\end + +<> +<> +``` diff --git a/tiddlers/Set the Index_Value Using Select Widget.tid b/tiddlers/Set the Index_Value Using Select Widget.tid index b9ebd2e..dddcc7c 100644 --- a/tiddlers/Set the Index_Value Using Select Widget.tid +++ b/tiddlers/Set the Index_Value Using Select Widget.tid @@ -1,7 +1,7 @@ created: 20190207080922029 creator: Mohammad keywords: datatiddler index/value select -modified: 20190224163834171 +modified: 20190704155017039 modifier: Mohammad tags: datatiddler exmp41 title: Set the Index/Value Using Select Widget diff --git a/tiddlers/Setting Empty Value for a Macro Parameter.tid b/tiddlers/Setting Empty Value for a Macro Parameter.tid index 4ca5f0d..85edc40 100644 --- a/tiddlers/Setting Empty Value for a Macro Parameter.tid +++ b/tiddlers/Setting Empty Value for a Macro Parameter.tid @@ -1,7 +1,7 @@ created: 20180718024728689 creator: Mohammad -keywords: empty macro parameter -modified: 20190224163834164 +keywords: empty macro parameter default +modified: 20190704155017030 modifier: Mohammad responder: Talha tags: solution diff --git a/tiddlers/Setup TW5 on TiddlySpot.tid b/tiddlers/Setup TW5 on TiddlySpot.tid index 4e32576..8784be3 100644 --- a/tiddlers/Setup TW5 on TiddlySpot.tid +++ b/tiddlers/Setup TW5 on TiddlySpot.tid @@ -1,7 +1,7 @@ caption: How to install TW5 on Tiddlyspot.com created: 20180429043700245 creator: Mohammad -modified: 20190216180317503 +modified: 20190704155017021 modifier: Mohammad tags: tutorial title: Setup TW5 on TiddlySpot diff --git a/tiddlers/Shadow Tiddler.tid b/tiddlers/Shadow Tiddler.tid index a68d812..77c4273 100644 --- a/tiddlers/Shadow Tiddler.tid +++ b/tiddlers/Shadow Tiddler.tid @@ -1,11 +1,10 @@ created: 20190323204320665 creator: Mohammad keywords: shadow tiddler -modified: 20190406122519915 +modified: 20190704155017013 modifier: Mohammad responder: Jeremy Ruston tags: solution title: Shadow Tiddler type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/23wlw9E207c/37lfXDumAwAJ - +url: https://groups.google.com/d/msg/tiddlywiki/23wlw9E207c/37lfXDumAwAJ \ No newline at end of file diff --git a/tiddlers/Shorthand Syntax Summary.tid b/tiddlers/Shorthand Syntax Summary.tid index 233a462..4237bff 100644 --- a/tiddlers/Shorthand Syntax Summary.tid +++ b/tiddlers/Shorthand Syntax Summary.tid @@ -1,7 +1,7 @@ created: 20190201040333091 creator: Mohammad keywords: bracket qoute mark syntax -modified: 20190216180317496 +modified: 20190704155017004 modifier: Mohammad responder: Eric Shulman and Mat tags: syntax solution diff --git a/tiddlers/Show All Tags in a Wiki.json b/tiddlers/Show All Tags in a Wiki.json new file mode 100644 index 0000000..b3ddd3e --- /dev/null +++ b/tiddlers/Show All Tags in a Wiki.json @@ -0,0 +1,15 @@ +[ + { + "created": "20180911082428833", + "title": "Show All Tags in a Wiki", + "text": "<\n <$view field=title format=\"text\"/>\n\n\n*''Case 1''\n\n<$list filter=\"[tags[]!is[system]]\">\n {{||$:/core/ui/TagTemplate}}\n\n\n\"\"\">>", + "creator": "Mohammad", + "modified": "20190704155016985", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "tag ", + "responder": "Anthony Muscio", + "url": "https://groups.google.com/d/msg/tiddlywiki/7-2_yOi1Ujg/gWYd7fdZBgAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Show Contents of Macro Tiddler.tid b/tiddlers/Show Contents of Macro Tiddler.tid index 4f85ac1..336998a 100644 --- a/tiddlers/Show Contents of Macro Tiddler.tid +++ b/tiddlers/Show Contents of Macro Tiddler.tid @@ -1,6 +1,6 @@ created: 20190117123056666 creator: Mohammad -modified: 20190216180317483 +modified: 20190704155016977 modifier: Mohammad tags: howto title: Show Contents of Macro Tiddler diff --git a/tiddlers/Show Difference Between Contents.tid b/tiddlers/Show Difference Between Contents.tid index d7c621b..c7d0318 100644 --- a/tiddlers/Show Difference Between Contents.tid +++ b/tiddlers/Show Difference Between Contents.tid @@ -1,6 +1,6 @@ created: 20180907042915587 creator: Mohammad -modified: 20190216180317477 +modified: 20190704155016970 modifier: Mohammad tags: concept title: Show Difference Between Contents diff --git a/tiddlers/Show Icons of Tiddler.tid b/tiddlers/Show Icons of Tiddler.tid index 5301be1..ff6114f 100644 --- a/tiddlers/Show Icons of Tiddler.tid +++ b/tiddlers/Show Icons of Tiddler.tid @@ -1,7 +1,7 @@ created: 20180728051932000 creator: Mohammad keywords: icon -modified: 20190216180317471 +modified: 20190704155016965 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Show Tags with Title in Search Results.tid b/tiddlers/Show Tags with Title in Search Results.tid new file mode 100644 index 0000000..8ba2231 --- /dev/null +++ b/tiddlers/Show Tags with Title in Search Results.tid @@ -0,0 +1,49 @@ +created: 20190615171324513 +creator: Mohammad +keywords: link tag title +modified: 20190704155016960 +modifier: Mohammad +responder: talha 131 +tags: solution +title: Show Tags with Title in Search Results +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/KFrMHsyL1FU/EkBf1NryBgAJ + +;How do I show tags along with tiddler title in the search result? +:Every tiddler consists of fields. One field is the `title` field. Another is the `tags` field. They can be transcluded using this form `{{!!fieldname}}`. + +The solution is given as + +``` +
    +<$link to={{!!title}}> +<$view field="title"/> + + <$list filter={{!!tags}}> + <$macrocall $name=tag-pill tag={{!!title}} /> + + +
    +``` +!! Remarks +* The `tc-menu-list-item` was taken from $:/core/ui/ListItemTemplate +* The `<$link>...` is new in TW 5.1.20 and equal to `<$link to={{!!title}}>...` +* The ` <$list filter={{!!tags}}>` list all tags in the currentTiddler +* The `tag-pill` macro is called to show the tags in form of tag-pill one by one + +!! Example +Show a list of all tiddlers have in their title the `xampl` AND `6` +<$macrocall $name="wikitext-example-without-html" +src="""><$list filter="[search:title[xampl 6]]"> +
    +<$link> +<$view field="title"/> + + <$list filter={{!!tags}}> + <$macrocall $name=tag-pill tag={{!!title}} /> + + +
    + +"""/> + diff --git a/tiddlers/Show a Summary on Tiddler.tid b/tiddlers/Show a Summary on Tiddler.tid new file mode 100644 index 0000000..96e17f3 --- /dev/null +++ b/tiddlers/Show a Summary on Tiddler.tid @@ -0,0 +1,29 @@ +created: 20190616025542443 +creator: Mohammad +keywords: +modified: 20190704155016995 +modifier: Mohammad +responder: Jeremy Ruston +tags: exmp62 solution +title: Show a Summary on Tiddler +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/YEgHhQ0ZcFo/8oS__hRhnLIJ + +! Conditional Summary +Excerpt from [[Tobias Beer|https://tobibeer.github.io/tb5/#Conditional%20Summary]]: How to conditionally generate a summary section (or other related information) at the top of all tiddlers tagged `xx`, so that one doesn't have to click twice, skim the fields until one finds there to be a summary field. + +!!Step 1 +Create a [[tiddler|$:/.tb/ui/ViewTemplate/summary]] tagged [[$:/tags/ViewTemplate]] containing: + +``` +<$list filter="[all[current]tag[xx]]"> +<$transclude field="summary" mode="block"/> + +``` + +!!Step 2 +Create a `list-after` field with the value "[[$:/core/ui/ViewTemplate/tags]]" to make the summary segment appear immediately after the tags. + +!Example + +The [[$:/.tb/ui/ViewTemplate/summary]] serves as a template for a conditional ViewTemplate section that displays the value of the ''summary'' field for all tiddlers having a `summary` field defined, see [[Example 62: Conditional Summary]].. diff --git a/tiddlers/SimaParsi b/tiddlers/SimaParsi new file mode 100644 index 0000000..7ba3765 --- /dev/null +++ b/tiddlers/SimaParsi @@ -0,0 +1,6 @@ +Salutation: Mrs. +HerFirstName: Sima +HerLastName: Parsi +PostAddress1: Tehran, Iran +Cast: Banner +HerTax17: 32000 \ No newline at end of file diff --git a/tiddlers/SimaParsi.meta b/tiddlers/SimaParsi.meta new file mode 100644 index 0000000..019b70e --- /dev/null +++ b/tiddlers/SimaParsi.meta @@ -0,0 +1,6 @@ +created: 20180820085302039 +modified: 20190704155017183 +note: don't delete, this is part of exmp07 +tags: exmp07 +title: SimaParsi +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/SimaParsi.tid b/tiddlers/SimaParsi.tid deleted file mode 100644 index b600cdc..0000000 --- a/tiddlers/SimaParsi.tid +++ /dev/null @@ -1,13 +0,0 @@ -created: 20180820085302039 -modified: 20190216180317464 -note: don't delete, this is part of exmp07 -tags: exmp07 -title: SimaParsi -type: application/x-tiddler-dictionary - -Salutation: Mrs. -HerFirstName: Sima -HerLastName: Parsi -PostAddress1: Tehran, Iran -Cast: Banner -HerTax17: 32000 \ No newline at end of file diff --git a/tiddlers/Simple Calendar.tid b/tiddlers/Simple Calendar.tid index 47c9805..6a1ae81 100644 --- a/tiddlers/Simple Calendar.tid +++ b/tiddlers/Simple Calendar.tid @@ -2,11 +2,10 @@ created: 20190220125746813 creator: Mohammad description: This plugin displays a monthly calendar with buttons to modify the month or the year and nice styling features. developer: FrD -modified: 20190224163834431 +modified: 20190704155017175 modifier: Mohammad tags: Links title: Simple Calendar type: text/vnd.tiddlywiki url: http://simplecalendar.tiddlyspot.com/ -wiki-name: Simple Calendar - +wiki-name: Simple Calendar \ No newline at end of file diff --git a/tiddlers/Simple Comparison of Two Variables.tid b/tiddlers/Simple Comparison of Two Variables.tid index ca5b72f..ba56495 100644 --- a/tiddlers/Simple Comparison of Two Variables.tid +++ b/tiddlers/Simple Comparison of Two Variables.tid @@ -1,7 +1,7 @@ created: 20181107055331205 creator: Mohammad keywords: conditional if-clause comparison variable -modified: 20190216180317450 +modified: 20190704155017164 modifier: Mohammad responder: Mark S tags: variable solution diff --git a/tiddlers/Simple Comparison of Two or More Variables.tid b/tiddlers/Simple Comparison of Two or More Variables.tid index 4633ecf..c5ad3a0 100644 --- a/tiddlers/Simple Comparison of Two or More Variables.tid +++ b/tiddlers/Simple Comparison of Two or More Variables.tid @@ -1,7 +1,7 @@ created: 20181107060912807 creator: Mohammad keywords: conditional if-clause comparison variable -modified: 20190216180317457 +modified: 20190704155017169 modifier: Mohammad responder: TonyM tags: solution diff --git a/tiddlers/Simple Template with List.tid b/tiddlers/Simple Template with List.tid index 7de7549..5405553 100644 --- a/tiddlers/Simple Template with List.tid +++ b/tiddlers/Simple Template with List.tid @@ -1,7 +1,7 @@ created: 20181122042335197 creator: Mohammad keywords: template list -modified: 20190216180317436 +modified: 20190704155017149 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Simple search.tid b/tiddlers/Simple search.tid index a460951..71b8cd5 100644 --- a/tiddlers/Simple search.tid +++ b/tiddlers/Simple search.tid @@ -1,6 +1,6 @@ created: 20190124152059869 creator: Mohammad -modified: 20190216180317443 +modified: 20190704155017158 modifier: Mohammad tags: search title: Simple search diff --git a/tiddlers/Siniy Kit Google Table and Tiddlywiki.tid b/tiddlers/Siniy Kit Google Table and Tiddlywiki.tid index ed6cdfb..02d14da 100644 --- a/tiddlers/Siniy Kit Google Table and Tiddlywiki.tid +++ b/tiddlers/Siniy Kit Google Table and Tiddlywiki.tid @@ -2,7 +2,7 @@ created: 20190310124214597 creator: Mohammad description: A Tiddlywiki application uses google table developer: Siniy Kit -modified: 20190316114919471 +modified: 20190704155017143 modifier: Mohammad tags: Links title: Siniy Kit Google Table and Tiddlywiki diff --git a/tiddlers/Size of Icons in Tiddler Toolbar.tid b/tiddlers/Size of Icons in Tiddler Toolbar.tid index 277c8e5..4fd72fc 100644 --- a/tiddlers/Size of Icons in Tiddler Toolbar.tid +++ b/tiddlers/Size of Icons in Tiddler Toolbar.tid @@ -1,7 +1,7 @@ created: 20181028181233567 creator: Mohammad keywords: icon toolbar size css -modified: 20190216180317427 +modified: 20190704155017138 modifier: Mohammad responder: Thomas Elmiger tags: css solution diff --git a/tiddlers/Slider Macro II.tid b/tiddlers/Slider Macro II.tid index e30613a..5feb847 100644 --- a/tiddlers/Slider Macro II.tid +++ b/tiddlers/Slider Macro II.tid @@ -1,7 +1,7 @@ created: 20181125061011032 creator: Mohammad keywords: reveal slider -modified: 20190216180317412 +modified: 20190704155017125 modifier: Mohammad responder: Rob Hoelz tags: solution diff --git a/tiddlers/Slider Macro III.tid b/tiddlers/Slider Macro III.tid index 9cc5a28..a452fb0 100644 --- a/tiddlers/Slider Macro III.tid +++ b/tiddlers/Slider Macro III.tid @@ -1,7 +1,7 @@ created: 20181204083701214 creator: Mohammad keywords: slider reveal -modified: 20190216180317403 +modified: 20190704155017118 modifier: Mohammad responder: Jed Carty tags: solution diff --git a/tiddlers/Slider Macro.tid b/tiddlers/Slider Macro.tid index 902125b..cc7e014 100644 --- a/tiddlers/Slider Macro.tid +++ b/tiddlers/Slider Macro.tid @@ -1,7 +1,7 @@ created: 20181123060623951 creator: Mohammad keywords: slider reveal -modified: 20190216180317420 +modified: 20190704155017132 modifier: Mohammad responder: Ton Gerner tags: solution diff --git a/tiddlers/Solution Resource.tid b/tiddlers/Solution Resource.tid index 3059476..886175a 100644 --- a/tiddlers/Solution Resource.tid +++ b/tiddlers/Solution Resource.tid @@ -1,6 +1,6 @@ created: 20181006191032544 creator: Mohammad -modified: 20190216180317377 +modified: 20190704155017096 modifier: Mohammad tags: mywiki title: Solution Resource diff --git a/tiddlers/Solutions.tid b/tiddlers/Solutions.tid index f41ba56..e35e962 100644 --- a/tiddlers/Solutions.tid +++ b/tiddlers/Solutions.tid @@ -1,6 +1,6 @@ created: 20190109042622440 creator: Mohammad -modified: 20190224163834348 +modified: 20190704155017304 modifier: Mohammad tags: $:/tags/SideBar title: Solutions diff --git a/tiddlers/Some Proposed Names for Plugins.tid b/tiddlers/Some Proposed Names for Plugins.tid index 7d191e6..bd5870b 100644 --- a/tiddlers/Some Proposed Names for Plugins.tid +++ b/tiddlers/Some Proposed Names for Plugins.tid @@ -1,6 +1,6 @@ created: 20181012104104487 creator: Mohammad -modified: 20190224163834341 +modified: 20190704155017297 modifier: Mohammad tags: task title: Some Proposed Names for Plugins diff --git a/tiddlers/Sort Tag Wizard.json b/tiddlers/Sort Tag Wizard.json new file mode 100644 index 0000000..579d266 --- /dev/null +++ b/tiddlers/Sort Tag Wizard.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190211073455331", + "title": "Sort Tag Wizard", + "text": ";How to sort tiddlers tagged with specific tag through a dropdown list?\n: Use one of sort tagged tiddler macro with a `edit-text` widget.\n\n!!Example\nIn [[Example 48: Sort Tag Wizard]] a code has been given to do the job. It includes\n\n* An `edit-text` widget to let type the desired tag\n* A dropdown to select a tag from list of all tags\n* A macro to sort tiddlers tagged with selected one\n\n!! Similar topics\nThe below topics are related to sort items. This method is also used in some of the below solution.\n<]\" type:\"ol\">>\n\n<>\n<>", + "creator": "Mohammad", + "modified": "20190704155017286", + "modifier": "Mohammad", + "tags": "exmp48 solution", + "type": "text/vnd.tiddlywiki", + "keywords": "sort tagging ", + "responder": "Talha", + "url": "" + } +] \ No newline at end of file diff --git a/tiddlers/Sort Tag Wizard.tid b/tiddlers/Sort Tag Wizard.tid deleted file mode 100644 index 42b14f0..0000000 --- a/tiddlers/Sort Tag Wizard.tid +++ /dev/null @@ -1,27 +0,0 @@ -created: 20190211073455331 -creator: Mohammad -keywords: sort tagging -modified: 20190224163834335 -modifier: Mohammad -responder: Talha -tags: exmp48 solution -title: Sort Tag Wizard -type: text/vnd.tiddlywiki -url: - -;How to sort tiddlers tagged with specific tag through a dropdown list? -: Use one of sort tagged tiddler macro with a `edit-text` widget. - -!!Example -In [[Example 48: Sort Tag Wizard]] a code has been given to do the job. It includes - -* An `edit-text` widget to let type the desired tag -* A dropdown to select a tag from list of all tags -* A macro to sort tiddlers tagged with selected one - -!! Similar topics -The below topics are related to sort items. This method is also used in some of the below solution. -<]" type:"ol">> - -<> -<> \ No newline at end of file diff --git a/tiddlers/Sort Tiddlers in Tag Pill.json b/tiddlers/Sort Tiddlers in Tag Pill.json new file mode 100644 index 0000000..0d62426 --- /dev/null +++ b/tiddlers/Sort Tiddlers in Tag Pill.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190208080154555", + "title": "Sort Tiddlers in Tag Pill", + "text": "; How sort tiddlers in tag-pills?\n: One solution is the manual drag and drop and reorder tiddlers inside tag-pill. The below solution shows how to do this automatically.\n\nWhen you click on a tag and see a list, and then drag an item in the list, where is that sort-order stored? It's stored in the `list` field of the tiddler with the same name as the master tag that you clicked on. So, for instance, if you go to TiddlyWiki.com and open the HelloThere tiddler, and look at the \"list\" field, you will see the tiddlers that reference \"HelloThere\" listed in the field. They are not in alphabetical order.\n\nIf you copy the following into a tiddler at TiddlyWiki.com, and press the \"Sort\" button, the corresponding tiddlers will be sorted:\n\n```\n\\define alphasort() <$action-listops $tiddler=\"HelloThere\" $subfilter=\"+[sort[]]\"/>\n\n<$button actions=<>\nSort \"HelloThere\"\n\n```\n\nYou can make changes to this code to sort the list field of any tiddler.\n\nThe catch is, that there is no requirement that all tiddlers that are tagged by a tiddler are listed in its list field. This version will ''populate'' the field AND ''sort'' it:\n\n```\n\\define alphasort() <$action-listops $tiddler=\"HelloThere\" $filter=\"[tag[HelloThere]sort[]]\"/>\n\n<$button actions=<>>\nSort \"HelloThere\"\n\n```\n\nA generic macro has been developed to use for sorting tagged tiddlers in the list field. See [[Example 46: Sort Tiddlers in Tag Pill]]\n", + "creator": "Mohammad", + "modified": "20190704155017279", + "modifier": "Mohammad", + "tags": "exmp46 solution", + "type": "text/vnd.tiddlywiki", + "keywords": "tagpill sort ", + "responder": "Mark S", + "url": "https://groups.google.com/d/msg/tiddlywiki/fwmEj4d_B3A/AC6HobevHQAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Sort Tiddlers in Tag Pill.tid b/tiddlers/Sort Tiddlers in Tag Pill.tid deleted file mode 100644 index 3ff989b..0000000 --- a/tiddlers/Sort Tiddlers in Tag Pill.tid +++ /dev/null @@ -1,39 +0,0 @@ -created: 20190208080154555 -creator: Mohammad -keywords: tagpill sort -modified: 20190224163834329 -modifier: Mohammad -responder: Mark S -tags: exmp46 solution -title: Sort Tiddlers in Tag Pill -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/fwmEj4d_B3A/AC6HobevHQAJ - -; How sort tiddlers in tag-pills? -: One solution is the manual drag and drop and reorder tiddlers inside tag-pill. The below solution shows how to do this automatically. - -When you click on a tag and see a list, and then drag an item in the list, where is that sort-order stored? It's stored in the `list` field of the tiddler with the same name as the master tag that you clicked on. So, for instance, if you go to TiddlyWiki.com and open the HelloThere tiddler, and look at the "list" field, you will see the tiddlers that reference "HelloThere" listed in the field. They are not in alphabetical order. - -If you copy the following into a tiddler at TiddlyWiki.com, and press the "Sort" button, the corresponding tiddlers will be sorted: - -``` -\define alphasort() <$action-listops $tiddler="HelloThere" $subfilter="+[sort[]]"/> - -<$button actions=<> -Sort "HelloThere" - -``` - -You can make changes to this code to sort the list field of any tiddler. - -The catch is, that there is no requirement that all tiddlers that are tagged by a tiddler are listed in its list field. This version will ''populate'' the field AND ''sort'' it: - -``` -\define alphasort() <$action-listops $tiddler="HelloThere" $filter="[tag[HelloThere]sort[]]"/> - -<$button actions=<>> -Sort "HelloThere" - -``` - -A generic macro has been developed to use for sorting tagged tiddlers in the list field. See [[Example 46: Sort Tiddlers in Tag Pill]] diff --git a/tiddlers/Sorting in Table of Contents.tid b/tiddlers/Sorting in Table of Contents.tid index 172f219..2b86da5 100644 --- a/tiddlers/Sorting in Table of Contents.tid +++ b/tiddlers/Sorting in Table of Contents.tid @@ -1,7 +1,7 @@ created: 20190329154322139 creator: Mohammad keywords: toc sort -modified: 20190406122520357 +modified: 20190704155017272 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Specification for Autonumbering References.tid b/tiddlers/Specification for Autonumbering References.tid index 56c2c4a..7183027 100644 --- a/tiddlers/Specification for Autonumbering References.tid +++ b/tiddlers/Specification for Autonumbering References.tid @@ -1,7 +1,7 @@ created: 20181208193104537 creator: Mohammad keywords: autonumbering reference number -modified: 20190224163834322 +modified: 20190704155017264 modifier: Mohammad responder: Olegh tags: idea solution diff --git a/tiddlers/spellcheck/Spellcheck Plugin for Codemirror.tid b/tiddlers/Spellcheck Plugin for Codemirror.tid similarity index 91% rename from tiddlers/spellcheck/Spellcheck Plugin for Codemirror.tid rename to tiddlers/Spellcheck Plugin for Codemirror.tid index f554e0f..f099b29 100644 --- a/tiddlers/spellcheck/Spellcheck Plugin for Codemirror.tid +++ b/tiddlers/Spellcheck Plugin for Codemirror.tid @@ -2,7 +2,7 @@ created: 20181115135456434 creator: Mohammad description: A plugin addes the dictionary to be used for spell checking in Codemirror developer: BurningTreeC -modified: 20190224163834315 +modified: 20190704155017258 modifier: Mohammad tags: Links title: Spellcheck Plugin for Codemirror diff --git a/tiddlers/spellcheck/Spellcheck Preview in Codemirror.tid b/tiddlers/Spellcheck Preview in Codemirror.tid similarity index 93% rename from tiddlers/spellcheck/Spellcheck Preview in Codemirror.tid rename to tiddlers/Spellcheck Preview in Codemirror.tid index 3f221ce..cdb3e36 100644 --- a/tiddlers/spellcheck/Spellcheck Preview in Codemirror.tid +++ b/tiddlers/Spellcheck Preview in Codemirror.tid @@ -1,7 +1,7 @@ created: 20181205051148937 creator: Mohammad keywords: codemirror editor spellcheck -modified: 20190224163834308 +modified: 20190704155017250 modifier: Mohammad responder: Jeremy Rustone tags: solution diff --git a/tiddlers/Split Date into Day Month Year.tid b/tiddlers/Split Date into Day Month Year.tid index 7dc52d5..8fdbc19 100644 --- a/tiddlers/Split Date into Day Month Year.tid +++ b/tiddlers/Split Date into Day Month Year.tid @@ -1,7 +1,7 @@ created: 20190202185242220 creator: Mohammad keywords: -modified: 20190224163834741 +modified: 20190704155017233 modifier: Mohammad responder: tags: exmp37 solution diff --git a/tiddlers/Status Badges.tid b/tiddlers/Status Badges.tid index ff32bf0..72ea2e9 100644 --- a/tiddlers/Status Badges.tid +++ b/tiddlers/Status Badges.tid @@ -1,6 +1,6 @@ created: 20181205053000183 creator: Mohammad -modified: 20190224163834727 +modified: 20190704155017216 modifier: Mohammad tags: mywiki title: Status Badges diff --git a/tiddlers/Stephan Hradek.tid b/tiddlers/Stephan Hradek.tid index f5b6dba..42a2191 100644 --- a/tiddlers/Stephan Hradek.tid +++ b/tiddlers/Stephan Hradek.tid @@ -1,6 +1,6 @@ created: 20180618022654862 creator: Mohammad -modified: 20190224163834721 +modified: 20190704155017212 modifier: Mohammad tags: Links title: Stephan Hradek diff --git a/tiddlers/Stephen Teacher Test.tid b/tiddlers/Stephen Teacher Test.tid index 70b292a..4f8ac37 100644 --- a/tiddlers/Stephen Teacher Test.tid +++ b/tiddlers/Stephen Teacher Test.tid @@ -2,11 +2,10 @@ created: 20181110121123533 creator: Mohammad description: Fonts, some other tools developer: Ste W -modified: 20190224163834714 +modified: 20190704155017206 modifier: Mohammad tags: Links title: Stephen Teacher Test type: text/vnd.tiddlywiki url: http://stephenteachertests.tiddlyspot.com/#Font:Thoughts%20Font -wiki-name: stephenteachertests - +wiki-name: stephenteachertests \ No newline at end of file diff --git a/tiddlers/Steps to Setup GitHub-Travis.tid b/tiddlers/Steps to Setup GitHub-Travis.tid deleted file mode 100644 index 8ba148e..0000000 --- a/tiddlers/Steps to Setup GitHub-Travis.tid +++ /dev/null @@ -1,38 +0,0 @@ -created: 20190403205324352 -creator: Mohammad -modified: 20190406122520249 -modifier: Mohammad -tags: travis -title: Steps to Setup GitHub-Travis -type: text/vnd.tiddlywiki - -This instruction assumes you have working GitHub and Travis accounts. If not see [1, 2]. - -# Create a new repository in GitHub -# Create a Personal access token in GitHub (https://github.com/settings/tokens) with enabling the access for `repo`, and `gist`. -# Save the token from step two above somewhere as you can use it in the below steps -# Go to https://travis-ci.com/ and sign-in -# Select the repository you want to use with Travis CI -# On the Travis setting for selected repository (`https://travis-ci.org///settings`) create an environmental variable with -#* ''name''=`GITHUB_TOKEN` and -#* ''value''=`the token generated in step 2 above` (like `553dca4a315eb43dd259948db7b9ae18be2d2bd5`) -#* Make sure to mark "Display value in build log" as "Off". -# In order for Travis CI to build your project, you'll need to add a `.travis.yml` configuration file to the root directory of your repository. (see [[Travis Configuration File]]) -# After completing these steps, Travis-CI will use the YAML configuration file and generate wiki from indivisual tiddlers in your root directory of your repository. -# You can see what is going on in Travis-CI, repository, ''Build History'' and ''Current'' tabs. -# This will create an `index.html` in your GitHub repositort page under new branch `gh-pages` -# To give public access to the created `index.html` you can setup GitHub Pages from setting page of your repository. To do this -#* Goto GitHUb and open the repository and then go to Setting page -#* In Options tab, find GitHub Pages and for Source use `gh-pages` branch -#* Point to the new webpage GitHub generates under GitHub Pages! -# That's all - - - - - - -!! Refences -[1] [[Signing up for a new GitHub account|https://help.github.com/en/articles/signing-up-for-a-new-github-account]]
    -[2] [[To get started with Travis CI|https://docs.travis-ci.com/user/tutorial/]]
    -[3] [[Creating a personal access token for the command line|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]]
    \ No newline at end of file diff --git a/tiddlers/Sticky Notes.tid b/tiddlers/Sticky Notes.tid index 3ae8830..20bd0c3 100644 --- a/tiddlers/Sticky Notes.tid +++ b/tiddlers/Sticky Notes.tid @@ -2,11 +2,10 @@ created: 20190314033601060 creator: Mohammad description: Adds an icon and lets create notes using template developer: Unknown -modified: 20190316114920486 +modified: 20190704155017199 modifier: Mohammad tags: Links title: Sticky Notes type: text/vnd.tiddlywiki url: http://stickynotes.tiddlyspot.com/ -wiki-name: Sticky Notes - +wiki-name: Sticky Notes \ No newline at end of file diff --git a/tiddlers/Stitch Tiddlers together for Printing.tid b/tiddlers/Stitch Tiddlers together for Printing.tid index f11cbab..51e7f0d 100644 --- a/tiddlers/Stitch Tiddlers together for Printing.tid +++ b/tiddlers/Stitch Tiddlers together for Printing.tid @@ -1,7 +1,7 @@ created: 20190107165345469 creator: Mohammad keywords: print css stitch tiddler -modified: 20190224163834706 +modified: 20190704155017192 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Story River in Two Columns.tid b/tiddlers/Story River in Two Columns.tid index 1b26157..bd6a95c 100644 --- a/tiddlers/Story River in Two Columns.tid +++ b/tiddlers/Story River in Two Columns.tid @@ -1,7 +1,7 @@ created: 20180823165254420 creator: Mohammad keywords: flexbox column -modified: 20190224163834699 +modified: 20190704155017399 modifier: Mohammad responder: Rustem tags: solution diff --git a/tiddlers/String operation.tid b/tiddlers/String operation.tid index 8a20039..7533f2d 100644 --- a/tiddlers/String operation.tid +++ b/tiddlers/String operation.tid @@ -1,6 +1,6 @@ created: 20190208053822002 creator: Mohammad -modified: 20190224163834694 +modified: 20190704155017392 modifier: Mohammad tags: task title: String operation diff --git a/tiddlers/Stylesheet Tiddler or Inline CSS.tid b/tiddlers/Stylesheet Tiddler or Inline CSS.tid index 173d548..35b4bb7 100644 --- a/tiddlers/Stylesheet Tiddler or Inline CSS.tid +++ b/tiddlers/Stylesheet Tiddler or Inline CSS.tid @@ -1,7 +1,7 @@ created: 20180928045459676 creator: Mohammad keywords: css inline -modified: 20190224163834682 +modified: 20190704155017379 modifier: Mohammad responder: Mark S tags: solution diff --git a/tiddlers/Stylesheet for Print Media.tid b/tiddlers/Stylesheet for Print Media.tid index ef0a19a..c2392eb 100644 --- a/tiddlers/Stylesheet for Print Media.tid +++ b/tiddlers/Stylesheet for Print Media.tid @@ -1,14 +1,3 @@ -created: 20181224181136166 -creator: Mohammad -keywords: stylesheet print css -modified: 20190224163834688 -modifier: Mohammad -responder: Eric Shulman -tags: css print solution -title: Stylesheet for Print Media -type: application/x-tiddler -url: https://groups.google.com/d/msg/tiddlywiki/uC87n0sa_WE/_he7iyj1DQAJ - !! TW and Print media How to adjust TW elements for print? diff --git a/tiddlers/Stylesheet for Print Media.tid.meta b/tiddlers/Stylesheet for Print Media.tid.meta new file mode 100644 index 0000000..528b5b3 --- /dev/null +++ b/tiddlers/Stylesheet for Print Media.tid.meta @@ -0,0 +1,10 @@ +created: 20181224181136166 +creator: Mohammad +keywords: stylesheet print css +modified: 20190704155017386 +modifier: Mohammad +responder: Eric Shulman +tags: css print solution +title: Stylesheet for Print Media +type: application/x-tiddler +url: https://groups.google.com/d/msg/tiddlywiki/uC87n0sa_WE/_he7iyj1DQAJ \ No newline at end of file diff --git a/tiddlers/Stylesheet with Conditional Rules.tid b/tiddlers/Stylesheet with Conditional Rules.tid index e0dd67b..ad44fdf 100644 --- a/tiddlers/Stylesheet with Conditional Rules.tid +++ b/tiddlers/Stylesheet with Conditional Rules.tid @@ -1,7 +1,7 @@ created: 20181223131047221 creator: Mohammad keywords: conditional stylesheet sidebar color -modified: 20190224163834676 +modified: 20190704155017373 modifier: Mohammad responder: Jeremy Ruston tags: exmp18 solution @@ -21,7 +21,7 @@ There's a danger of inadvertent wikification of stylesheet text, and so we usual Putting the pieces together, here’s a stylesheet that sets the page background colour to green whenever the sidebar is hidden: -Open [[example 18|Exmple 18: Conditionally Change Background Color]] and add `$:/tags/Stylesheet` tag to see it is in action. +Open [[example 18|Example 18: Conditionally Change Background Color]] and add `$:/tags/Stylesheet` tag to see it is in action. ``` \define if-sidebar-visible(text) diff --git a/tiddlers/Subfilter Example.tid b/tiddlers/Subfilter Example.tid index ed1a3d4..4d4a13a 100644 --- a/tiddlers/Subfilter Example.tid +++ b/tiddlers/Subfilter Example.tid @@ -1,6 +1,6 @@ created: 20190107194652842 keywords: subfilter dynamic filter -modified: 20190224163834550 +modified: 20190704155017455 responder: Riz tags: exmp20 solution title: Subfilter Example diff --git a/tiddlers/Subfilter operation.tid b/tiddlers/Subfilter operation.tid index 8aab58f..b186e38 100644 --- a/tiddlers/Subfilter operation.tid +++ b/tiddlers/Subfilter operation.tid @@ -1,6 +1,6 @@ created: 20190214045412932 creator: Mohammad -modified: 20190224163834544 +modified: 20190704155017446 modifier: Mohammad tags: task title: Subfilter operation diff --git a/tiddlers/Svg Images as Background.tid b/tiddlers/Svg Images as Background.tid new file mode 100644 index 0000000..be3ecbc --- /dev/null +++ b/tiddlers/Svg Images as Background.tid @@ -0,0 +1,10 @@ +class: Beige +created: 20190629091900301 +creator: Mohammad +modified: 20190704155017618 +modifier: Mohammad +tags: svg-image +title: Svg Images as Background +type: text/vnd.tiddlywiki + +fill in the contents .... \ No newline at end of file diff --git a/tiddlers/Svg an datauri Macro.tid b/tiddlers/Svg an datauri Macro.tid new file mode 100644 index 0000000..21543f0 --- /dev/null +++ b/tiddlers/Svg an datauri Macro.tid @@ -0,0 +1,10 @@ +class: Beige +created: 20190629091921015 +creator: Mohammad +modified: 20190704155017434 +modifier: Mohammad +tags: svg-image +title: Svg an datauri Macro +type: text/vnd.tiddlywiki + +fill in the contents .... \ No newline at end of file diff --git a/tiddlers/Switch Field Values and Select Widget.tid b/tiddlers/Switch Field Values and Select Widget.tid new file mode 100644 index 0000000..56e8358 --- /dev/null +++ b/tiddlers/Switch Field Values and Select Widget.tid @@ -0,0 +1,44 @@ +created: 20190704045929715 +creator: Mohammad +keywords: switch field select +modified: 20190704155017587 +modifier: Mohammad +responder: Mohammad +tags: exmp67 solution +title: Switch Field Values and Select Widget +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/AoL8zjxKH5U/s18my3GpDAAJ + +; How to switch a field value among predefined values and keep the old one for further processing? +: Use `set` and `select` widgets with together and store the old value in a variable using the set widget + +As described by [[Jeremy|https://groups.google.com/d/msg/tiddlywiki/AoL8zjxKH5U/qZvQNZDdCwAJ]] when select widget is used, any variables setup outside of the action string will not be updated to reflect the new value of the target tiddler. + +!! Example +Assume a tiddler like [[exmp67/data]] has a field `fa`, its value is set among predefined items provided by a `select` widget. The code has to let to change the value of `fa` and keep its previous value for further processing. In breif the code shall do the below operations + +* Temp = fa +* fa = new value + +This is a demo is given in [[exmp67/data]] + +<<< +* Field fa: {{exmp67/data!!fa}} +* Field fb: {{exmp67/data!!fb}} +{{exmp67/data}} +<<< + +!! Code +The code is given in [[exmp67/data]] has tow parts as below + +* action macro +* set/select widget + +
    <$view tiddler="exmp67/data"/>
    + +!! Remarks +* The outer `set` widget first stores the value of field `fa` from tiddler [[exmp67/data]] into a variable, `Temp` +* The `select` widget lets user choose a new value from a list of predefined values +* The `select` widget then calls the action macro `switch` to perform the below operation +** set the value of `fa` field by what is selected within `select` widget +** set the previous value of `fa` into `fb` field (this is only for demo purpose, any other operation can be done on the previous value) \ No newline at end of file diff --git a/tiddlers/Switch Tags without Change in Timestamp.tid b/tiddlers/Switch Tags without Change in Timestamp.tid index 2e2be40..5b352dc 100644 --- a/tiddlers/Switch Tags without Change in Timestamp.tid +++ b/tiddlers/Switch Tags without Change in Timestamp.tid @@ -1,7 +1,7 @@ created: 20190110100524937 creator: Mohammad keywords: tag add remove swith timestamp listops -modified: 20190224163834533 +modified: 20190704155017578 modifier: Mohammad responder: Thomas Elmiger tags: exmp25 solution diff --git a/tiddlers/Switch Two Fields Value.tid b/tiddlers/Switch Two Fields Value.tid new file mode 100644 index 0000000..fe32a39 --- /dev/null +++ b/tiddlers/Switch Two Fields Value.tid @@ -0,0 +1,52 @@ +created: 20190704043104627 +creator: Mohammad +keywords: switch field set +modified: 20190704155017572 +modifier: Mohammad +responder: Mohammad +tags: exmp66 solution +title: Switch Two Fields Value +type: text/vnd.tiddlywiki +url: + +\define switch() +<$action-setfield $tiddler="exmp66/temp" $value={{exmp66/data!!fa}} /> +<$action-setfield $tiddler="exmp66/data" $field="fa" $value={{exmp66/data!!fb}} /> +<$action-setfield $tiddler="exmp66/data" $field="fb" $value={{exmp66/temp}} /> +\end + +; How to exchange the values of two fields? +: Use the `set` widget plug and action widget like `button` and perform it as below + +* temp = fa +* fa = fb +* fb = temp + +!! Example +Assume a tiddler has two fields `fa`, and `fb`, the below code perform the job + +``` +\define switch() +<$action-setfield $tiddler="exmp66/temp" $value={{exmp66/data!!fa}} /> +<$action-setfield $tiddler="exmp66/data" $field="fa" $value={{exmp66/data!!fb}} /> +<$action-setfield $tiddler="exmp66/data" $field="fb" $value={{exmp66/temp}} /> +\end + +<$button actions=<> >Exchange fields value + +``` + +<$button actions=<> >Exchange fields value + + +* Field fa in [[exmp66/data]]: {{exmp66/data!!fa}} +* Field fb in [[exmp66/data]]: {{exmp66/data!!fb}} + +!! Remarks +* The button lets do the actions, other action widgets also can be used +* The switch macro implements the operation as below +** first the value of field `fa` is stored in temporary tiddler `exmp66/temp` +** second, the value of field `fa` is set by the value of field `fb` +** third the value of field `fb` is set the stored value of `fa` in temp tiddler +* the [[exmp66/data]] is the tiddler used fro demonstration and holds the two fields + diff --git a/tiddlers/Syntax Highlighting.tid b/tiddlers/Syntax Highlighting.tid new file mode 100644 index 0000000..5ec576d --- /dev/null +++ b/tiddlers/Syntax Highlighting.tid @@ -0,0 +1,178 @@ +created: 20170820051104983 +creator: Mohammad +modified: 20190704155017554 +modifier: Mohammad +tags: markup tutorial +title: Syntax Highlighting +type: text/vnd.tiddlywiki + +This TW has been updated to highlight.js 9.12 and the following language has been added: + +<<< +* Fortran +* Tex +* Python +* Matlab / Octave +* Perl +* CSS +* Javascript +* Julia +* ... +<<< + +!!.bluecls Example + +*''Fortran'' + +```fortran +x=1.23_wp +y=148_wer +z=1.25e9 +! sum.f90 +! Performs summations using in a loop using EXIT statement +! Saves input information and the summation in a data file +function test(x,y) +real:: x +print*, 'x=', x +end function test +program summation +implicit none +integer :: s, a + +print*, "This program performs summations. Enter 0 to stop." +open(unit=10, file="SumData.DAT") + +sum = 0 +y = sin(x)*cos(x) - tanh(1-x) +do + print*, "Add:" + read*, a + if (a == 0) then + exit + else + s = s + a + end if + write(10,*) a +end do + +print*, "Summation =", s +write(10,*) "Summation =", s +close(10) +contains +function test(x) +integer, intent(in):: x +integer:: test +test = 2*x +end function test +end +``` + +*''Tex'' + +```tex +\documentclass[]{article} + +% opening +\title{} +\author{} + +\begin{document} +\maketitle +\begin{abstract} + +\end{abstract} +\section{First Section} +Some text! +\end{document} + +``` + +* ''Python'' + +```python +@requires_authorization +def somefunc(param1='', param2=0): + r'''A docstring''' + if param1 > param2: # interesting + print 'Gre\'ater' + return (param2 - param1 + 1 + 0b10l) or None + +class SomeClass: + pass + +>>> message = '''interpreter +... prompt''' +``` + + +* ''Matlab/Octave'' + +```matlab +% A test problem +[X,Y] = meshgrid(-10:0.25:10,-10:0.25:10); +f = sinc(sqrt((X/pi).^2+(Y/pi).^2)); +mesh(X,Y,f); +axis([-10 10 -10 10 -0.3 1]) +xlabel('{\bfx}') +ylabel('{\bfy}') +zlabel('{\bfsinc} ({\bfR})') +hidden off + +``` + +* ''Julia'' + +```julia +function hypot(x,y) + x = abs(x) + y = abs(y) + if x > y + r = y/x + return x*sqrt(1+r*r) + end + if y == 0 + return zero(x) + end + r = x/y + return y*sqrt(1+r*r) +end +``` + +* ''Perl'' + +```perl +package Name; +my $singleton; + +BEGIN { + $singleton = { + attribute => 'value', + another => 'something', + }; + bless $singleton, "Name"; +} + +sub new { + my $class = shift; + return $singleton; +} +``` + +* ''CSS'' + +```css + * { margin: 0; padding: 0; } /* micro reset */ + +html { font-size: 62.5%; } +body { font-size: 14px; font-size: 1.4rem; } /* =14px */ +h1 { font-size: 24px; font-size: 2.4rem; } /* =24px */ +``` + +* ''Javascript'' + +```javascript +(function(a,b){ + var result = a+b; + return result; +})(10,20) +``` \ No newline at end of file diff --git a/tiddlers/Syntax for Using Brackets.tid b/tiddlers/Syntax for Using Brackets.tid index d59fa1f..9ad9908 100644 --- a/tiddlers/Syntax for Using Brackets.tid +++ b/tiddlers/Syntax for Using Brackets.tid @@ -1,7 +1,7 @@ created: 20190201034157547 creator: Mohammad keywords: brackets syntax -modified: 20190224163834522 +modified: 20190704155017559 modifier: Mohammad responder: Eric Shulman tags: syntax solution diff --git a/tiddlers/TOC Macro and Exclude Filter.json b/tiddlers/TOC Macro and Exclude Filter.json new file mode 100644 index 0000000..292b45c --- /dev/null +++ b/tiddlers/TOC Macro and Exclude Filter.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190110175726801", + "title": "TOC Macro and Exclude Filter", + "text": "The `toc` macro in Tiddlywiki version greater than 5.1.17 does not accept //exclude// attribute. So, it is not possible to exclude some tiddlers say tagged with `ignored` from table of contents.
    {{!!responder}} has introduced a simple hack as below\n\n<<< Mark S\nYou can use the sort argument to sneak in extra, simple requirements:\n\n```\nsort: \"!tag[ignored]sort[title]\"\n```\n<<<\n\n!! Example 1\nThe below script shows a table of contents with `Contents` as the root tag and excludes all tiddlers also tag with `ignored`\n\n```\n
    \n<>\n
    \n```\n\n!! Example 2: Complex case\nThe below script shows a table of contents with `Contents` as the root tag and excludes all tiddlers have in their name `Test`. You can also omit `sort[title]` part.\n\n```\n
    \n<>\n
    \n```\n", + "creator": "Mohammad", + "modified": "20190704155018162", + "modifier": "Mohammad", + "tags": "toc solution", + "type": "text/vnd.tiddlywiki", + "keywords": "toc exclude ", + "responder": "Mark S", + "url": "https://groups.google.com/d/msg/tiddlywiki/AiLokhh70_0/9aYNsJ_QCAAJ" + } +] \ No newline at end of file diff --git a/tiddlers/TOC Macro and Exclude Filter.tid b/tiddlers/TOC Macro and Exclude Filter.tid deleted file mode 100644 index 2bc60fe..0000000 --- a/tiddlers/TOC Macro and Exclude Filter.tid +++ /dev/null @@ -1,38 +0,0 @@ -created: 20190110175726801 -creator: Mohammad -keywords: toc exclude -modified: 20190224163834768 -modifier: Mohammad -responder: Mark S -tags: toc solution -title: TOC Macro and Exclude Filter -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/AiLokhh70_0/9aYNsJ_QCAAJ - -The `toc` macro in Tiddlywiki version greater than 5.1.17 does not accept //exclude// attribute. So, it is not possible to exclude some tiddlers say tagged with `ignored` from table of contents. {{!!responder}} has introduced a simple hack as below - -<<< Mark S -You can use the sort argument to sneak in extra, simple requirements: - -``` -sort: "!tag[ignored]sort[title]" -``` -<<< - -!! Example 1 -The below script shows a table of contents with `Contents` as the root tag and excludes all tiddlers also tag with `ignored` - -``` -
    -<> -
    -``` - -!! Example 2: Complex case -The below script shows a table of contents with `Contents` as the root tag and excludes all tiddlers have in their name `Test`. You can also omit `sort[title]` part. - -``` -
    -<> -
    -``` diff --git a/tiddlers/TW Community Serach.tid b/tiddlers/TW Community Serach.tid index 17d3ad4..9070810 100644 --- a/tiddlers/TW Community Serach.tid +++ b/tiddlers/TW Community Serach.tid @@ -2,11 +2,10 @@ created: 20190121072848267 creator: Mohammad description: Search the tiddlers in community wikis. developer: Erwan Moreau -modified: 20190224163835070 +modified: 20190704155018350 modifier: Mohammad tags: Links title: TW Community Serach type: text/vnd.tiddlywiki url: http://erwanm.github.io/tw-community-search -wiki-name: TW Community Serach - +wiki-name: TW Community Serach \ No newline at end of file diff --git a/tiddlers/TW Hacks.tid b/tiddlers/TW Hacks.tid index 3845380..ed06bb0 100644 --- a/tiddlers/TW Hacks.tid +++ b/tiddlers/TW Hacks.tid @@ -2,11 +2,10 @@ created: 20190121072655407 creator: Mohammad description: Quick Extensions for TiddlyWiki 5 – sometimes they come without much documentation. From hacker to hacker. developer: Thomas Elmiger -modified: 20190224163835061 +modified: 20190704155018344 modifier: Mohammad tags: Links title: TW Hacks type: text/vnd.tiddlywiki url: https://tid.li/tw5/hacks.html -wiki-name: TW Hacks - +wiki-name: TW Hacks \ No newline at end of file diff --git a/tiddlers/TW and Scientific Contents.tid b/tiddlers/TW and Scientific Contents.tid index 1dd4d51..21a8fd9 100644 --- a/tiddlers/TW and Scientific Contents.tid +++ b/tiddlers/TW and Scientific Contents.tid @@ -1,6 +1,6 @@ created: 20181206042923769 creator: Mohammad -modified: 20190224163835197 +modified: 20190704155018212 modifier: Mohammad tags: reading title: TW and Scientific Contents diff --git a/tiddlers/TW and Search URLs.tid b/tiddlers/TW and Search URLs.tid index a84f20f..5ec03e2 100644 --- a/tiddlers/TW and Search URLs.tid +++ b/tiddlers/TW and Search URLs.tid @@ -1,7 +1,7 @@ created: 20181017035336217 creator: Mohammad keywords: search url permaview -modified: 20190224163835089 +modified: 20190704155018206 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/TW and Social Media.tid b/tiddlers/TW and Social Media.tid index 188b7d0..be32976 100644 --- a/tiddlers/TW and Social Media.tid +++ b/tiddlers/TW and Social Media.tid @@ -2,11 +2,10 @@ created: 20190121073104599 creator: Mohammad description: This is a sucess, not a thorough one but a significant one. It is now possible to share the raw content of any tiddler to twitter, reddit or email - and any other social netwoking site that allows you to prefill data in the urls. developer: Rizwan (Riz) Ibnishak -modified: 20190224163835082 +modified: 20190704155018200 modifier: Mohammad tags: Links title: TW and Social Media type: text/vnd.tiddlywiki url: [[Social Networking comes to TW5 |https://ibnishak.github.io/Tesseract/pluginsandmacros/socialmacros/index.html#Social%20Networking%20comes%20to%20TW5]] -wiki-name: Social Network Macros - +wiki-name: Social Network Macros \ No newline at end of file diff --git a/tiddlers/TW as Online Store.tid b/tiddlers/TW as Online Store.tid index 8320c63..3f8e9c3 100644 --- a/tiddlers/TW as Online Store.tid +++ b/tiddlers/TW as Online Store.tid @@ -2,11 +2,10 @@ created: 20181020173627741 creator: Mohammad description: Create online store based on Google drive and Googe table developer: Sini-Kit -modified: 20190224163835076 +modified: 20190704155018358 modifier: Mohammad tags: Links title: TW as Online Store type: text/vnd.tiddlywiki url: https://groups.google.com/d/msg/tiddlywiki/KEjlIoKhiag/Uq8JPUJjCAAJ -wiki-name: Online stores - +wiki-name: Online stores \ No newline at end of file diff --git a/tiddlers/TW widget tutorials.tid b/tiddlers/TW widget tutorials.tid index 2f33004..036bafb 100644 --- a/tiddlers/TW widget tutorials.tid +++ b/tiddlers/TW widget tutorials.tid @@ -1,6 +1,6 @@ created: 20190203154200604 creator: Mohammad -modified: 20190224163836927 +modified: 20190704155018335 modifier: Mohammad tags: task title: TW widget tutorials diff --git a/tiddlers/TW-Admin.tid b/tiddlers/TW-Admin.tid index 3dc163c..fa7a38f 100644 --- a/tiddlers/TW-Admin.tid +++ b/tiddlers/TW-Admin.tid @@ -2,7 +2,7 @@ created: 20190121045829629 creator: Mohammad description: TW Admin is an "administrators panel" presented as a separate browser window, to hide stuff that shouldn't be public. developer: Mat von TWaddle -modified: 20190224163836913 +modified: 20190704155018328 modifier: Mohammad tags: Links title: TW-Admin diff --git a/tiddlers/TW-Book_ Basics-.tid b/tiddlers/TW-Book_ Basics-.tid index 0f457e8..163bbfa 100644 --- a/tiddlers/TW-Book_ Basics-.tid +++ b/tiddlers/TW-Book_ Basics-.tid @@ -1,6 +1,6 @@ created: 20190201092855609 creator: Mohammad -modified: 20190224163836894 +modified: 20190704155018323 modifier: Mohammad tags: basic tw-book title: TW-Book: Basics- diff --git a/tiddlers/TW-Scripts.tid b/tiddlers/TW-Scripts.tid index 56c00d9..3259a86 100644 --- a/tiddlers/TW-Scripts.tid +++ b/tiddlers/TW-Scripts.tid @@ -1,7 +1,7 @@ class: alert-info created: 20190124174516971 creator: Mohammad -modified: 20190224163836877 +modified: 20190704155018316 modifier: Mohammad tags: title: TW-Scripts diff --git a/tiddlers/TW5 Quick Ref.tid b/tiddlers/TW5 Quick Ref.tid index aeb1380..c23be3a 100644 --- a/tiddlers/TW5 Quick Ref.tid +++ b/tiddlers/TW5 Quick Ref.tid @@ -2,11 +2,10 @@ created: 20181129053725051 creator: Mohammad description: Some codes, tutorial, etc developer: Wjam -modified: 20190224163836856 +modified: 20190704155018306 modifier: Mohammad tags: Links title: TW5 Quick Ref type: text/vnd.tiddlywiki url: http://twjam5.tiddlyspot.com/ -wiki-name: TW5 Quick Ref - +wiki-name: TW5 Quick Ref \ No newline at end of file diff --git a/tiddlers/TW5 is Really Two Separate Languages.tid b/tiddlers/TW5 is Really Two Separate Languages.tid index 04ac0ee..a1e41aa 100644 --- a/tiddlers/TW5 is Really Two Separate Languages.tid +++ b/tiddlers/TW5 is Really Two Separate Languages.tid @@ -1,7 +1,7 @@ created: 20181111203753571 creator: Mohammad keywords: tiddlywiki philosophy -modified: 20190224163836862 +modified: 20190704155018311 modifier: Mohammad responder: Jeremy Ruston tags: concept solution diff --git a/tiddlers/TWLight.css b/tiddlers/TWLight.css deleted file mode 100644 index e248aea..0000000 --- a/tiddlers/TWLight.css +++ /dev/null @@ -1,17 +0,0 @@ -/* The customised light style for TiddlyFor syntax highlighthing -(highlight.js style) -Apr 19, 2018 -Mohammad Rahmani -*/ -.hljs-doctag, -.hljs-keyword, -.hljs-formula { - color: #00008C; -} -.hljs-comment{ -font-style:normal; -} -.hljs-keyword, -.hljs-built_in { -font-weight:normal; -} \ No newline at end of file diff --git a/tiddlers/TWLight.css.meta b/tiddlers/TWLight.css.meta deleted file mode 100644 index 1717180..0000000 --- a/tiddlers/TWLight.css.meta +++ /dev/null @@ -1,7 +0,0 @@ -created: 20180419120759504 -creator: Mohammad -modified: 20190224163836833 -modifier: Mohammad -tags: tiddlyfor -title: TWLight -type: text/css diff --git a/tiddlers/TWMinimal.css b/tiddlers/TWMinimal.css deleted file mode 100644 index cc21ef4..0000000 --- a/tiddlers/TWMinimal.css +++ /dev/null @@ -1,71 +0,0 @@ -/* The customised style for TiddlyFor syntax highlighthing -(highlight.js style) -Description: Magula style for highligh.js -Author: Ruslan Keba -Website: http://rukeba.com/ -Version: 1.0 -Date: 2009-01-03 -Music: Aphex Twin / Xtal -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background-color: #f4f4f4; -} - -.hljs, -.hljs-subst { - color: black; -} - -.hljs-string, -.hljs-title, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable { - color: #050; -} - -.hljs-comment, -.hljs-quote { - color: #777; -} - -.hljs-number, -.hljs-regexp, -.hljs-literal, -.hljs-type, -.hljs-link { - color: #800; -} - -.hljs-deletion, -.hljs-meta { - color: #00e; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-doctag, -.hljs-title, -.hljs-section, -.hljs-built_in, -.hljs-tag, -.hljs-name { - font-weight: bold; - color: navy; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/tiddlers/TWMinimal.css.meta b/tiddlers/TWMinimal.css.meta deleted file mode 100644 index aa8d2b3..0000000 --- a/tiddlers/TWMinimal.css.meta +++ /dev/null @@ -1,7 +0,0 @@ -created: 20180419192303845 -creator: Mohammad -modified: 20190224163836828 -modifier: Mohammad -tags: tiddlyfor -title: TWMinimal -type: text/css diff --git a/tiddlers/TWZenburn.css b/tiddlers/TWZenburn.css deleted file mode 100644 index 94d21f3..0000000 --- a/tiddlers/TWZenburn.css +++ /dev/null @@ -1,84 +0,0 @@ -/* -Zenburn style from voldmar.ru (c) Vladimir Epifanov -based on dark.css by Ivan Sagalaev -Modified by: -Mohammad Rahmani -Apr 20, 2018 -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #3f3f3f; - color: #dcdcdc; - font-size: 0.90em; /* smaller font */ -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-tag { - color: #e3ceab; - font-weight: normal; -} - -.hljs-template-tag { - color: #dcdcdc; -} - -.hljs-number { - color: #8cd0d3; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-attribute { - color: #efdcbc; -} - -.hljs-literal { - color: #efefaf; -} - -.hljs-subst { - color: #8f8f8f; -} - -.hljs-title, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-section, -.hljs-type { - color: #efef8f; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link { - color: #dca3a3; -} - -.hljs-deletion, -.hljs-string, -.hljs-built_in, -.hljs-builtin-name { - color: #cc9393; -} - -.hljs-addition, -.hljs-comment, -.hljs-quote, -.hljs-meta { - color: #7f9f7f; - font-style:normal; -} - - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/tiddlers/TWZenburn.css.meta b/tiddlers/TWZenburn.css.meta deleted file mode 100644 index 5d307c3..0000000 --- a/tiddlers/TWZenburn.css.meta +++ /dev/null @@ -1,7 +0,0 @@ -created: 20180419212613568 -creator: Mohammad -modified: 20190224163836822 -modifier: Mohammad -tags: tiddlyfor -title: TWZenburn -type: text/css diff --git a/tiddlers/Table Class by Variable.tid b/tiddlers/Table Class by Variable.tid index ce2a6ad..7d25da5 100644 --- a/tiddlers/Table Class by Variable.tid +++ b/tiddlers/Table Class by Variable.tid @@ -1,7 +1,7 @@ created: 20190131041149873 creator: Mohammad keywords: table variable table-class -modified: 20190224163834516 +modified: 20190704155017545 modifier: Mohammad responder: Mark S and Mohammad tags: table solution diff --git a/tiddlers/Table Tool.tid b/tiddlers/Table Tool.tid index 4dfa642..92223e4 100644 --- a/tiddlers/Table Tool.tid +++ b/tiddlers/Table Tool.tid @@ -1,7 +1,7 @@ created: 20181016022436568 creator: Mohammad keywords: table automatic json -modified: 20190224163834507 +modified: 20190704155017533 modifier: Mohammad responder: Malup tags: table solution diff --git a/tiddlers/Tabs Macro and Tiddlers Transcluding Fields.tid b/tiddlers/Tabs Macro and Tiddlers Transcluding Fields.tid new file mode 100644 index 0000000..99d1a1d --- /dev/null +++ b/tiddlers/Tabs Macro and Tiddlers Transcluding Fields.tid @@ -0,0 +1,31 @@ +created: 20190608170542322 +creator: Mohammad +keywords: tabs template transclude field +modified: 20190704155017527 +modifier: Mohammad +responder: PMario +tags: exmp60 solution +title: Tabs Macro and Tiddlers Transcluding Fields +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/Qi8aOL8jDBg/qy7VGVGWBAAJ + +!! Problem with displaying tiddlers in tabs when they contains transcluded fileds +I have a tiddler that transclude its caption filed using `{{!!caption}}` in the text (body). It correctly pulls the caption field value and everything works as it should. However, when I call the tabs macro in a new tiddler and have it display the original tiddler as a tab, the `{{!!caption}}` reference breaks and appears to reference the tiddler calling the tabs macro. + +* Solution +As described in [[https://tiddlywiki.com/#tabs%20Macro]] when tiddlers are used in ''tabs'' macro, if they contains transclusion of fields or reference to `currentTiddler` variable, these refences wil not work anymore. The solution is to use a template in tabs macro as below + +``` +<$tiddler tiddler=<>> +<$transclude mode="block" /> + +``` + +So the tabs macro should be used like the below + +``` +<> +``` + +!! Example +The tiddler [[Example 60|Example 60: Demo of Tabs Macro with Template]] shows how ''tabs'' macro work with //template// tiddler to correctly displayed the //fields// and `currentTiddler` value. \ No newline at end of file diff --git a/tiddlers/Tag Hierachy and Table of Contents.json b/tiddlers/Tag Hierachy and Table of Contents.json new file mode 100644 index 0000000..6cc76f1 --- /dev/null +++ b/tiddlers/Tag Hierachy and Table of Contents.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190207171551032", + "title": "Tag Hierachy and Table of Contents", + "text": "; How display the tag tree for three levels of tag hierachy?\n: The below code uses three nested `list` widget to show the tag tree up to level 3. This procedure can be used to create table of contents. A customized numbered list is used (ref: [[Tobias Beer|https://tobibeer.github.io/tb5/#Advanced%20Numbered%20Lists]])\n<$macrocall $name=\"wikitext-example-without-html\" \nsrc=\"\"\"
      \n <$list filter=\"[tag[$:/.mr/toc]]\" variable=\"maintag\">\n
    1. \n <$link to=<> ><$text text=<>/>\n
        \n <$list filter=\"[tag]\" variable=\"level1\">\n
      1. \n <$link to=<> ><$text text=<>/>\n
          \n <$list filter=\"[tag]\" variable=\"level2\">\n
        1. \n <$link to=<> ><$text text=<>/>\n
        2. \n \n
        \n
      2. \n \n
      \n
    2. \n \n
    \n\"\"\"/>\n", + "creator": "Mohammad", + "modified": "20190704155017519", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "toc ", + "responder": "Stephan Hradek", + "url": "https://groups.google.com/d/msg/tiddlywiki/8ULQNg7GPog/1tMjtdVyGhUJ" + } +] \ No newline at end of file diff --git a/tiddlers/Tag Hierachy and Table of Contents.tid b/tiddlers/Tag Hierachy and Table of Contents.tid deleted file mode 100644 index f9512ce..0000000 --- a/tiddlers/Tag Hierachy and Table of Contents.tid +++ /dev/null @@ -1,36 +0,0 @@ -created: 20190207171551032 -creator: Mohammad -keywords: toc -modified: 20190224163834495 -modifier: Mohammad -responder: Stephan Hradek -tags: solution -title: Tag Hierachy and Table of Contents -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/8ULQNg7GPog/1tMjtdVyGhUJ - -; How display the tag tree for three levels of tag hierachy? -: The below code uses three nested `list` widget to show the tag tree up to level 3. This procedure can be used to create table of contents. A customized numbered list is used (ref: [[Tobias Beer|https://tobibeer.github.io/tb5/#Advanced%20Numbered%20Lists]]) -<$macrocall $name="wikitext-example-without-html" -src="""
      - <$list filter="[tag[$:/.mr/toc]]" variable="maintag"> -
    1. - <$link to=<> ><$text text=<>/> -
        - <$list filter="[tag]" variable="level1"> -
      1. - <$link to=<> ><$text text=<>/> -
          - <$list filter="[tag]" variable="level2"> -
        1. - <$link to=<> ><$text text=<>/> -
        2. - -
        -
      2. - -
      -
    2. - -
    -"""/> diff --git a/tiddlers/Tags operator.tid b/tiddlers/Tags operator.tid index e5e3c67..76e4008 100644 --- a/tiddlers/Tags operator.tid +++ b/tiddlers/Tags operator.tid @@ -1,7 +1,7 @@ created: 20181008202532680 creator: Mohammad list: -modified: 20190224163834488 +modified: 20190704155017705 modifier: Mohammad tags: $:/_site/tagging operator title: Tags operator diff --git a/tiddlers/TaskManagementDraggableTemplate.tid b/tiddlers/TaskManagementDraggableTemplate.tid index e55d705..2bb77ce 100644 --- a/tiddlers/TaskManagementDraggableTemplate.tid +++ b/tiddlers/TaskManagementDraggableTemplate.tid @@ -1,6 +1,6 @@ created: 20180307153530187 creator: Mohammad -modified: 20190224163834476 +modified: 20190704155017693 modifier: Mohammad title: TaskManagementDraggableTemplate type: text/vnd.tiddlywiki diff --git a/tiddlers/Template and Tiddler Widget.tid b/tiddlers/Template and Tiddler Widget.tid index b22c6d4..905ccd2 100644 --- a/tiddlers/Template and Tiddler Widget.tid +++ b/tiddlers/Template and Tiddler Widget.tid @@ -1,6 +1,6 @@ created: 20180812031606759 creator: Mohammad -modified: 20190224163834469 +modified: 20190704155017684 modifier: Mohammad responder: Jeremy Ruston tags: tiddler solution diff --git a/tiddlers/Template for Displaying Fields in View Mode.tid b/tiddlers/Template for Displaying Fields in View Mode.tid new file mode 100644 index 0000000..782bcef --- /dev/null +++ b/tiddlers/Template for Displaying Fields in View Mode.tid @@ -0,0 +1,12 @@ +created: 20190626142115524 +creator: Mohammad +keywords: template filed view +modified: 20190704155017679 +modifier: Mohammad +responder: A Gloom +tags: solution task +title: Template for Displaying Fields in View Mode +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/fqdQP5RP5sU/HCVmFT6DCgAJ + +<> \ No newline at end of file diff --git a/tiddlers/Template to Show Tagged Tiddlers as a Footer.tid b/tiddlers/Template to Show Tagged Tiddlers as a Footer.tid index 2c232e1..b539b5a 100644 --- a/tiddlers/Template to Show Tagged Tiddlers as a Footer.tid +++ b/tiddlers/Template to Show Tagged Tiddlers as a Footer.tid @@ -1,7 +1,7 @@ created: 20190226105927482 creator: Mohammad keywords: template -modified: 20190406122520657 +modified: 20190704155017674 modifier: Mohammad responder: Magnus, Mohammad tags: template solution @@ -26,4 +26,7 @@ Now every tiddler has been tagged with `Content` will show in its footer a nice If tiddlers have caption, their caption will show instead of title. -<> \ No newline at end of file +<> + +!! More +See the [[viewtemplate/tagging]] in this wiki how displays all tiddlers tagged with the parent. \ No newline at end of file diff --git a/tiddlers/Tesseract.tid b/tiddlers/Tesseract.tid index c1ccfca..405d383 100644 --- a/tiddlers/Tesseract.tid +++ b/tiddlers/Tesseract.tid @@ -2,11 +2,10 @@ created: 20190111161519668 creator: Mohammad description: These are amazing stuff from Riz: plugins, animation, css, svg and much more... developer: Riswan Ibnshak (Riz) -modified: 20190224163834462 +modified: 20190704155017669 modifier: Mohammad tags: Links title: Tesseract type: text/vnd.tiddlywiki url: https://ibnishak.github.io/Tesseract/ -wiki-name: Tesseract - +wiki-name: Tesseract \ No newline at end of file diff --git a/tiddlers/Test Math.tid b/tiddlers/Test Math.tid index 73ec398..a384946 100644 --- a/tiddlers/Test Math.tid +++ b/tiddlers/Test Math.tid @@ -1,6 +1,6 @@ created: 20190208045317652 creator: Mohammad -modified: 20190224163834454 +modified: 20190704155017662 modifier: Mohammad tags: task title: Test Math diff --git a/tiddlers/Test myWideClass only for Body.tid b/tiddlers/Test myWideClass only for Body.tid index 5bec115..6c229ba 100644 --- a/tiddlers/Test myWideClass only for Body.tid +++ b/tiddlers/Test myWideClass only for Body.tid @@ -1,7 +1,7 @@ class: shoutout created: 20181029192152729 creator: Mohammad -modified: 20190224163835049 +modified: 20190704155017648 modifier: Mohammad tags: title: Test myWideClass only for Body diff --git a/tiddlers/Test myWideClass.tid b/tiddlers/Test myWideClass.tid index 4e2efd8..c060941 100644 --- a/tiddlers/Test myWideClass.tid +++ b/tiddlers/Test myWideClass.tid @@ -1,7 +1,7 @@ class: myClass created: 20180729044524866 creator: Mohammad -modified: 20190224163834448 +modified: 20190704155017655 modifier: Mohammad tags: title: Test myWideClass diff --git a/tiddlers/Text Formatting with Macro.tid b/tiddlers/Text Formatting with Macro.tid index 4fb9830..156371d 100644 --- a/tiddlers/Text Formatting with Macro.tid +++ b/tiddlers/Text Formatting with Macro.tid @@ -1,7 +1,7 @@ created: 20180820085115280 creator: Mohammad keywords: macro format text -modified: 20190224163835043 +modified: 20190704155017641 modifier: Mohammad responder: Mark S tags: exmp07 solution diff --git a/tiddlers/The List Field.tid b/tiddlers/The List Field.tid index ff20f78..d3208a2 100644 --- a/tiddlers/The List Field.tid +++ b/tiddlers/The List Field.tid @@ -1,7 +1,7 @@ created: 20181204063445672 creator: Mohammad keywords: list field -modified: 20190224163835030 +modified: 20190704155017924 modifier: Mohammad responder: Eric Schulman tags: list solution diff --git a/tiddlers/The Logic by Set Widget.tid b/tiddlers/The Logic by Set Widget.tid index 0f67f86..9123088 100644 --- a/tiddlers/The Logic by Set Widget.tid +++ b/tiddlers/The Logic by Set Widget.tid @@ -1,7 +1,7 @@ created: 20190331161237135 creator: Mohammad keywords: set widget logic -modified: 20190406122520601 +modified: 20190704155017918 modifier: Mohammad responder: Jeremy Ruston tags: exmp58 solution diff --git a/tiddlers/The Lost Admin.tid b/tiddlers/The Lost Admin.tid index 280d616..396bcfb 100644 --- a/tiddlers/The Lost Admin.tid +++ b/tiddlers/The Lost Admin.tid @@ -2,7 +2,7 @@ created: 20190121170017607 creator: Mohammad description: Test and Example with Tiddlywiki developer: Unknown -modified: 20190224163835024 +modified: 20190704155017912 modifier: Mohammad tags: Links title: The Lost Admin diff --git a/tiddlers/The Table of Contents Macro.tid b/tiddlers/The Table of Contents Macro.tid index ba2e07b..b358ff7 100644 --- a/tiddlers/The Table of Contents Macro.tid +++ b/tiddlers/The Table of Contents Macro.tid @@ -1,6 +1,6 @@ created: 20180718030501393 creator: Mohammad -modified: 20190224163835019 +modified: 20190704155017902 modifier: Mohammad tags: toc title: The Table of Contents Macro diff --git a/tiddlers/The has Operator Behaviour.tid b/tiddlers/The has Operator Behaviour.tid index 84dfbad..df3c222 100644 --- a/tiddlers/The has Operator Behaviour.tid +++ b/tiddlers/The has Operator Behaviour.tid @@ -1,7 +1,7 @@ created: 20190110110927487 creator: Mohammad keywords: has field operator -modified: 20190224163835035 +modified: 20190704155017633 modifier: Mohammad responder: Mohammad tags: operator solution diff --git a/tiddlers/Theming with CSS variables in RGBA.tid b/tiddlers/Theming with CSS variables in RGBA.tid index b6dbac3..9a16ddb 100644 --- a/tiddlers/Theming with CSS variables in RGBA.tid +++ b/tiddlers/Theming with CSS variables in RGBA.tid @@ -2,11 +2,10 @@ created: 20181126055849047 creator: Mohammad description: CSS variables are pretty well-supported nowadays across browsers. The global feature coverage is above 87.5% at the time of writing. developer: Ben Szabo -modified: 20190224163835013 +modified: 20190704155017894 modifier: Mohammad tags: Links title: Theming with CSS variables in RGBA type: text/vnd.tiddlywiki url: https://codepen.io/finnhvman/post/theming-with-css-variables-in-rgba -wiki-name: Theming with CSS variables in RGBA - +wiki-name: Theming with CSS variables in RGBA \ No newline at end of file diff --git a/tiddlers/ThirdFlow Quick Tutorial.tid b/tiddlers/ThirdFlow Quick Tutorial.tid new file mode 100644 index 0000000..14deab9 --- /dev/null +++ b/tiddlers/ThirdFlow Quick Tutorial.tid @@ -0,0 +1,14 @@ +created: 20190405145240808 +creator: Mohammad +modified: 20190704155017882 +modifier: Mohammad +tags: task +title: ThirdFlow Quick Tutorial +type: text/vnd.tiddlywiki + +See + +* https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file +* https://60devs.com/npm-install-specific-version.html +* https://github.com/kookma/TiddlyWikiPluginSkeleton +* https://docs.npmjs.com/cli/install \ No newline at end of file diff --git a/tiddlers/Thomas Elmiger Plugins.tid b/tiddlers/Thomas Elmiger Plugins.tid index e44b6b2..bd802b3 100644 --- a/tiddlers/Thomas Elmiger Plugins.tid +++ b/tiddlers/Thomas Elmiger Plugins.tid @@ -2,11 +2,10 @@ created: 20181105060407816 creator: Mohammad description: Great plugins to improve your workflow, the design or the functionality of your wiki. Completely free and open source. Simple search, DetailsWidget, Harvey Balls, Edit Counters, ... are part of these plugins. developer: Thomas Elmiger -modified: 20190224163835005 +modified: 20190704155017867 modifier: Mohammad tags: Links title: Thomas Elmiger Plugins type: text/vnd.tiddlywiki url: https://tid.li/tw5/plugins.html -wiki-name: Tid.Li Plugins - +wiki-name: Tid.Li Plugins \ No newline at end of file diff --git a/tiddlers/Thumbnails.tid b/tiddlers/Thumbnails.tid index 4f08a87..67042b7 100644 --- a/tiddlers/Thumbnails.tid +++ b/tiddlers/Thumbnails.tid @@ -1,6 +1,6 @@ created: 20180905161718253 creator: Mohammad -modified: 20190224163834998 +modified: 20190704155017859 modifier: Mohammad tags: mywiki title: Thumbnails diff --git a/tiddlers/Tid x1.tid b/tiddlers/Tid x1.tid index cd053c6..425ddab 100644 --- a/tiddlers/Tid x1.tid +++ b/tiddlers/Tid x1.tid @@ -1,6 +1,6 @@ created: 20190204163542089 creator: Mohammad -modified: 20190224163834992 +modified: 20190704155017850 modifier: Mohammad tags: demo example title: Tid x1 diff --git a/tiddlers/Tid x2.tid b/tiddlers/Tid x2.tid index a62b8f4..9db8d7f 100644 --- a/tiddlers/Tid x2.tid +++ b/tiddlers/Tid x2.tid @@ -1,6 +1,6 @@ created: 20190204163552434 creator: Mohammad -modified: 20190224163834985 +modified: 20190704155017840 modifier: Mohammad tags: example title: Tid x2 diff --git a/tiddlers/Tid x3.tid b/tiddlers/Tid x3.tid index d3ba018..5e79150 100644 --- a/tiddlers/Tid x3.tid +++ b/tiddlers/Tid x3.tid @@ -1,6 +1,6 @@ created: 20190204163601942 creator: Mohammad -modified: 20190224163834979 +modified: 20190704155017809 modifier: Mohammad tags: example title: Tid x3 diff --git a/tiddlers/TidA.tid b/tiddlers/TidA.tid new file mode 100644 index 0000000..f2e839a --- /dev/null +++ b/tiddlers/TidA.tid @@ -0,0 +1,9 @@ +created: 20190406202953690 +creator: Mohammad +modified: 20190704155017776 +modifier: Mohammad +tags: +title: TidA +type: text/vnd.tiddlywiki + +This is tid A. \ No newline at end of file diff --git a/tiddlers/TidB.tid b/tiddlers/TidB.tid new file mode 100644 index 0000000..3b55393 --- /dev/null +++ b/tiddlers/TidB.tid @@ -0,0 +1,9 @@ +created: 20190406202458560 +creator: Mohammad +modified: 20190704155017716 +modifier: Mohammad +tags: +title: TidB +type: text/vnd.tiddlywiki + +This is tid A. \ No newline at end of file diff --git a/tiddlers/Tiddler Associated with a Button.tid b/tiddlers/Tiddler Associated with a Button.tid index a34d4c0..e387f18 100644 --- a/tiddlers/Tiddler Associated with a Button.tid +++ b/tiddlers/Tiddler Associated with a Button.tid @@ -1,7 +1,7 @@ created: 20181226152931018 creator: Mohammad keywords: state tiddler UI button -modified: 20190224163834972 +modified: 20190704155017710 modifier: Mohammad responder: Jeremy Ruston tags: state solution diff --git a/tiddlers/Tiddler Count to Dictate HTML Table Rowspan.tid b/tiddlers/Tiddler Count to Dictate HTML Table Rowspan.tid index 572d4ba..0b3126c 100644 --- a/tiddlers/Tiddler Count to Dictate HTML Table Rowspan.tid +++ b/tiddlers/Tiddler Count to Dictate HTML Table Rowspan.tid @@ -1,7 +1,7 @@ created: 20180816202941973 creator: Mohammad keywords: count table html tag rowspan -modified: 20190224163834965 +modified: 20190704155018001 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Tiddler TOC Demo.tid b/tiddlers/Tiddler TOC Demo.tid index daed31f..2ed0963 100644 --- a/tiddlers/Tiddler TOC Demo.tid +++ b/tiddlers/Tiddler TOC Demo.tid @@ -1,6 +1,6 @@ created: 20181126055112018 creator: Mohammad -modified: 20190224163834950 +modified: 20190704155017985 modifier: Mohammad tags: tidtoc title: Tiddler TOC Demo diff --git a/tiddlers/Tiddler TOC.tid b/tiddlers/Tiddler TOC.tid index fef46bf..d83a0ff 100644 --- a/tiddlers/Tiddler TOC.tid +++ b/tiddlers/Tiddler TOC.tid @@ -1,7 +1,7 @@ created: 20181126191541064 creator: Mohammad keywords: toc tiddler -modified: 20190224163834957 +modified: 20190704155017994 modifier: Mohammad responder: Tobias Beer tags: tidtoc solution diff --git a/tiddlers/Tiddler Toolbar Icon.tid b/tiddlers/Tiddler Toolbar Icon.tid index 6a1d574..962a2f9 100644 --- a/tiddlers/Tiddler Toolbar Icon.tid +++ b/tiddlers/Tiddler Toolbar Icon.tid @@ -1,7 +1,7 @@ created: 20181031034457789 creator: Mohammad keywords: icon size toolbar -modified: 20190224163834944 +modified: 20190704155017979 modifier: Mohammad responder: Thomas Elmiger tags: solution diff --git a/tiddlers/Tiddler-A.tid b/tiddlers/Tiddler-A.tid index 22676ca..aacad4b 100644 --- a/tiddlers/Tiddler-A.tid +++ b/tiddlers/Tiddler-A.tid @@ -1,6 +1,6 @@ created: 20180602030313866 creator: Mohammad -modified: 20190224163834939 +modified: 20190704155017975 modifier: Mohammad note: demo page: 01 diff --git a/tiddlers/Tiddler-B.tid b/tiddlers/Tiddler-B.tid index 64a7929..25bf932 100644 --- a/tiddlers/Tiddler-B.tid +++ b/tiddlers/Tiddler-B.tid @@ -1,6 +1,6 @@ created: 20180602030415306 creator: Mohammad -modified: 20190224163834934 +modified: 20190704155017971 modifier: Mohammad page: 02 tags: learning diff --git a/tiddlers/Tiddler-C.tid b/tiddlers/Tiddler-C.tid index add26d2..483865b 100644 --- a/tiddlers/Tiddler-C.tid +++ b/tiddlers/Tiddler-C.tid @@ -1,6 +1,6 @@ created: 20180602030641166 creator: Mohammad -modified: 20190224163834928 +modified: 20190704155017965 modifier: Mohammad note: demo page: 03 diff --git a/tiddlers/Tiddler-D.tid b/tiddlers/Tiddler-D.tid index 6fb3171..5f6ca73 100644 --- a/tiddlers/Tiddler-D.tid +++ b/tiddlers/Tiddler-D.tid @@ -1,6 +1,6 @@ created: 20180602033057515 creator: Mohammad -modified: 20190224163834922 +modified: 20190704155017960 modifier: Mohammad note: demo page: 04 diff --git a/tiddlers/Tiddler01.ext.tid b/tiddlers/Tiddler01.ext.tid index 93c1015..9b3db77 100644 --- a/tiddlers/Tiddler01.ext.tid +++ b/tiddlers/Tiddler01.ext.tid @@ -1,5 +1,5 @@ created: 20180816081106977 -modified: 20190224163834916 +modified: 20190704155017954 note: This tiddler is part of exmp06, do not delete tags: exmp06 title: Tiddler01.ext diff --git a/tiddlers/Tiddler02.ext.tid b/tiddlers/Tiddler02.ext.tid index 0579484..5c443c4 100644 --- a/tiddlers/Tiddler02.ext.tid +++ b/tiddlers/Tiddler02.ext.tid @@ -1,5 +1,5 @@ created: 20180816081127273 -modified: 20190224163834906 +modified: 20190704155017949 note: This tiddler is part of exmp06, do not delete tags: exmp06 title: Tiddler02.ext diff --git a/tiddlers/TiddlerBox_ A Tiddler Commander.tid b/tiddlers/TiddlerBox_ A Tiddler Commander.tid index 1d5c822..1b365dd 100644 --- a/tiddlers/TiddlerBox_ A Tiddler Commander.tid +++ b/tiddlers/TiddlerBox_ A Tiddler Commander.tid @@ -1,6 +1,6 @@ created: 20190211154235793 creator: Mohammad -modified: 20190224163834899 +modified: 20190704155017942 modifier: Mohammad tags: zorange task idea title: TiddlerBox: A Tiddler Commander diff --git a/tiddlers/TiddlyWiki Tips and Tricks.tid b/tiddlers/TiddlyWiki Tips and Tricks.tid index 492f474..b4b27e6 100644 --- a/tiddlers/TiddlyWiki Tips and Tricks.tid +++ b/tiddlers/TiddlyWiki Tips and Tricks.tid @@ -1,6 +1,6 @@ created: 20180414121411619 creator: Mohammad -modified: 20190224163834842 +modified: 20190704155018073 modifier: Mohammad tags: kookma tutorial title: TiddlyWiki Tips and Tricks diff --git a/tiddlers/TiddlyWiki.tid b/tiddlers/TiddlyWiki.tid index 8078f83..3f83df8 100644 --- a/tiddlers/TiddlyWiki.tid +++ b/tiddlers/TiddlyWiki.tid @@ -1,6 +1,6 @@ created: 20141122093610703 creator: Tobias Beer -modified: 20190224163834885 +modified: 20190704155018020 modifier: Mohammad tags: title: TiddlyWiki diff --git a/tiddlers/TiddlyWikiPluginSkeleton_ Creating New Plugin.tid b/tiddlers/TiddlyWikiPluginSkeleton_ Creating New Plugin.tid new file mode 100644 index 0000000..558ec42 --- /dev/null +++ b/tiddlers/TiddlyWikiPluginSkeleton_ Creating New Plugin.tid @@ -0,0 +1,33 @@ +created: 20190613081720725 +creator: Mohammad +keywords: nodejs plugin thirdflow +modified: 20190704155018060 +modifier: Mohammad +tags: nodejs +title: TiddlyWikiPluginSkeleton: Creating New Plugin +type: text/vnd.tiddlywiki + +The below instruction shows how simply use Node.js for creating new plugin. It uses Thirdflow plugin from TheODive. + +! Set Up +# Clone or download TiddlyWikiPluginSkeleton from (https://github.com/TheDiveO/TiddlyWikiPluginSkeleton). + +# install the required tools +#* run `npm install` to install the required TiddlyWiki5 core, as well as the `ThirdFlow plugin` from the NPM registry. +#* OR alternatively use the customised TiddlyWikiPluginSkeleton version by Mohammad (@kookma) +#** The customized version does not need redundant installation of TW core +#** The customized version has the `ThirdFlow plugin` installed + +! Develop a new plugin +# Make a copy of `TiddlyWikiPluginSkeleton` from step 2 in your folder of choice +# Open command window in `TiddlyWikiPluginSkeleton` folder +# issue the `npm run develop` command +# next, navigate to http://localhost:8080 in your web browser. +# follow the instructions given in the "Plugin Kickstarter" to create your plugin. +# work on your plugin ... you can freely mix developing things inside the web browser as well as outside the browser using a standalone editor. + +Don't forget to stop and then restart $ npm run develop after you've made changes to TiddlyWiki files outside your web browser. + +! Release the new plugin +# to control which files to release, visit your TiddlyWiki's `$:/ControlPanel` and go to the ''ThirdFlow'' tab. Then click on the subtab named ''Release''. Follow the instructions given there. Please note that you can develop multiple plugins simultaneously from the same development TiddlyWiki. +# when you're ready to release, simply run `npm run release` to create the release file(s) in `editions/release/output`. Rinse, then repeat as necessary. \ No newline at end of file diff --git a/tiddlers/Tiddlyfor.tid b/tiddlers/Tiddlyfor.tid index 9d1466f..7d1b664 100644 --- a/tiddlers/Tiddlyfor.tid +++ b/tiddlers/Tiddlyfor.tid @@ -1,6 +1,6 @@ created: 20180905161625090 creator: Mohammad -modified: 20190224163834894 +modified: 20190704155017930 modifier: Mohammad tags: mywiki title: Tiddlyfor diff --git a/tiddlers/Tiddlyshow.tid b/tiddlers/Tiddlyshow.tid index 78defc3..425b087 100644 --- a/tiddlers/Tiddlyshow.tid +++ b/tiddlers/Tiddlyshow.tid @@ -1,6 +1,6 @@ created: 20180905161601227 creator: Mohammad -modified: 20190224163834890 +modified: 20190704155018026 modifier: Mohammad tags: mywiki title: Tiddlyshow diff --git a/tiddlers/Tiddlywiki 5 Adventures.tid b/tiddlers/Tiddlywiki 5 Adventures.tid index d217ce2..7ac2ed2 100644 --- a/tiddlers/Tiddlywiki 5 Adventures.tid +++ b/tiddlers/Tiddlywiki 5 Adventures.tid @@ -2,7 +2,7 @@ created: 20190201090032840 creator: Mohammad description: This is the a resource of plugins develope by {{!!developer}} and called My Adventures. developer: Andrew Harrison -modified: 20190224163834880 +modified: 20190704155018014 modifier: Mohammad tags: Links title: Tiddlywiki 5 Adventures diff --git a/tiddlers/Tiddlywiki CSS Prefixes.json b/tiddlers/Tiddlywiki CSS Prefixes.json new file mode 100644 index 0000000..5c7b1c3 --- /dev/null +++ b/tiddlers/Tiddlywiki CSS Prefixes.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190331101555996", + "title": "Tiddlywiki CSS Prefixes", + "text": "About CSS prefixes: TW uses `tc-`, `tv-`, `tm-` and `th-` prefixes for different things.\n\n* tc- tw class\n* tv- tw variable\n* tm- tw message\n* th- tw hook", + "creator": "Mohammad", + "modified": "20190704155018110", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "css ", + "responder": "Mario Pietsch", + "url": "" + } +] \ No newline at end of file diff --git a/tiddlers/Tiddlywiki CSS Prefixes.tid b/tiddlers/Tiddlywiki CSS Prefixes.tid deleted file mode 100644 index 3fb82a1..0000000 --- a/tiddlers/Tiddlywiki CSS Prefixes.tid +++ /dev/null @@ -1,17 +0,0 @@ -created: 20190331101555996 -creator: Mohammad -keywords: css -modified: 20190406122520920 -modifier: Mohammad -responder: Mario Pietsch -tags: solution -title: Tiddlywiki CSS Prefixes -type: text/vnd.tiddlywiki -url: - -About CSS prefixes: TW uses `tc-`, `tv-`, `tm-` and `th-` prefixes for different things. - -* tc- tw class -* tv- tw variable -* tm- tw message -* th- tw hook \ No newline at end of file diff --git a/tiddlers/Tiddlywiki Favicon.tid b/tiddlers/Tiddlywiki Favicon.tid index e29e4cd..7c09dc0 100644 --- a/tiddlers/Tiddlywiki Favicon.tid +++ b/tiddlers/Tiddlywiki Favicon.tid @@ -1,7 +1,7 @@ created: 20181214161235108 creator: Mohammad keywords: favicon png sbg jpg ico -modified: 20190224163834863 +modified: 20190704155018103 modifier: Mohammad responder: Jed Carty tags: solution diff --git a/tiddlers/Tiddlywiki Plugins Links.tid b/tiddlers/Tiddlywiki Plugins Links.tid index 956e693..500565a 100644 --- a/tiddlers/Tiddlywiki Plugins Links.tid +++ b/tiddlers/Tiddlywiki Plugins Links.tid @@ -1,6 +1,6 @@ created: 20180606124138559 creator: Mohammad -modified: 20190224163834848 +modified: 20190704155018079 modifier: Mohammad tags: reading title: Tiddlywiki Plugins Links diff --git a/tiddlers/Tiddlywiki and GitHub Pages.tid b/tiddlers/Tiddlywiki and GitHub Pages.tid new file mode 100644 index 0000000..af214c1 --- /dev/null +++ b/tiddlers/Tiddlywiki and GitHub Pages.tid @@ -0,0 +1,13 @@ +created: 20190404200706400 +creator: Mohammad +description: Create website with Tiddlywiki and GitHub pages +developer: Mohammad +modified: 20190704155018007 +modifier: Mohammad +tags: Links +title: Tiddlywiki and GitHub Pages +type: text/vnd.tiddlywiki +url: https://kookma.github.io/Tiddlywiki-and-GitHub-Pages/ +wiki-name: Tiddlywiki-and-GitHub-Pages + +See also: [[Tiddlywiki-Github-Pages-Travis-CI]] \ No newline at end of file diff --git a/tiddlers/Tiddlywiki in Open Sourse.json b/tiddlers/Tiddlywiki in Open Sourse.json new file mode 100644 index 0000000..6eab35b --- /dev/null +++ b/tiddlers/Tiddlywiki in Open Sourse.json @@ -0,0 +1,15 @@ +[ + { + "created": "20190218154538095", + "title": "Tiddlywiki in Open Sourse", + "text": "''Get started and organized with TiddlyWiki''\n\nAn article by: ''Scott Nesbitt''\n\nThis is a white paper on Tiddlywiki and its application. \n\n\nRef: [[opensource.com|https://opensource.com/article/19/2/tiddlywiki]]\n", + "creator": "Mohammad", + "modified": "20190704155018096", + "modifier": "Mohammad", + "tags": "solution", + "type": "text/vnd.tiddlywiki", + "keywords": "tiddlywiki article ", + "responder": "BTC", + "url": "https://groups.google.com/d/msg/tiddlywiki/UCd7GeQFXdY/SWNWneIYBQAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Tiddlywiki in Open Sourse.tid b/tiddlers/Tiddlywiki in Open Sourse.tid deleted file mode 100644 index 0c2d5c5..0000000 --- a/tiddlers/Tiddlywiki in Open Sourse.tid +++ /dev/null @@ -1,19 +0,0 @@ -created: 20190218154538095 -creator: Mohammad -keywords: tiddlywiki article -modified: 20190224163834855 -modifier: Mohammad -responder: BTC -tags: solution -title: Tiddlywiki in Open Sourse -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/UCd7GeQFXdY/SWNWneIYBQAJ - -''Get started and organized with TiddlyWiki'' - -An article by: ''Scott Nesbitt'' - -This is a white paper on Tiddlywiki and its application. - - -Ref: [[opensource.com|https://opensource.com/article/19/2/tiddlywiki]] diff --git a/tiddlers/Tiddlywiki in-built CSS Classes.tid b/tiddlers/Tiddlywiki in-built CSS Classes.tid new file mode 100644 index 0000000..5889dde --- /dev/null +++ b/tiddlers/Tiddlywiki in-built CSS Classes.tid @@ -0,0 +1,12 @@ +created: 20190517194405798 +creator: Mohammad +keywords: +modified: 20190704155018088 +modifier: Mohammad +responder: Mark S. +tags: solution +title: Tiddlywiki in-built CSS Classes +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/GivhuNyGPt8/9bywOTScAAAJ + +<> \ No newline at end of file diff --git a/tiddlers/Tiddlywiki-Github-Pages-Travis-CI.tid b/tiddlers/Tiddlywiki-Github-Pages-Travis-CI.tid new file mode 100644 index 0000000..8446c74 --- /dev/null +++ b/tiddlers/Tiddlywiki-Github-Pages-Travis-CI.tid @@ -0,0 +1,13 @@ +created: 20190404200920757 +creator: Mohammad +description: This wiki shows how to set up websites hosted on GitHub Pages using Travis-CI and Tiddlywiki 5 on Node.js +developer: Mohammad +modified: 20190704155018065 +modifier: Mohammad +tags: Links +title: Tiddlywiki-Github-Pages-Travis-CI +type: text/vnd.tiddlywiki +url: https://kookma.github.io/Tiddlywiki-Github-Pages-Travis-CI/ +wiki-name: Tiddlywiki-Github-Pages-Travis-CI + +See also: [[Tiddlywiki and GitHub Pages]] \ No newline at end of file diff --git a/tiddlers/Timimi and Snapshot.tid b/tiddlers/Timimi and Snapshot.tid index 2b29ac4..ba4fa81 100644 --- a/tiddlers/Timimi and Snapshot.tid +++ b/tiddlers/Timimi and Snapshot.tid @@ -1,7 +1,7 @@ created: 20180923164845843 creator: Mohammad keywords: timimi save snapshot -modified: 20190224163834835 +modified: 20190704155018055 modifier: Mohammad responder: Rizwan Ibnishak tags: solution diff --git a/tiddlers/tinka/Tinka Basics.tid b/tiddlers/Tinka Basics.tid similarity index 97% rename from tiddlers/tinka/Tinka Basics.tid rename to tiddlers/Tinka Basics.tid index 4e898c6..3be705e 100644 --- a/tiddlers/tinka/Tinka Basics.tid +++ b/tiddlers/Tinka Basics.tid @@ -1,7 +1,7 @@ caption: Basics created: 20181006040922470 creator: Mohammad -modified: 20190224163834819 +modified: 20190704155018044 modifier: Mohammad tags: tinka title: Tinka Basics diff --git a/tiddlers/tinka/Tinka Introduction.tid b/tiddlers/Tinka Introduction.tid similarity index 92% rename from tiddlers/tinka/Tinka Introduction.tid rename to tiddlers/Tinka Introduction.tid index 48085a3..76b7a3c 100644 --- a/tiddlers/tinka/Tinka Introduction.tid +++ b/tiddlers/Tinka Introduction.tid @@ -1,7 +1,7 @@ caption: Intro created: 20150429192209932 creator: Mohammad -modified: 20190224163834811 +modified: 20190704155018038 modifier: Mohammad tags: tinka title: Tinka Introduction diff --git a/tiddlers/tinka/Tinka Readme.tid b/tiddlers/Tinka Readme.tid similarity index 97% rename from tiddlers/tinka/Tinka Readme.tid rename to tiddlers/Tinka Readme.tid index 63d287e..94812e5 100644 --- a/tiddlers/tinka/Tinka Readme.tid +++ b/tiddlers/Tinka Readme.tid @@ -1,7 +1,7 @@ caption: Readme created: 20181006060938325 creator: Mohammad -modified: 20190224163834802 +modified: 20190704155018032 modifier: Mohammad tags: tinka title: Tinka Readme diff --git a/tiddlers/Tips_ Advanced Search with Search Operator.tid b/tiddlers/Tips_ Advanced Search with Search Operator.tid index 0d9225c..ed881f4 100644 --- a/tiddlers/Tips_ Advanced Search with Search Operator.tid +++ b/tiddlers/Tips_ Advanced Search with Search Operator.tid @@ -1,7 +1,7 @@ created: 20190131141144564 creator: Mohammad keywords: search filter -modified: 20190224163834796 +modified: 20190704155018193 modifier: Mohammad responder: Mohammad tags: search solution diff --git a/tiddlers/To be discussed and added.tid b/tiddlers/To be discussed and added.tid index 20a992b..d6844f8 100644 --- a/tiddlers/To be discussed and added.tid +++ b/tiddlers/To be discussed and added.tid @@ -1,6 +1,6 @@ created: 20181020184912225 creator: Mohammad -modified: 20190224163834790 +modified: 20190704155018184 modifier: Mohammad tags: task title: To be discussed and added diff --git a/tiddlers/ToDos.tid b/tiddlers/ToDos.tid index a669833..408b6a2 100644 --- a/tiddlers/ToDos.tid +++ b/tiddlers/ToDos.tid @@ -1,6 +1,6 @@ created: 20180615032251583 creator: Mohammad -modified: 20190316114921064 +modified: 20190704155018156 modifier: Mohammad tags: $:/tags/SideBar task done title: ToDos diff --git a/tiddlers/Tobias Beer Plugins.tid b/tiddlers/Tobias Beer Plugins.tid index fe4f336..00813b7 100644 --- a/tiddlers/Tobias Beer Plugins.tid +++ b/tiddlers/Tobias Beer Plugins.tid @@ -2,11 +2,10 @@ created: 20190315194849025 creator: Mohammad description: This wiki provides the documentation for all TiddlyWiki plugins by Tobias Beer developer: Tobias Beer -modified: 20190406122521388 +modified: 20190704155018174 modifier: Mohammad tags: Links title: Tobias Beer Plugins type: text/vnd.tiddlywiki url: https://tobibeer.github.io/tw5-plugins -wiki-name: Tobias Beer Plugins - +wiki-name: Tobias Beer Plugins \ No newline at end of file diff --git a/tiddlers/Tobias Beer.tid b/tiddlers/Tobias Beer.tid index 0d06890..d77957b 100644 --- a/tiddlers/Tobias Beer.tid +++ b/tiddlers/Tobias Beer.tid @@ -1,6 +1,6 @@ created: 20180618023600486 creator: Mohammad -modified: 20190224163834783 +modified: 20190704155018178 modifier: Mohammad tags: reading title: Tobias Beer diff --git a/tiddlers/Toggle Admin.tid b/tiddlers/Toggle Admin.tid index dbf565b..52ffb67 100644 --- a/tiddlers/Toggle Admin.tid +++ b/tiddlers/Toggle Admin.tid @@ -2,7 +2,7 @@ created: 20190121045936323 creator: Mohammad description: Allows you to easily remove "admin controls" from your TiddlyWiki, and to add them again developer: Unknown -modified: 20190224163834753 +modified: 20190704155018148 modifier: Mohammad tags: admin Links title: Toggle Admin diff --git a/tiddlers/Toggle Macro.tid b/tiddlers/Toggle Macro.tid index fcbfd4b..3872b7b 100644 --- a/tiddlers/Toggle Macro.tid +++ b/tiddlers/Toggle Macro.tid @@ -2,11 +2,10 @@ created: 20190121165059704 creator: Mohammad description: Toggle is a little macro to set a state value somewhere. It is very simple to use, e.g to apply pretty checkbox icons. developer: Mat von TWaddle -modified: 20190224163836773 +modified: 20190704155018141 modifier: Mohammad tags: Links title: Toggle Macro type: text/vnd.tiddlywiki url: http://toggle.tiddlyspot.com/ -wiki-name: Toggle macro - +wiki-name: Toggle macro \ No newline at end of file diff --git a/tiddlers/Tools for Exploring the Internals of TW.tid b/tiddlers/Tools for Exploring the Internals of TW.tid index 43484d4..69e8b0c 100644 --- a/tiddlers/Tools for Exploring the Internals of TW.tid +++ b/tiddlers/Tools for Exploring the Internals of TW.tid @@ -1,7 +1,7 @@ caption: Exploring the Internals of TW created: 20180907041552085 creator: Mohammad -modified: 20190224163836598 +modified: 20190704155018128 modifier: Mohammad tags: tools title: Tools for Exploring the Internals of TW diff --git a/tiddlers/Tooltip-CSS.css.meta b/tiddlers/Tooltip-CSS.css.meta index 49a92ca..70ff4f7 100644 --- a/tiddlers/Tooltip-CSS.css.meta +++ b/tiddlers/Tooltip-CSS.css.meta @@ -1,5 +1,5 @@ created: 20180728144429505 -modified: 20190224163836589 +modified: 20190704155018119 tags: $:/tags/Stylesheet tooltip title: Tooltip-CSS -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/Tooltip-Example 1.tid b/tiddlers/Tooltip-Example 1.tid index c96f7a1..ca6b50d 100644 --- a/tiddlers/Tooltip-Example 1.tid +++ b/tiddlers/Tooltip-Example 1.tid @@ -1,5 +1,5 @@ created: 20180728144237873 -modified: 20190224163836580 +modified: 20190704155018115 tags: tooltip title: Tooltip-Example 1 type: text/vnd.tiddlywiki diff --git a/tiddlers/Tooltip-Example 2.tid b/tiddlers/Tooltip-Example 2.tid index 60b233d..9ef3290 100644 --- a/tiddlers/Tooltip-Example 2.tid +++ b/tiddlers/Tooltip-Example 2.tid @@ -1,6 +1,6 @@ created: 20180728144522443 creator: Mohammad -modified: 20190224163836574 +modified: 20190704155018271 modifier: Mohammad showls: no tags: diff --git a/tiddlers/Tooltip.tid b/tiddlers/Tooltip.tid index afc000e..91fa769 100644 --- a/tiddlers/Tooltip.tid +++ b/tiddlers/Tooltip.tid @@ -1,6 +1,6 @@ created: 20180808022425583 creator: Mohammad -modified: 20190224163836593 +modified: 20190704155018124 modifier: Mohammad tags: reading title: Tooltip diff --git a/tiddlers/Top Level Tiddlers.tid b/tiddlers/Top Level Tiddlers.tid index 884614f..a0c714d 100644 --- a/tiddlers/Top Level Tiddlers.tid +++ b/tiddlers/Top Level Tiddlers.tid @@ -1,7 +1,7 @@ created: 20181220140205216 creator: Mohammad keywords: programming layout top-level template -modified: 20190224163836568 +modified: 20190704155018265 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Transclude Tiddlers Into Table.tid b/tiddlers/Transclude Tiddlers Into Table.tid index 4a0c913..69f9906 100644 --- a/tiddlers/Transclude Tiddlers Into Table.tid +++ b/tiddlers/Transclude Tiddlers Into Table.tid @@ -1,7 +1,7 @@ created: 20181007135336475 creator: Mohammad keywords: transclude table dynamic-table -modified: 20190224163836517 +modified: 20190704155018251 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/Transclude a Missing Tiddler.tid b/tiddlers/Transclude a Missing Tiddler.tid index 429ba01..0d75cb6 100644 --- a/tiddlers/Transclude a Missing Tiddler.tid +++ b/tiddlers/Transclude a Missing Tiddler.tid @@ -1,7 +1,7 @@ created: 20181018133106529 creator: Mohammad keywords: transclude missing template -modified: 20190224163836560 +modified: 20190704155018260 modifier: Mohammad responder: BTC tags: solution diff --git a/tiddlers/Transclude the Content of Tiddler into a Live Editor.tid b/tiddlers/Transclude the Content of Tiddler into a Live Editor.tid index 5df30df..03c3f81 100644 --- a/tiddlers/Transclude the Content of Tiddler into a Live Editor.tid +++ b/tiddlers/Transclude the Content of Tiddler into a Live Editor.tid @@ -1,7 +1,7 @@ created: 20190324034715813 creator: Mohammad keywords: live editor text-area -modified: 20190406122521263 +modified: 20190704155018256 modifier: Mohammad responder: Eric Shulman tags: exmp55 solution diff --git a/tiddlers/Transcluded Codeblock.json b/tiddlers/Transcluded Codeblock.json new file mode 100644 index 0000000..fb89eb5 --- /dev/null +++ b/tiddlers/Transcluded Codeblock.json @@ -0,0 +1,15 @@ +[ + { + "created": "20181028045624062", + "title": "Transcluded Codeblock", + "text": "How to transclude a tiddler tagged with `$:/tags/highlight/some-language` and highlight it using the syntax highlighter in TW?\n\nTW uses the `Highlight.js` plugin to do it. To address this case:\n\n<<<\nA macro is needed to get the tiddler containing the code and corectly tagged to transclude it as a codeblock with correct language\n{{Macro in Exmp 12}}\n[[Macro in Exmp 12]]\n<<<\n\nNow you can use `<>` to transclude the tiddler as a codeblock highlighted in correct language\n\n<>\n\n* Exampel\nThe tiddler [[Sample Code in Exmp 12]] contains fortran code and is tagged with `$:/tags/highlight/fortran`. To transclude it in highlighted form inside this tiddler do as below\n\n<$macrocall $name=\"wikitext-example-without-html\" \nsrc=\"\"\"<>\n\"\"\"/>", + "creator": "Mohammad", + "modified": "20190704155018246", + "modifier": "Mohammad", + "tags": "exmp12 solution", + "type": "text/vnd.tiddlywiki", + "keywords": "code highlight ", + "responder": "BTC", + "url": "https://groups.google.com/d/msg/tiddlywiki/kfGg6VBDYyI/2lH5YhU6CQAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Transcluded Codeblock.tid b/tiddlers/Transcluded Codeblock.tid deleted file mode 100644 index 2a17fea..0000000 --- a/tiddlers/Transcluded Codeblock.tid +++ /dev/null @@ -1,31 +0,0 @@ -created: 20181028045624062 -creator: Mohammad -keywords: code highlight -modified: 20190224163836510 -modifier: Mohammad -responder: BTC -tags: exmp12 solution -title: Transcluded Codeblock -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/kfGg6VBDYyI/2lH5YhU6CQAJ - -How to transclude a tiddler tagged with `$:/tags/highlight/some-language` and highlight it using the syntax highlighter in TW? - -TW uses the `Highlight.js` plugin to do it. To address this case: - -<<< -A macro is needed to get the tiddler containing the code and corectly tagged to transclude it as a codeblock with correct language -{{Macro in Exmp 12}} -[[Macro in Exmp 12]] -<<< - -Now you can use `<>` to transclude the tiddler as a codeblock highlighted in correct language - -<> - -* Exampel -The tiddler [[Sample Code in Exmp 12]] contains fortran code and is tagged with `$:/tags/highlight/fortran`. To transclude it in highlighted form inside this tiddler do as below - -<$macrocall $name="wikitext-example-without-html" -src="""<> -"""/> \ No newline at end of file diff --git a/tiddlers/Transclusion by Template.tid b/tiddlers/Transclusion by Template.tid index 53e9c7c..cd1f3a5 100644 --- a/tiddlers/Transclusion by Template.tid +++ b/tiddlers/Transclusion by Template.tid @@ -1,7 +1,7 @@ created: 20181018140354871 creator: Mohammad keywords: transclusion template -modified: 20190224163836492 +modified: 20190704155018229 modifier: Mohammad responder: Tobias Beer tags: exmp08 solution diff --git a/tiddlers/Transclusion.tid b/tiddlers/Transclusion.tid index 1fd3e9e..420debc 100644 --- a/tiddlers/Transclusion.tid +++ b/tiddlers/Transclusion.tid @@ -1,11 +1,3 @@ -created: 20180503084320869 -creator: Mohammad -modified: 20190224163836498 -modifier: Mohammad -tags: -title: Transclusion -type: application/x-tiddler - !! Example One ``` diff --git a/tiddlers/Transclusion.tid.meta b/tiddlers/Transclusion.tid.meta new file mode 100644 index 0000000..4d852d2 --- /dev/null +++ b/tiddlers/Transclusion.tid.meta @@ -0,0 +1,7 @@ +created: 20180503084320869 +creator: Mohammad +modified: 20190704155018237 +modifier: Mohammad +tags: +title: Transclusion +type: application/x-tiddler \ No newline at end of file diff --git a/tiddlers/Transformation Transclude Tiddler.tid b/tiddlers/Transformation Transclude Tiddler.tid index fee650c..a1f9e57 100644 --- a/tiddlers/Transformation Transclude Tiddler.tid +++ b/tiddlers/Transformation Transclude Tiddler.tid @@ -1,5 +1,5 @@ created: 20180801072431102 -modified: 20190224163836482 +modified: 20190704155018224 tags: title: Transformation Transclude Tiddler type: text/vnd.tiddlywiki diff --git a/tiddlers/Travis Configuration File.tid b/tiddlers/Travis Configuration File.tid deleted file mode 100644 index 51acc28..0000000 --- a/tiddlers/Travis Configuration File.tid +++ /dev/null @@ -1,50 +0,0 @@ -created: 20190403203118382 -creator: Mohammad -modified: 20190406122521220 -modifier: Mohammad -tags: travis -title: Travis Configuration File -type: text/vnd.tiddlywiki - -# In order for Travis CI to build your project, you'll need to add a `.travis.yml` configuration file to the root directory of your repository. -# If a `.travis.yml` is not in your repository, or is not valid YAML, Travis CI will ignore it. - -To setup GitHub and Travis-CI to generate GitHub pages from individual tillders use the below configuration file. - -* Create a text file -* Name it as `.travis.yml` -* Put the below code as its content -* Save and add to the GitHub repository root directory - -<$set name=".travis.yml" value=""" -language: node_js -node_js: - - "11" -dist: trusty -sudo: false - -branches: - only: - - master - -install: - - git clone --depth 1 https://github.com/Jermolene/TiddlyWiki5.git - - cd TiddlyWiki5 - - npm link - - cd .. - -script: - - tiddlywiki --verbose --build index - -deploy: - provider: pages - skip_cleanup: true - github_token: $GITHUB_TOKEN # Set in the settings page of your repository, as a secure variable - local_dir: output - on: - branch: master"""> -<$macrocall $name=copy-to-clipboard-above-right src=<<.travis.yml>> /> -
    <<.travis.yml>>
    - - -<> \ No newline at end of file diff --git a/tiddlers/Tweak Sidebar Background.tid b/tiddlers/Tweak Sidebar Background.tid index 3ed830e..bfc4808 100644 --- a/tiddlers/Tweak Sidebar Background.tid +++ b/tiddlers/Tweak Sidebar Background.tid @@ -1,7 +1,7 @@ created: 20181028041021758 creator: Mohammad keywords: dynamic css sidebar -modified: 20190224163836839 +modified: 20190704155018299 modifier: Mohammad responder: Abraham Samma tags: css solution diff --git a/tiddlers/Undraggable Images.tid b/tiddlers/Undraggable Images.tid index a519599..fa96371 100644 --- a/tiddlers/Undraggable Images.tid +++ b/tiddlers/Undraggable Images.tid @@ -1,5 +1,5 @@ created: 20180730170140589 -modified: 20190224163836811 +modified: 20190704155018291 tags: title: Undraggable Images type: text/vnd.tiddlywiki diff --git a/tiddlers/Unique name.tid b/tiddlers/Unique name.tid index df52b4e..f7031c4 100644 --- a/tiddlers/Unique name.tid +++ b/tiddlers/Unique name.tid @@ -1,7 +1,7 @@ created: 20190326130840740 creator: Mohammad keywords: -modified: 20190406122521715 +modified: 20190704155018282 modifier: Mohammad responder: tags: solution diff --git a/tiddlers/Untitled.tid b/tiddlers/Untitled.tid index 2289f75..7e3553a 100644 --- a/tiddlers/Untitled.tid +++ b/tiddlers/Untitled.tid @@ -1,5 +1,5 @@ -created: 20190224163836805 -modified: 20190224163836805 +created: 20190704155018276 +modified: 20190704155018276 title: Untitled type: text/vnd.tiddlywiki diff --git a/tiddlers/Update Story List with Latest Viewed Tiddler.tid b/tiddlers/Update Story List with Latest Viewed Tiddler.tid index 9c5d9ab..ecf3b67 100644 --- a/tiddlers/Update Story List with Latest Viewed Tiddler.tid +++ b/tiddlers/Update Story List with Latest Viewed Tiddler.tid @@ -1,5 +1,5 @@ created: 20180801054717272 -modified: 20190224163836798 +modified: 20190704155018434 tags: title: Update Story List with Latest Viewed Tiddler type: text/vnd.tiddlywiki diff --git a/tiddlers/Use Variable in CSS Calc Function.tid b/tiddlers/Use Variable in CSS Calc Function.tid index 847fc06..8ba4356 100644 --- a/tiddlers/Use Variable in CSS Calc Function.tid +++ b/tiddlers/Use Variable in CSS Calc Function.tid @@ -1,7 +1,7 @@ created: 20181216111737274 creator: Mohammad keywords: variable css cal function -modified: 20190224163837248 +modified: 20190704155018427 modifier: Mohammad responder: Jed Carty tags: exmp17 solution diff --git a/tiddlers/Use Variable in List Widget.tid b/tiddlers/Use Variable in List Widget.tid index 51866af..b20fb6f 100644 --- a/tiddlers/Use Variable in List Widget.tid +++ b/tiddlers/Use Variable in List Widget.tid @@ -1,5 +1,5 @@ created: 20180625165639721 -modified: 20190224163837244 +modified: 20190704155018423 tags: variable title: Use Variable in List Widget type: text/vnd.tiddlywiki diff --git a/tiddlers/Using Google Font with Tiddywiki.tid b/tiddlers/Using Google Font with Tiddywiki.tid index b00329a..cd63804 100644 --- a/tiddlers/Using Google Font with Tiddywiki.tid +++ b/tiddlers/Using Google Font with Tiddywiki.tid @@ -1,7 +1,7 @@ created: 20190206143001033 creator: Mohammad keywords: goole font -modified: 20190224163837239 +modified: 20190704155018417 modifier: Mohammad responder: Erwan Dano tags: solution diff --git a/tiddlers/Using Iframe.tid b/tiddlers/Using Iframe.tid index 9e75dd6..0db8723 100644 --- a/tiddlers/Using Iframe.tid +++ b/tiddlers/Using Iframe.tid @@ -1,6 +1,6 @@ created: 20180718024201433 creator: Mohammad -modified: 20190224163837231 +modified: 20190704155018411 modifier: Mohammad title: Using Iframe type: text/vnd.tiddlywiki diff --git a/tiddlers/Using Macro as a Filter.tid b/tiddlers/Using Macro as a Filter.tid index 0b212aa..2743c03 100644 --- a/tiddlers/Using Macro as a Filter.tid +++ b/tiddlers/Using Macro as a Filter.tid @@ -1,5 +1,5 @@ created: 20190107194957257 -modified: 20190224163837224 +modified: 20190704155018403 tags: macro filter title: Using Macro as a Filter type: text/vnd.tiddlywiki diff --git a/tiddlers/Using Mbox Macro.tid b/tiddlers/Using Mbox Macro.tid index 8f83cce..9907ad4 100644 --- a/tiddlers/Using Mbox Macro.tid +++ b/tiddlers/Using Mbox Macro.tid @@ -1,6 +1,6 @@ created: 20181115034351304 creator: Mohammad -modified: 20190224163837153 +modified: 20190704155018398 modifier: Mohammad tags: coding title: Using Mbox Macro diff --git a/tiddlers/Using Named Colors.tid b/tiddlers/Using Named Colors.tid index dc92b54..9feb5c4 100644 --- a/tiddlers/Using Named Colors.tid +++ b/tiddlers/Using Named Colors.tid @@ -1,7 +1,7 @@ created: 20151221102758131 creator: Tobias Beer keywords: color template dictionary css -modified: 20190224163837145 +modified: 20190704155018391 modifier: Mohammad responder: Matabele tags: css exmp11 solution palette diff --git a/tiddlers/Using Radio Button.tid b/tiddlers/Using Radio Button.tid index ad1b4d7..d97af8b 100644 --- a/tiddlers/Using Radio Button.tid +++ b/tiddlers/Using Radio Button.tid @@ -1,7 +1,7 @@ created: 20180820032547982 creator: Mohammad keywords: radio button reveal -modified: 20190224163837140 +modified: 20190704155018385 modifier: Mohammad responder: Eric Shulman section: 2 diff --git a/tiddlers/Using Svg in CSS Content Properties.tid b/tiddlers/Using Svg in CSS Content Properties.tid index 34b41d4..86d9534 100644 --- a/tiddlers/Using Svg in CSS Content Properties.tid +++ b/tiddlers/Using Svg in CSS Content Properties.tid @@ -1,7 +1,7 @@ created: 20181111183636083 creator: Mohammad keywords: svg css background image -modified: 20190224163837122 +modified: 20190704155018380 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/Using Tiddler Widget with DataTiddler.tid b/tiddlers/Using Tiddler Widget with DataTiddler.tid index 94ff0c6..f846a22 100644 --- a/tiddlers/Using Tiddler Widget with DataTiddler.tid +++ b/tiddlers/Using Tiddler Widget with DataTiddler.tid @@ -1,7 +1,7 @@ created: 20180816050717000 creator: Mohammad keywords: tiddler widget -modified: 20190224163837114 +modified: 20190704155018375 modifier: Mohammad responder: Eric Shulman tags: exmp04 tiddler solution datatiddler diff --git a/tiddlers/Variable Class Attribute for Html Tag.tid b/tiddlers/Variable Class Attribute for Html Tag.tid index ae355cb..f54719a 100644 --- a/tiddlers/Variable Class Attribute for Html Tag.tid +++ b/tiddlers/Variable Class Attribute for Html Tag.tid @@ -1,7 +1,7 @@ created: 20181118070619215 creator: Mohammad keywords: class attribute splitbefore addprefix variable html -modified: 20190224163837022 +modified: 20190704155018364 modifier: Mohammad responder: Mohammad tags: variable solution diff --git a/tiddlers/Variable Overriding.tid b/tiddlers/Variable Overriding.tid index 96985b0..7087a4c 100644 --- a/tiddlers/Variable Overriding.tid +++ b/tiddlers/Variable Overriding.tid @@ -1,7 +1,7 @@ created: 20190207123725668 creator: Mohammad keywords: variable overload override -modified: 20190224163836999 +modified: 20190704155018541 modifier: Mohammad responder: Jeremy Ruston tags: variable solution diff --git a/tiddlers/Variable Reference inside Macro.tid b/tiddlers/Variable Reference inside Macro.tid index 1a0e86f..6dd0634 100644 --- a/tiddlers/Variable Reference inside Macro.tid +++ b/tiddlers/Variable Reference inside Macro.tid @@ -1,7 +1,7 @@ created: 20190208092519949 creator: Mohammad keywords: variable macro scope -modified: 20190224163836991 +modified: 20190704155018533 modifier: Mohammad responder: Eric Shulman tags: solution diff --git a/tiddlers/Variable Textual Substitution.tid b/tiddlers/Variable Textual Substitution.tid index a39a9a7..c87cba1 100644 --- a/tiddlers/Variable Textual Substitution.tid +++ b/tiddlers/Variable Textual Substitution.tid @@ -1,5 +1,5 @@ created: 20180812192041813 -modified: 20190224163836982 +modified: 20190704155018527 tags: title: Variable Textual Substitution type: text/vnd.tiddlywiki diff --git a/tiddlers/Variable as DataTiddler Index.tid b/tiddlers/Variable as DataTiddler Index.tid index c63074a..33692c8 100644 --- a/tiddlers/Variable as DataTiddler Index.tid +++ b/tiddlers/Variable as DataTiddler Index.tid @@ -1,7 +1,7 @@ created: 20190131150550292 creator: Mohammad keywords: datatiddler dictionary transclude variable index -modified: 20190224163837029 +modified: 20190704155018370 modifier: Mohammad responder: Mohammad tags: solution datatiddler diff --git a/tiddlers/Variables vs. Parameters.tid b/tiddlers/Variables vs. Parameters.tid index 4b7254c..b1d3db3 100644 --- a/tiddlers/Variables vs. Parameters.tid +++ b/tiddlers/Variables vs. Parameters.tid @@ -1,7 +1,7 @@ created: 20181115100454701 creator: Mohammad keywords: variable parameter -modified: 20190224163836973 +modified: 20190704155018519 modifier: Mohammad responder: Tobis Beer tags: syntax variable solution diff --git a/tiddlers/Variables, Fields and Filters in TiddlyWiki.json b/tiddlers/Variables, Fields and Filters in TiddlyWiki.json new file mode 100644 index 0000000..f490eae --- /dev/null +++ b/tiddlers/Variables, Fields and Filters in TiddlyWiki.json @@ -0,0 +1,15 @@ +[ + { + "created": "20171204000427499", + "title": "Variables, Fields and Filters in TiddlyWiki", + "type": "text/vnd.tiddlywiki", + "text": "* See also: [[Shorthand syntax summary]]\n* See also [[Eric description on brackets|Brackets]]\n!! Types of Brackets\n<<<\nBrackets are used to indicate the ''type of operand'':\n\n* `[]` - square brackets surround ''literal'' values, \n* `{}` - curly braces around ''field references'', \n* `<>` - angle brackets around ''variable names''. \n<<<\n\n!! Single or Double Brackets - `<` vs `<<`\n<<<\nIn ~TiddlyWiki ''content'', ''variables'' and ''macros'' are referenced using `<>`. The ''double''-bracket syntax is used to avoid conflicts with standard HTML syntax (i.e., `` starts normal HTML bold formatting, while `<>` embeds the value of a ~TiddlyWiki variable named \"b\").\n\nHowever, ''within'' ~TiddlyWiki ''filters'', there is no need to double the brackets, as HTML is not allowed ''within'' the filter, so only single `` is used.\n\nThus, inside a filter we can use a pair of ''single'' angle brackets, like this:\n\n```\n<$list filter=\"[is[current]!has]\" variable=null>\n```\n<<<\n\n!! Brackets within filters\n<<<\nWhy I don't have to wrap `` with `[]` in a filter? \n\nThink of the brackets in filters as part of the operand itself rather than a \"container\" for the operand. As explained above, the type of bracket indicates the type of operand being used:\n\n* use `[...]` for ''literal'' values, e.g., `[texthere]`\n* use `{...}` for ''field'' references, e.g., `{!!fieldname}`\n* use `<...>` for ''variables'' e.g. ``\n\nThus, to split the literal text, \"sometext\", you could write: `[title[sometext]splitbefore[t]removesuffix[t]]`\nyou would get \"some\" as a result:\n\nEx: `<>`\n\n\nIf the value \"sometext\" is stored in a field named \"somefield\" in the current tiddler, you could write: `[{!!somefield}splitbefore[t]removesuffix[t]]`\n\nand, if the value \"sometext\" is stored in a variable named \"somevariable\", you could write: `[splitbefore[t]removesuffix[t]]`\n\nAs a slightly more complex example, suppose the value to split on was also stored in a variable. Then you could write:\n `[splitbeforeremovesuffix]`\n<<<\nhope this helps,\n\nenjoy,\n-e\nEric Shulman", + "creator": "Mohammad", + "modified": "20190704155018511", + "modifier": "Mohammad", + "tags": "syntax solution", + "keywords": "variable filter field ", + "responder": "Eric Shulman", + "url": "https://groups.google.com/d/msg/tiddlywiki/3DyHxqqFQbg/JxjN6kYjAQAJ" + } +] \ No newline at end of file diff --git a/tiddlers/Variables, Fields and Filters in TiddlyWiki.tid b/tiddlers/Variables, Fields and Filters in TiddlyWiki.tid deleted file mode 100644 index 327ebe6..0000000 --- a/tiddlers/Variables, Fields and Filters in TiddlyWiki.tid +++ /dev/null @@ -1,63 +0,0 @@ -created: 20171204000427499 -creator: Mohammad -keywords: variable filter field -modified: 20190224163836957 -modifier: Mohammad -responder: Eric Shulman -tags: syntax solution -title: Variables, Fields and Filters in TiddlyWiki -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/3DyHxqqFQbg/JxjN6kYjAQAJ - -* See also: [[Shorthand syntax summary]] -* See also [[Eric description on brackets|Brackets]] -!! Types of Brackets -<<< -Brackets are used to indicate the ''type of operand'': - -* `[]` - square brackets surround ''literal'' values, -* `{}` - curly braces around ''field references'', -* `<>` - angle brackets around ''variable names''. -<<< - -!! Single or Double Brackets - `<` vs `<<` -<<< -In ~TiddlyWiki ''content'', ''variables'' and ''macros'' are referenced using `<>`. The ''double''-bracket syntax is used to avoid conflicts with standard HTML syntax (i.e., `` starts normal HTML bold formatting, while `<>` embeds the value of a ~TiddlyWiki variable named "b"). - -However, ''within'' ~TiddlyWiki ''filters'', there is no need to double the brackets, as HTML is not allowed ''within'' the filter, so only single `` is used. - -Thus, inside a filter we can use a pair of ''single'' angle brackets, like this: - -``` -<$list filter="[is[current]!has]" variable=null> -``` -<<< - -!! Brackets within filters -<<< -Why I don't have to wrap `` with `[]` in a filter? - -Think of the brackets in filters as part of the operand itself rather than a "container" for the operand. As explained above, the type of bracket indicates the type of operand being used: - -* use `[...]` for ''literal'' values, e.g., `[texthere]` -* use `{...}` for ''field'' references, e.g., `{!!fieldname}` -* use `<...>` for ''variables'' e.g. `` - -Thus, to split the literal text, "sometext", you could write: `[title[sometext]splitbefore[t]removesuffix[t]]` -you would get "some" as a result: - -Ex: `<>` - - -If the value "sometext" is stored in a field named "somefield" in the current tiddler, you could write: `[{!!somefield}splitbefore[t]removesuffix[t]]` - -and, if the value "sometext" is stored in a variable named "somevariable", you could write: `[splitbefore[t]removesuffix[t]]` - -As a slightly more complex example, suppose the value to split on was also stored in a variable. Then you could write: - `[splitbeforeremovesuffix]` -<<< -hope this helps, - -enjoy, --e -Eric Shulman \ No newline at end of file diff --git a/tiddlers/Variables, Parameters and transclusions - Cheat sheet RFC.tid b/tiddlers/Variables, Parameters and transclusions - Cheat sheet RFC.tid index 2f2c5ac..5590bac 100644 --- a/tiddlers/Variables, Parameters and transclusions - Cheat sheet RFC.tid +++ b/tiddlers/Variables, Parameters and transclusions - Cheat sheet RFC.tid @@ -1,10 +1,2 @@ -created: 20190221144251560 -creator: Mohammad -modified: 20190224163836943 -modifier: Mohammad -tags: task -title: Variables, Parameters and transclusions - Cheat sheet RFC -type: application/x-tiddler - <> Ref: https://groups.google.com/d/msg/tiddlywiki/NQ86xj5iRbc/X82H517OAAAJ \ No newline at end of file diff --git a/tiddlers/Variables, Parameters and transclusions - Cheat sheet RFC.tid.meta b/tiddlers/Variables, Parameters and transclusions - Cheat sheet RFC.tid.meta new file mode 100644 index 0000000..8a377ad --- /dev/null +++ b/tiddlers/Variables, Parameters and transclusions - Cheat sheet RFC.tid.meta @@ -0,0 +1,7 @@ +created: 20190221144251560 +creator: Mohammad +modified: 20190704155018500 +modifier: Mohammad +tags: task +title: Variables, Parameters and transclusions - Cheat sheet RFC +type: application/x-tiddler \ No newline at end of file diff --git a/tiddlers/View Widget and Date Format.tid b/tiddlers/View Widget and Date Format.tid index b3fcbeb..56f9348 100644 --- a/tiddlers/View Widget and Date Format.tid +++ b/tiddlers/View Widget and Date Format.tid @@ -1,6 +1,6 @@ created: 20190221190926185 creator: Mohammad -modified: 20190224163837436 +modified: 20190704155018494 modifier: Mohammad tags: task title: View Widget and Date Format diff --git a/tiddlers/W3.CSS.tid b/tiddlers/W3.CSS.tid index 47595d2..c508bac 100644 --- a/tiddlers/W3.CSS.tid +++ b/tiddlers/W3.CSS.tid @@ -1,6 +1,6 @@ created: 20180905161751570 creator: Mohammad -modified: 20190224163837372 +modified: 20190704155018455 modifier: Mohammad tags: mywiki title: W3.CSS diff --git a/tiddlers/Week Days.tid b/tiddlers/Week Days.tid index 2994f7b..398847c 100644 --- a/tiddlers/Week Days.tid +++ b/tiddlers/Week Days.tid @@ -1,7 +1,6 @@ created: 20180628081545759 list: Mon Tue Wed Thu Fri Sat Sun -modified: 20190224163837360 +modified: 20190704155018447 tags: operator title: Week Days -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/What is Semantics.tid b/tiddlers/What is Semantics.tid index 2e9e676..622bef4 100644 --- a/tiddlers/What is Semantics.tid +++ b/tiddlers/What is Semantics.tid @@ -1,6 +1,6 @@ created: 20190401045018669 creator: Mohammad -modified: 20190406122522119 +modified: 20190704155018620 modifier: Mohammad tags: concept title: What is Semantics diff --git a/tiddlers/Widdly.tid b/tiddlers/Widdly.tid index 4b5f144..c7e1472 100644 --- a/tiddlers/Widdly.tid +++ b/tiddlers/Widdly.tid @@ -1,7 +1,7 @@ created: 20180922144221241 creator: Mohammad keywords: server self-host save -modified: 20190224163837352 +modified: 20190704155018614 modifier: Mohammad responder: cs8425 tags: solution diff --git a/tiddlers/Widgets in Conventional Programming.tid b/tiddlers/Widgets in Conventional Programming.tid index 0ecdb6e..116d15f 100644 --- a/tiddlers/Widgets in Conventional Programming.tid +++ b/tiddlers/Widgets in Conventional Programming.tid @@ -1,7 +1,7 @@ created: 20181220133359713 creator: Mohammad keywords: set list widget programming -modified: 20190224163837346 +modified: 20190704155018604 modifier: Mohammad responder: Joe Arms tags: solution diff --git a/tiddlers/Wiki.js.tid b/tiddlers/Wiki.js.tid index eb98077..ee310e8 100644 --- a/tiddlers/Wiki.js.tid +++ b/tiddlers/Wiki.js.tid @@ -1,6 +1,6 @@ created: 20180705174902042 creator: Mohammad -modified: 20190224163837341 +modified: 20190704155018598 modifier: Mohammad tags: title: Wiki.js diff --git a/tiddlers/Wikify Widget and White Spaces.tid b/tiddlers/Wikify Widget and White Spaces.tid index 51ac2f6..1f1a172 100644 --- a/tiddlers/Wikify Widget and White Spaces.tid +++ b/tiddlers/Wikify Widget and White Spaces.tid @@ -1,7 +1,7 @@ created: 20190314203508603 creator: Mohammad keywords: wikify whitespace reveal -modified: 20190316114921630 +modified: 20190704155018593 modifier: Mohammad responder: Simon Huber (BTC) tags: solution diff --git a/tiddlers/Wikilink ans Rule.tid b/tiddlers/Wikilink ans Rule.tid index 3d0f8d8..9382d45 100644 --- a/tiddlers/Wikilink ans Rule.tid +++ b/tiddlers/Wikilink ans Rule.tid @@ -1,7 +1,7 @@ created: 20190112181724954 creator: Mohammad keywords: wikilink rule -modified: 20190224163837331 +modified: 20190704155018586 modifier: Mohammad responder: S.S. tags: solution diff --git a/tiddlers/Wkify Widget and Macro Variable.tid b/tiddlers/Wkify Widget and Macro Variable.tid index e3a1115..78646d9 100644 --- a/tiddlers/Wkify Widget and Macro Variable.tid +++ b/tiddlers/Wkify Widget and Macro Variable.tid @@ -1,7 +1,7 @@ created: 20190227125352827 creator: Mohammad keywords: rules wikify variable -modified: 20190316114921615 +modified: 20190704155018579 modifier: Mohammad responder: Simon Huber (BTC) tags: exmp51 solution diff --git a/tiddlers/Word_ avarice.tid b/tiddlers/Word_ avarice.tid index 1dea9b5..7f46a3a 100644 --- a/tiddlers/Word_ avarice.tid +++ b/tiddlers/Word_ avarice.tid @@ -1,6 +1,6 @@ created: 20190119042621727 creator: Mohammad -modified: 20190224163837325 +modified: 20190704155018572 modifier: Mohammad tags: lookup exmp28 title: Word: avarice diff --git a/tiddlers/lists/Work with Lists - 01.tid b/tiddlers/Work with Lists - 01.tid similarity index 88% rename from tiddlers/lists/Work with Lists - 01.tid rename to tiddlers/Work with Lists - 01.tid index dbf5dbf..38132d6 100644 --- a/tiddlers/lists/Work with Lists - 01.tid +++ b/tiddlers/Work with Lists - 01.tid @@ -1,6 +1,6 @@ created: 20180601095701423 creator: Mohammad -modified: 20190224163837306 +modified: 20190704155018560 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 01 diff --git a/tiddlers/lists/Work with Lists - 03.tid b/tiddlers/Work with Lists - 03.tid similarity index 92% rename from tiddlers/lists/Work with Lists - 03.tid rename to tiddlers/Work with Lists - 03.tid index 9136142..f173765 100644 --- a/tiddlers/lists/Work with Lists - 03.tid +++ b/tiddlers/Work with Lists - 03.tid @@ -1,6 +1,6 @@ created: 20180601100408815 creator: Mohammad -modified: 20190224163837297 +modified: 20190704155018555 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 03 diff --git a/tiddlers/lists/Work with Lists - 04.tid b/tiddlers/Work with Lists - 04.tid similarity index 94% rename from tiddlers/lists/Work with Lists - 04.tid rename to tiddlers/Work with Lists - 04.tid index 7d89311..5968e36 100644 --- a/tiddlers/lists/Work with Lists - 04.tid +++ b/tiddlers/Work with Lists - 04.tid @@ -1,6 +1,6 @@ created: 20180601101506126 creator: Mohammad -modified: 20190224163837292 +modified: 20190704155018548 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 04 diff --git a/tiddlers/lists/Work with Lists - 05.tid b/tiddlers/Work with Lists - 05.tid similarity index 68% rename from tiddlers/lists/Work with Lists - 05.tid rename to tiddlers/Work with Lists - 05.tid index f5e0be8..a74ba7c 100644 --- a/tiddlers/lists/Work with Lists - 05.tid +++ b/tiddlers/Work with Lists - 05.tid @@ -1,8 +1,7 @@ created: 20180601110755811 creator: Mohammad -modified: 20190224163837282 +modified: 20190704155018707 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 05 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/lists/Work with Lists - 06.tid b/tiddlers/Work with Lists - 06.tid similarity index 93% rename from tiddlers/lists/Work with Lists - 06.tid rename to tiddlers/Work with Lists - 06.tid index ce666b4..597a8bf 100644 --- a/tiddlers/lists/Work with Lists - 06.tid +++ b/tiddlers/Work with Lists - 06.tid @@ -1,6 +1,6 @@ created: 20180601111331131 creator: Mohammad -modified: 20190224163837276 +modified: 20190704155018701 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 06 diff --git a/tiddlers/lists/Work with Lists - 07.tid b/tiddlers/Work with Lists - 07.tid similarity index 93% rename from tiddlers/lists/Work with Lists - 07.tid rename to tiddlers/Work with Lists - 07.tid index c4331b8..ececc89 100644 --- a/tiddlers/lists/Work with Lists - 07.tid +++ b/tiddlers/Work with Lists - 07.tid @@ -1,6 +1,6 @@ created: 20180601111903493 creator: Mohammad -modified: 20190224163837267 +modified: 20190704155018695 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 07 diff --git a/tiddlers/lists/Work with Lists - 08.tid b/tiddlers/Work with Lists - 08.tid similarity index 94% rename from tiddlers/lists/Work with Lists - 08.tid rename to tiddlers/Work with Lists - 08.tid index 26998a2..7cb190f 100644 --- a/tiddlers/lists/Work with Lists - 08.tid +++ b/tiddlers/Work with Lists - 08.tid @@ -1,6 +1,6 @@ created: 20180601113122324 creator: Mohammad -modified: 20190224163837260 +modified: 20190704155018685 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 08 diff --git a/tiddlers/lists/Work with Lists - 10.tid b/tiddlers/Work with Lists - 10.tid similarity index 94% rename from tiddlers/lists/Work with Lists - 10.tid rename to tiddlers/Work with Lists - 10.tid index 12e81d0..364978a 100644 --- a/tiddlers/lists/Work with Lists - 10.tid +++ b/tiddlers/Work with Lists - 10.tid @@ -1,6 +1,6 @@ created: 20180601134852538 creator: Mohammad -modified: 20190224163837489 +modified: 20190704155018677 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 10 diff --git a/tiddlers/lists/Work with Lists - 11.tid b/tiddlers/Work with Lists - 11.tid similarity index 95% rename from tiddlers/lists/Work with Lists - 11.tid rename to tiddlers/Work with Lists - 11.tid index a22e1f1..6029eef 100644 --- a/tiddlers/lists/Work with Lists - 11.tid +++ b/tiddlers/Work with Lists - 11.tid @@ -1,6 +1,6 @@ created: 20180601135335701 creator: Mohammad -modified: 20190224163837483 +modified: 20190704155018672 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 11 diff --git a/tiddlers/lists/Work with Lists - 12.tid b/tiddlers/Work with Lists - 12.tid similarity index 97% rename from tiddlers/lists/Work with Lists - 12.tid rename to tiddlers/Work with Lists - 12.tid index 023ee08..854be27 100644 --- a/tiddlers/lists/Work with Lists - 12.tid +++ b/tiddlers/Work with Lists - 12.tid @@ -1,6 +1,6 @@ created: 20180601140007326 creator: Mohammad -modified: 20190224163837478 +modified: 20190704155018665 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 12 diff --git a/tiddlers/lists/Work with Lists - 13.tid b/tiddlers/Work with Lists - 13.tid similarity index 94% rename from tiddlers/lists/Work with Lists - 13.tid rename to tiddlers/Work with Lists - 13.tid index 6426afb..48cec22 100644 --- a/tiddlers/lists/Work with Lists - 13.tid +++ b/tiddlers/Work with Lists - 13.tid @@ -1,6 +1,6 @@ created: 20180601141552210 creator: Mohammad -modified: 20190224163837473 +modified: 20190704155018660 modifier: Mohammad tags: tutorial learning list title: Work with Lists - 13 diff --git a/tiddlers/lists/Work with Lists.tid b/tiddlers/Work with Lists.tid similarity index 95% rename from tiddlers/lists/Work with Lists.tid rename to tiddlers/Work with Lists.tid index 488354b..c847dd0 100644 --- a/tiddlers/lists/Work with Lists.tid +++ b/tiddlers/Work with Lists.tid @@ -1,6 +1,6 @@ created: 20180601100026880 creator: Mohammad -modified: 20190224163837313 +modified: 20190704155018565 modifier: Mohammad tags: tutorial learning list title: Work with Lists diff --git a/tiddlers/Working with Google Group.txt.meta b/tiddlers/Working with Google Group.txt.meta index a95b352..a1e5136 100644 --- a/tiddlers/Working with Google Group.txt.meta +++ b/tiddlers/Working with Google Group.txt.meta @@ -1,7 +1,7 @@ created: 20181105214453571 creator: Mohammad -modified: 20190224163837463 +modified: 20190704155018651 modifier: Mohammad tags: title: Working with Google Group -type: text/plain +type: text/plain \ No newline at end of file diff --git a/tiddlers/Working with SVG.tid b/tiddlers/Working with SVG.tid new file mode 100644 index 0000000..4f0a142 --- /dev/null +++ b/tiddlers/Working with SVG.tid @@ -0,0 +1,57 @@ +created: 20190608052743689 +creator: Mohammad +keywords: svg +modified: 20190704155018639 +modifier: Mohammad +responder: Mohammad +tags: exmp59 solution svg +title: Working with SVG +type: text/vnd.tiddlywiki +url: + +;How to use svg in TW? +:[[PMario|https://groups.google.com/d/msg/tiddlywiki/xoBAOY7OMGY/EKKTDPdIBAAJ]] instruction has beed given as below + +!! First Rule: Remove the svg overhead +* Include onle the pure `` part. +* Remove all additional parameters eg: +** `` wrapper element +** the whole meta data block +* Depending on the svg editor software you use and how you save the file, an svg file can contain a lot of editor specific stuff, that is irrelevant for TW. The overhead can be significant, in terms of tiddler size and also usability within TW. + +!! Second Rule: Use outline paths +* Use ''outline'' paths, so they can be filled! +*
    + +The advantage of the outline is, that we can use //CSS// fill style setting to change the svg color. eg: + +``` +.tc-image-chevron-left { + fill: green;} +``` +
    + +!! Third Rule: Remove all hardcoded styling attributes +* The important part now is, we have to remove every //fill-attributes// from the paths. +* Internl stylings (those have been set in tiddler.svg) would always win, so it would not possible to use css +* Apply css class definitions instead, if you need to style icon elements. + +!! Fourth Rule: Use proper default values +* The recommended settings can be as follow: +** `width="22pt" height="22pt"` +** `viewBox="0 0 128 128"` + +!! Fifth Rule: Use a proper svg editor +* Depending on the editor, svg files can contain a lot of bloat. +** Make sure, you have a save option similar to: Optimized SVG in InkScape. +** You still have to remove some stuff manually, but the editor specific crap is gone. + +!! Sixth Rule: Optimize the svg for size +* You can use: [[SvgOmg|https://jakearchibald.github.io/svgomg/]]. It has a lot of parameters, you can play with, to optimize the image size, without loosing quality. + +!! Seventh Rule: Do not embed big images +* They only make your TW file big. +* As a crude rule of thumb, big is >100 kByte + +! Examples +<]">> \ No newline at end of file diff --git a/tiddlers/Worth Reading.tid b/tiddlers/Worth Reading.tid index d8f7be2..a3cbb59 100644 --- a/tiddlers/Worth Reading.tid +++ b/tiddlers/Worth Reading.tid @@ -1,6 +1,6 @@ created: 20190123051301718 creator: Mohammad -modified: 20190224163837457 +modified: 20190704155018630 modifier: Mohammad tags: title: Worth Reading diff --git a/tiddlers/Xememex.tid b/tiddlers/Xememex.tid index 8418afd..866b2d7 100644 --- a/tiddlers/Xememex.tid +++ b/tiddlers/Xememex.tid @@ -2,11 +2,10 @@ created: 20190331183319453 creator: Mohammad description: Xememex is a tool for building tools for collecting, curating and composing fragments of information. developer: Jeremy Ruston -modified: 20190406122521884 +modified: 20190704155018625 modifier: Mohammad tags: Links title: Xememex type: text/vnd.tiddlywiki url: https://xememex.com/ -wiki-name: xememex - +wiki-name: xememex \ No newline at end of file diff --git a/tiddlers/YoursFaithfullySteveHarding.tid b/tiddlers/YoursFaithfullySteveHarding.tid index 849a167..6bc86c5 100644 --- a/tiddlers/YoursFaithfullySteveHarding.tid +++ b/tiddlers/YoursFaithfullySteveHarding.tid @@ -1,5 +1,5 @@ created: 20180820085621862 -modified: 20190224163837447 +modified: 20190704155018724 note: don't delete, this is part of exmp07 tags: exmp07 title: YoursFaithfullySteveHarding diff --git a/tiddlers/Zero Padded Numbers with Range.tid b/tiddlers/Zero Padded Numbers with Range.tid index fbdb2b6..36f9db2 100644 --- a/tiddlers/Zero Padded Numbers with Range.tid +++ b/tiddlers/Zero Padded Numbers with Range.tid @@ -1,7 +1,7 @@ created: 20190215162056140 creator: Mohammad keywords: zero pad number range -modified: 20190224163837442 +modified: 20190704155018717 modifier: Mohammad responder: Mohammad tags: solution diff --git a/tiddlers/batch.tid b/tiddlers/batch.tid index cd03fd5..dd48200 100644 --- a/tiddlers/batch.tid +++ b/tiddlers/batch.tid @@ -1,7 +1,7 @@ caption: Batch operation created: 20190122062457284 creator: Mohammad -modified: 20190216180309597 +modified: 20190704155012595 modifier: Mohammad tags: zclay $:/.mr/toc title: batch diff --git a/tiddlers/button.tid b/tiddlers/button.tid index 824d1b8..6284f40 100644 --- a/tiddlers/button.tid +++ b/tiddlers/button.tid @@ -1,6 +1,5 @@ created: 20180728052528304 icon: -modified: 20190216180309307 +modified: 20190704155013113 title: button -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/codemirror-light-table.css.meta b/tiddlers/codemirror-light-table.css.meta index 7f833eb..4eebcfa 100644 --- a/tiddlers/codemirror-light-table.css.meta +++ b/tiddlers/codemirror-light-table.css.meta @@ -1,7 +1,7 @@ created: 20181203174514630 -modified: 20190216180309077 +modified: 20190704155012954 module-type: codemirror-theme name: light-table tags: $:/tags/Stylesheet title: codemirror-light-table -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/coding.tid b/tiddlers/coding.tid index 8cb129b..6d3b39c 100644 --- a/tiddlers/coding.tid +++ b/tiddlers/coding.tid @@ -1,8 +1,7 @@ created: 20181115034158574 creator: Mohammad list: [[Naming Rules for Coding]] [[New Codes Standard Tiddlers]] -modified: 20190216180309058 +modified: 20190704155012945 modifier: Mohammad title: coding -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/concept.tid b/tiddlers/concept.tid index cc4df53..784d523 100644 --- a/tiddlers/concept.tid +++ b/tiddlers/concept.tid @@ -1,6 +1,5 @@ created: 20180728052037804 icon: $:/core/images/close-others-button -modified: 20190216180310409 +modified: 20190704155013412 title: concept -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/d3tree.tid b/tiddlers/d3tree.tid new file mode 100644 index 0000000..50b4310 --- /dev/null +++ b/tiddlers/d3tree.tid @@ -0,0 +1,13 @@ +created: 20190615050245935 +creator: Mohammad +keywords: xx +modified: 20190704155013866 +modifier: Mohammad +responder: xx +tags: solution +title: d3tree +type: text/vnd.tiddlywiki +url: https://groups.google.com/d/msg/tiddlywiki/exq9X7dFuW8/jwrJiP5RBQAJ + +<> +seems nice D3 tree \ No newline at end of file diff --git a/tiddlers/data_search-filter.tid b/tiddlers/data_search-filter similarity index 66% rename from tiddlers/data_search-filter.tid rename to tiddlers/data_search-filter index e84cb13..60e64d7 100644 --- a/tiddlers/data_search-filter.tid +++ b/tiddlers/data_search-filter @@ -1,11 +1,3 @@ -created: 20190131141053782 -creator: Mohammad -modified: 20190216180310164 -modifier: Mohammad -tags: -title: data/search-filter -type: application/x-tiddler-dictionary - search in all fields: `[search:*[keyword]]` search only in title: `[search:title[keyword]]` search in tags: `[search:tags[keyword]]` diff --git a/tiddlers/data_search-filter.meta b/tiddlers/data_search-filter.meta new file mode 100644 index 0000000..438aacc --- /dev/null +++ b/tiddlers/data_search-filter.meta @@ -0,0 +1,7 @@ +created: 20190131141053782 +creator: Mohammad +modified: 20190704155013849 +modifier: Mohammad +tags: +title: data/search-filter +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/datatiddler.tid b/tiddlers/datatiddler.tid index c520a26..4b901ad 100644 --- a/tiddlers/datatiddler.tid +++ b/tiddlers/datatiddler.tid @@ -1,10 +1,9 @@ -caption: DataTiddler +caption: Data Tiddler created: 20190206031857322 creator: Mohammad list: [[DataTiddler Terminology]] [[Access to DataTiddler Index/Value Pair]] [[Listing DataTiddler Properties]] [[DataTiddler and Property Table]] [[Search DataTiddler Using regexp]] [[Find DataTiddlers with Certain Index/Value]] [[Add Remove DataTiddler Index/Value Pairs]] [[Example: Add/Remove DataTiddler Indexes]] [[DataTiddler Value Set to a Variable]] [[Variable as DataTiddler Index]] [[Using Tiddler Widget with DataTiddler]] [[Another DataTiddler and Tiddler Widget]] [[Set the Index/Value Using Select Widget]] [[Custom Styles Using DataTiddler]] [[Field Value as DataTiddler Index]] [[How Exclude Some Indexes in Filter]] [[Select Widget and DataTiddler]] [[DataTiddler Index/Value Using Forms]] [[Remove Index/Value Using Form]] [[A Dictionary Project]] [[List all DataTiddlers]] -modified: 20190216180310157 +modified: 20190704155013840 modifier: Mohammad -tags: ziron $:/.mr/toc +tags: trail $:/.mr/toc title: datatiddler -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/demo.tid b/tiddlers/demo.tid index 672db94..951b077 100644 --- a/tiddlers/demo.tid +++ b/tiddlers/demo.tid @@ -1,6 +1,6 @@ created: 20181010122535206 creator: Mohammad -modified: 20190216180310079 +modified: 20190704155013701 modifier: Mohammad title: demo type: text/vnd.tiddlywiki diff --git a/tiddlers/demo_exmp23_p01.tid b/tiddlers/demo_exmp23_p01.tid index 5aa5e79..32d6486 100644 --- a/tiddlers/demo_exmp23_p01.tid +++ b/tiddlers/demo_exmp23_p01.tid @@ -1,6 +1,6 @@ created: 20190110071118683 creator: Mohammad -modified: 20190216180310072 +modified: 20190704155013686 modifier: Mohammad tags: exmp23 title: demo/exmp23/p01 diff --git a/tiddlers/demo_exmp23_p02.tid b/tiddlers/demo_exmp23_p02.tid index 625bf14..09375b2 100644 --- a/tiddlers/demo_exmp23_p02.tid +++ b/tiddlers/demo_exmp23_p02.tid @@ -1,6 +1,6 @@ created: 20190110071152639 creator: Mohammad -modified: 20190216180310065 +modified: 20190704155013666 modifier: Mohammad tags: exmp23 title: demo/exmp23/p02 diff --git a/tiddlers/tags/demo_exmp24_ add remove tags.tid b/tiddlers/demo_exmp24_ add remove tags.tid similarity index 96% rename from tiddlers/tags/demo_exmp24_ add remove tags.tid rename to tiddlers/demo_exmp24_ add remove tags.tid index 85805d3..76b4b2e 100644 --- a/tiddlers/tags/demo_exmp24_ add remove tags.tid +++ b/tiddlers/demo_exmp24_ add remove tags.tid @@ -1,6 +1,6 @@ created: 20190110095607925 creator: Mohammad -modified: 20190216180310058 +modified: 20190704155013659 modifier: Mohammad tags: exmp24 OldTopics title: demo/exmp24: add remove tags diff --git a/tiddlers/demo_exmp25_add-remove-tags-using-listops.tid b/tiddlers/demo_exmp25_add-remove-tags-using-listops.tid index 172edb8..3c82e35 100644 --- a/tiddlers/demo_exmp25_add-remove-tags-using-listops.tid +++ b/tiddlers/demo_exmp25_add-remove-tags-using-listops.tid @@ -1,6 +1,6 @@ created: 20190110105826370 creator: Mohammad -modified: 20190216180310051 +modified: 20190704155013651 modifier: Mohammad tags: ToDo exmp25 title: demo/exmp25:add-remove-tags-using-listops diff --git a/tiddlers/demo_exmp26_link-pdf-to-page.tid b/tiddlers/demo_exmp26_link-pdf-to-page.tid index 4c23c2e..dc001ae 100644 --- a/tiddlers/demo_exmp26_link-pdf-to-page.tid +++ b/tiddlers/demo_exmp26_link-pdf-to-page.tid @@ -1,6 +1,6 @@ created: 20190110113534036 creator: Mohammad -modified: 20190216180310044 +modified: 20190704155013644 modifier: Mohammad my: tags: exmp26 diff --git a/tiddlers/demo_exmp26_link-pdf-use-tiddlerpath.tid b/tiddlers/demo_exmp26_link-pdf-use-tiddlerpath.tid index f4cf1ce..4c7e3d7 100644 --- a/tiddlers/demo_exmp26_link-pdf-use-tiddlerpath.tid +++ b/tiddlers/demo_exmp26_link-pdf-use-tiddlerpath.tid @@ -1,6 +1,6 @@ created: 20190110134307968 creator: Mohammad -modified: 20190216180310038 +modified: 20190704155013637 modifier: Mohammad tags: exmp26 title: demo/exmp26/link-pdf-use-tiddlerpath diff --git a/tiddlers/demo_exmp27_P01.tid b/tiddlers/demo_exmp27_P01.tid index 2b4d9d6..99b2ad4 100644 --- a/tiddlers/demo_exmp27_P01.tid +++ b/tiddlers/demo_exmp27_P01.tid @@ -1,6 +1,6 @@ created: 20190110201804453 creator: Mohammad -modified: 20190216180310032 +modified: 20190704155013630 modifier: Mohammad tags: exmp27 title: demo/exmp27/P01 diff --git a/tiddlers/demo_exmp27_P02.tid b/tiddlers/demo_exmp27_P02.tid index 66dea2b..7d6124a 100644 --- a/tiddlers/demo_exmp27_P02.tid +++ b/tiddlers/demo_exmp27_P02.tid @@ -1,6 +1,6 @@ created: 20190110201900798 creator: Mohammad -modified: 20190216180310027 +modified: 20190704155013622 modifier: Mohammad tags: exmp27 title: demo/exmp27/P02 diff --git a/tiddlers/demo_exmp27_P03.tid b/tiddlers/demo_exmp27_P03.tid index ed7d00f..c96ee46 100644 --- a/tiddlers/demo_exmp27_P03.tid +++ b/tiddlers/demo_exmp27_P03.tid @@ -1,6 +1,6 @@ created: 20190110201909186 creator: Mohammad -modified: 20190216180310021 +modified: 20190704155013615 modifier: Mohammad tags: exmp27 title: demo/exmp27/P03 diff --git a/tiddlers/demo_exmp54_tid01.tid b/tiddlers/demo_exmp54_tid01.tid index 0a96ab6..c6b42e3 100644 --- a/tiddlers/demo_exmp54_tid01.tid +++ b/tiddlers/demo_exmp54_tid01.tid @@ -1,6 +1,6 @@ created: 20190314201924798 creator: Mohammad -modified: 20190316114915616 +modified: 20190704155013609 modifier: Mohammad tags: exmp54 title: demo/exmp54/tid01 diff --git a/tiddlers/demo_exmp54_tid02.tid b/tiddlers/demo_exmp54_tid02.tid index f838709..7a82992 100644 --- a/tiddlers/demo_exmp54_tid02.tid +++ b/tiddlers/demo_exmp54_tid02.tid @@ -1,6 +1,6 @@ created: 20190314202016319 creator: Mohammad -modified: 20190316114915608 +modified: 20190704155013604 modifier: Mohammad tags: exmp54 title: demo/exmp54/tid02 diff --git a/tiddlers/demo_exmp56_p01.tid b/tiddlers/demo_exmp56_p01.tid index 935797b..3986eda 100644 --- a/tiddlers/demo_exmp56_p01.tid +++ b/tiddlers/demo_exmp56_p01.tid @@ -1,9 +1,8 @@ created: 20190331095632550 creator: Mohammad -modified: 20190406122515664 +modified: 20190704155013599 modifier: Mohammad myfield: Orange tags: exmp56 title: demo/exmp56/p01 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/demo_exmp56_p02.tid b/tiddlers/demo_exmp56_p02.tid index 0828710..0210800 100644 --- a/tiddlers/demo_exmp56_p02.tid +++ b/tiddlers/demo_exmp56_p02.tid @@ -1,9 +1,8 @@ created: 20190331100446130 creator: Mohammad -modified: 20190406122515656 +modified: 20190704155013591 modifier: Mohammad myfield: Apple tags: exmp56 title: demo/exmp56/p02 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/demo_exmp56_p03.tid b/tiddlers/demo_exmp56_p03.tid index 924e250..d5d5143 100644 --- a/tiddlers/demo_exmp56_p03.tid +++ b/tiddlers/demo_exmp56_p03.tid @@ -1,9 +1,8 @@ created: 20190331100541372 creator: Mohammad -modified: 20190406122515645 +modified: 20190704155013585 modifier: Mohammad myfield: Banana tags: exmp56 title: demo/exmp56/p03 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/demo_exmp57_Algebra.tid b/tiddlers/demo_exmp57_Algebra.tid index 57c779f..56835b0 100644 --- a/tiddlers/demo_exmp57_Algebra.tid +++ b/tiddlers/demo_exmp57_Algebra.tid @@ -1,7 +1,7 @@ author: Jed created: 20190401053347241 creator: Mohammad -modified: 20190406122515638 +modified: 20190704155013579 modifier: Mohammad tags: ebook exmp57 title: demo/exmp57/Algebra diff --git a/tiddlers/demo_exmp57_HTML and CSS.tid b/tiddlers/demo_exmp57_HTML and CSS.tid index f3310dd..ae27ddc 100644 --- a/tiddlers/demo_exmp57_HTML and CSS.tid +++ b/tiddlers/demo_exmp57_HTML and CSS.tid @@ -1,7 +1,7 @@ author: Mohammad created: 20190401052929848 creator: Mohammad -modified: 20190406122515630 +modified: 20190704155013570 modifier: Mohammad tags: ebook exmp57 title: demo/exmp57/HTML and CSS diff --git a/tiddlers/demo_exmp57_JavaScript in Practice.tid b/tiddlers/demo_exmp57_JavaScript in Practice.tid index 68ab6a5..82cec19 100644 --- a/tiddlers/demo_exmp57_JavaScript in Practice.tid +++ b/tiddlers/demo_exmp57_JavaScript in Practice.tid @@ -1,7 +1,7 @@ author: Hirad created: 20190401053107250 creator: Mohammad -modified: 20190406122515612 +modified: 20190704155013563 modifier: Mohammad tags: ebook exmp57 title: demo/exmp57/JavaScript in Practice diff --git a/tiddlers/demo_exmp57_Physics.tid b/tiddlers/demo_exmp57_Physics.tid index 2558658..ba580be 100644 --- a/tiddlers/demo_exmp57_Physics.tid +++ b/tiddlers/demo_exmp57_Physics.tid @@ -1,7 +1,7 @@ author: Sara created: 20190401053448602 creator: Mohammad -modified: 20190406122515605 +modified: 20190704155013557 modifier: Mohammad tags: ebook exmp57 title: demo/exmp57/Physics diff --git a/tiddlers/developer.tid b/tiddlers/developer.tid index 71fc2e1..42bf4a8 100644 --- a/tiddlers/developer.tid +++ b/tiddlers/developer.tid @@ -1,7 +1,7 @@ caption: Developer created: 20180616073500901 creator: Mohammad -modified: 20190216180310015 +modified: 20190704155013549 modifier: Mohammad title: developer type: text/vnd.tiddlywiki diff --git a/tiddlers/dictionary_mylocal-TWs b/tiddlers/dictionary_mylocal-TWs new file mode 100644 index 0000000..a796d15 --- /dev/null +++ b/tiddlers/dictionary_mylocal-TWs @@ -0,0 +1,4 @@ +A Pocket Full of Tips: file:///G:/TW/Tobias%20Beer/a%20pocket%20full%20of%20tips-5.1.19.html +Filters: file:///G:/TW/Tobias%20Beer/Filters-5.1.19.html +My-Notes: file:///G:/TW/01.%20My-TW-Notes/myNotes.html +TW 5.1.19: file:///G:/TW/Archive/TW-Full/tiddlywiki-5.1.19.html \ No newline at end of file diff --git a/tiddlers/dictionary_mylocal-TWs.meta b/tiddlers/dictionary_mylocal-TWs.meta new file mode 100644 index 0000000..53588b6 --- /dev/null +++ b/tiddlers/dictionary_mylocal-TWs.meta @@ -0,0 +1,7 @@ +created: 20190129084044665 +creator: Mohammad +modified: 20190704155013533 +modifier: Mohammad +tags: exmp28 +title: dictionary/mylocal-TWs +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/dictionary_mylocal-TWs.tid b/tiddlers/dictionary_mylocal-TWs.tid deleted file mode 100644 index 9370a52..0000000 --- a/tiddlers/dictionary_mylocal-TWs.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20190129084044665 -creator: Mohammad -modified: 20190216180310001 -modifier: Mohammad -tags: exmp28 -title: dictionary/mylocal-TWs -type: application/x-tiddler-dictionary - -A Pocket Full of Tips: file:///G:/TW/Tobias%20Beer/a%20pocket%20full%20of%20tips-5.1.19.html -Filters: file:///G:/TW/Tobias%20Beer/Filters-5.1.19.html -My-Notes: file:///G:/TW/01.%20My-TW-Notes/myNotes.html -TW 5.1.19: file:///G:/TW/Archive/TW-Full/tiddlywiki-5.1.19.html \ No newline at end of file diff --git a/tiddlers/dst.svg.tid b/tiddlers/dst.svg.tid new file mode 100644 index 0000000..35c60c2 --- /dev/null +++ b/tiddlers/dst.svg.tid @@ -0,0 +1,25 @@ +caption: dst.svg (empty tiddler content type) +created: 20190608152635650 +creator: Mohammad +modified: 20190704155014376 +modifier: Mohammad +tags: exmp59 +title: dst.svg +type: text/vnd.tiddlywiki +url: view-source:https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/dst.svg + + + + + + + + + + + + + + + + diff --git a/tiddlers/examp22_font-setting b/tiddlers/examp22_font-setting new file mode 100644 index 0000000..fd0fffe --- /dev/null +++ b/tiddlers/examp22_font-setting @@ -0,0 +1,4 @@ +base-font-size:14px +base-line-height:1.5em +base-font-weight:400 +base-font-color:green diff --git a/tiddlers/examp22_font-setting.meta b/tiddlers/examp22_font-setting.meta new file mode 100644 index 0000000..d8d06b5 --- /dev/null +++ b/tiddlers/examp22_font-setting.meta @@ -0,0 +1,7 @@ +created: 20180802104100174 +creator: Mohammad +modified: 20190704155014303 +modifier: Mohammad +tags: exmp22 +title: examp22/font-setting +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/examp22_font-setting.tid b/tiddlers/examp22_font-setting.tid deleted file mode 100644 index 72f70c4..0000000 --- a/tiddlers/examp22_font-setting.tid +++ /dev/null @@ -1,12 +0,0 @@ -created: 20180802104100174 -creator: Mohammad -modified: 20190216180311069 -modifier: Mohammad -tags: exmp22 -title: examp22/font-setting -type: application/x-tiddler-dictionary - -base-font-size:14px -base-line-height:1.5em -base-font-weight:400 -base-font-color:green diff --git a/tiddlers/exmp02.tid b/tiddlers/exmp02.tid index ac33662..2cd3711 100644 --- a/tiddlers/exmp02.tid +++ b/tiddlers/exmp02.tid @@ -1,8 +1,7 @@ created: 20190201084019107 creator: Mohammad list: Exmp02-P01 Exmp02-P02 [[Make a List of Buttons]] [[Exmp02-P03 Space in Title]] -modified: 20190216180310549 +modified: 20190704155014539 modifier: Mohammad title: exmp02 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/exmp08_data01.tid b/tiddlers/exmp08_data01.tid index 984cc19..5d50997 100644 --- a/tiddlers/exmp08_data01.tid +++ b/tiddlers/exmp08_data01.tid @@ -1,7 +1,7 @@ created: 20181018140804662 creator: Mohammad description: do not delete, part of exmp08 -modified: 20190216180310522 +modified: 20190704155014511 modifier: Mohammad tags: exmp08 title: exmp08/data01 diff --git a/tiddlers/exmp20.tid b/tiddlers/exmp20.tid index bfd8269..6642bb2 100644 --- a/tiddlers/exmp20.tid +++ b/tiddlers/exmp20.tid @@ -1,8 +1,7 @@ created: 20190201055956807 creator: Mohammad list: [[Example 20: Using subfilter]] [[Subfilter Example]] -modified: 20190216180310488 +modified: 20190704155014484 modifier: Mohammad title: exmp20 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/exmp26_pdfs-path.tid b/tiddlers/exmp26_pdfs-path.tid index ef8502e..8f4a02f 100644 --- a/tiddlers/exmp26_pdfs-path.tid +++ b/tiddlers/exmp26_pdfs-path.tid @@ -1,7 +1,7 @@ created: 20190110174202507 creator: Mohammad description: This tiddler is part of exmp26 and set the pdf path. -modified: 20190216180310479 +modified: 20190704155014474 modifier: Mohammad tags: exmp26 title: exmp26/pdfs-path diff --git a/tiddlers/exmp35_data01.tid b/tiddlers/exmp35_data01.tid index eeed564..741fa02 100644 --- a/tiddlers/exmp35_data01.tid +++ b/tiddlers/exmp35_data01.tid @@ -1,6 +1,6 @@ created: 20180614111852856 creator: Mohammad -modified: 20190216180314719 +modified: 20190704155014440 modifier: Mohammad people: Eric tags: event diff --git a/tiddlers/exmp35_data02.tid b/tiddlers/exmp35_data02.tid index 12be75c..943209c 100644 --- a/tiddlers/exmp35_data02.tid +++ b/tiddlers/exmp35_data02.tid @@ -1,6 +1,6 @@ created: 20180614111309466 creator: Mohammad -modified: 20190216180314708 +modified: 20190704155014917 modifier: Mohammad people: Mohammad tags: event diff --git a/tiddlers/exmp37_data_months b/tiddlers/exmp37_data_months new file mode 100644 index 0000000..890fee7 --- /dev/null +++ b/tiddlers/exmp37_data_months @@ -0,0 +1,12 @@ +01: Jan +02: Feb +03: Mar +04: Apr +05: May +06: Jun +07: Jul +08: Aug +09: Sep +10: Oct +11: Nov +12: Dec \ No newline at end of file diff --git a/tiddlers/exmp37_data_months.meta b/tiddlers/exmp37_data_months.meta new file mode 100644 index 0000000..07c1dba --- /dev/null +++ b/tiddlers/exmp37_data_months.meta @@ -0,0 +1,8 @@ +created: 20190202181839626 +creator: Mohammad +description: This is part of example 37 do not delete +modified: 20190704155014908 +modifier: Mohammad +tags: exmp37 +title: exmp37/data/months +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/exmp37_data_months.tid b/tiddlers/exmp37_data_months.tid deleted file mode 100644 index 44c44ea..0000000 --- a/tiddlers/exmp37_data_months.tid +++ /dev/null @@ -1,21 +0,0 @@ -created: 20190202181839626 -creator: Mohammad -description: This is part of example 37 do not delete -modified: 20190216180314700 -modifier: Mohammad -tags: exmp37 -title: exmp37/data/months -type: application/x-tiddler-dictionary - -01: Jan -02: Feb -03: Mar -04: Apr -05: May -06: Jun -07: Jul -08: Aug -09: Sep -10: Oct -11: Nov -12: Dec \ No newline at end of file diff --git a/tiddlers/exmp39_acronyms_web.tid b/tiddlers/exmp39_acronyms_web similarity index 68% rename from tiddlers/exmp39_acronyms_web.tid rename to tiddlers/exmp39_acronyms_web index 82a6129..a6ff4ab 100644 --- a/tiddlers/exmp39_acronyms_web.tid +++ b/tiddlers/exmp39_acronyms_web @@ -1,12 +1,3 @@ -created: 20190207051536489 -creator: Mohammad -modified: 20190216180314692 -modifier: Mohammad -tags: exmp39 -title: exmp39/acronyms/web -type: application/x-tiddler-dictionary -url: https://en.wikipedia.org/wiki/List_of_information_technology_initialisms - ACL: Access control list ANSI: American National Standards Institute CLI: Command line interpreter diff --git a/tiddlers/exmp39_acronyms_web.meta b/tiddlers/exmp39_acronyms_web.meta new file mode 100644 index 0000000..81cbb87 --- /dev/null +++ b/tiddlers/exmp39_acronyms_web.meta @@ -0,0 +1,8 @@ +created: 20190207051536489 +creator: Mohammad +modified: 20190704155014902 +modifier: Mohammad +tags: exmp39 +title: exmp39/acronyms/web +type: application/x-tiddler-dictionary +url: https://en.wikipedia.org/wiki/List_of_information_technology_initialisms \ No newline at end of file diff --git a/tiddlers/exmp39_roman-numbers b/tiddlers/exmp39_roman-numbers new file mode 100644 index 0000000..4751a89 --- /dev/null +++ b/tiddlers/exmp39_roman-numbers @@ -0,0 +1,10 @@ +one: i +two: ii +three: iii +four: iv +five: v +six: vi +seven: vii +eight: viii +nine: ix +ten: x \ No newline at end of file diff --git a/tiddlers/exmp39_roman-numbers.meta b/tiddlers/exmp39_roman-numbers.meta new file mode 100644 index 0000000..f5ee8e1 --- /dev/null +++ b/tiddlers/exmp39_roman-numbers.meta @@ -0,0 +1,8 @@ +created: 20190207041908807 +creator: Mohammad +modified: 20190704155014892 +modifier: Mohammad +tags: exmp39 +title: exmp39/roman-numbers +type: application/x-tiddler-dictionary +url: https://en.wikipedia.org/wiki/Roman_numerals \ No newline at end of file diff --git a/tiddlers/exmp39_roman-numbers.tid b/tiddlers/exmp39_roman-numbers.tid deleted file mode 100644 index fdf29fc..0000000 --- a/tiddlers/exmp39_roman-numbers.tid +++ /dev/null @@ -1,19 +0,0 @@ -created: 20190207041908807 -creator: Mohammad -modified: 20190216180314610 -modifier: Mohammad -tags: exmp39 -title: exmp39/roman-numbers -type: application/x-tiddler-dictionary -url: https://en.wikipedia.org/wiki/Roman_numerals - -one: i -two: ii -three: iii -four: iv -five: v -six: vi -seven: vii -eight: viii -nine: ix -ten: x \ No newline at end of file diff --git a/tiddlers/exmp40_acronyms_image b/tiddlers/exmp40_acronyms_image new file mode 100644 index 0000000..9ec8cd4 --- /dev/null +++ b/tiddlers/exmp40_acronyms_image @@ -0,0 +1,3 @@ +PNG: Portable Network Graphics +TIFF: Tagged Image File Format +JPEG: Joint Photographic Experts Group \ No newline at end of file diff --git a/tiddlers/exmp40_acronyms_image.meta b/tiddlers/exmp40_acronyms_image.meta new file mode 100644 index 0000000..ee9c1dc --- /dev/null +++ b/tiddlers/exmp40_acronyms_image.meta @@ -0,0 +1,7 @@ +created: 20190207063706197 +creator: Mohammad +modified: 20190704155014885 +modifier: Mohammad +tags: exmp40 +title: exmp40/acronyms/image +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/exmp40_acronyms_image.tid b/tiddlers/exmp40_acronyms_image.tid deleted file mode 100644 index 2cb8ae7..0000000 --- a/tiddlers/exmp40_acronyms_image.tid +++ /dev/null @@ -1,11 +0,0 @@ -created: 20190207063706197 -creator: Mohammad -modified: 20190216180314596 -modifier: Mohammad -tags: exmp40 -title: exmp40/acronyms/image -type: application/x-tiddler-dictionary - -PNG: Portable Network Graphics -TIFF: Tagged Image File Format -JPEG: Joint Photographic Experts Group \ No newline at end of file diff --git a/tiddlers/exmp40_sample.json b/tiddlers/exmp40_sample.json new file mode 100644 index 0000000..002d7fd --- /dev/null +++ b/tiddlers/exmp40_sample.json @@ -0,0 +1,3 @@ +{ + "GIF": "Graphics Interchange Format" +} \ No newline at end of file diff --git a/tiddlers/exmp40_sample.json.meta b/tiddlers/exmp40_sample.json.meta new file mode 100644 index 0000000..3c237c9 --- /dev/null +++ b/tiddlers/exmp40_sample.json.meta @@ -0,0 +1,6 @@ +created: 20190207073712828 +creator: Mohammad +modified: 20190704155014874 +modifier: Mohammad +title: exmp40/sample +type: application/json \ No newline at end of file diff --git a/tiddlers/exmp40_sample.tid b/tiddlers/exmp40_sample.tid deleted file mode 100644 index be6d71e..0000000 --- a/tiddlers/exmp40_sample.tid +++ /dev/null @@ -1,10 +0,0 @@ -created: 20190207073712828 -creator: Mohammad -modified: 20190216180314580 -modifier: Mohammad -title: exmp40/sample -type: application/json - -{ - "GIF": "Graphics Interchange Format" -} \ No newline at end of file diff --git a/tiddlers/exmp41_country-codes b/tiddlers/exmp41_country-codes new file mode 100644 index 0000000..26d86bd --- /dev/null +++ b/tiddlers/exmp41_country-codes @@ -0,0 +1,3 @@ +USA: 840 +GBR: 826 +DEU: Not set \ No newline at end of file diff --git a/tiddlers/exmp41_country-codes.tid b/tiddlers/exmp41_country-codes.meta similarity index 51% rename from tiddlers/exmp41_country-codes.tid rename to tiddlers/exmp41_country-codes.meta index f892f29..fa3d32e 100644 --- a/tiddlers/exmp41_country-codes.tid +++ b/tiddlers/exmp41_country-codes.meta @@ -1,11 +1,7 @@ created: 20190207080935262 creator: Mohammad -modified: 20190216180314557 +modified: 20190704155014866 modifier: Mohammad tags: exmp41 title: exmp41/country-codes -type: application/x-tiddler-dictionary - -USA: 840 -GBR: 826 -DEU: Not set \ No newline at end of file +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/exmp42_sample_data b/tiddlers/exmp42_sample_data new file mode 100644 index 0000000..8874574 --- /dev/null +++ b/tiddlers/exmp42_sample_data @@ -0,0 +1,5 @@ +GBR: 826 +DEU: 276 +GRD: 308 +IRN: 364 +FRA: 250 \ No newline at end of file diff --git a/tiddlers/exmp42_sample_data.meta b/tiddlers/exmp42_sample_data.meta new file mode 100644 index 0000000..1621d6e --- /dev/null +++ b/tiddlers/exmp42_sample_data.meta @@ -0,0 +1,7 @@ +created: 20190207105125573 +creator: Mohammad +modified: 20190704155014861 +modifier: Mohammad +tags: exmp42 +title: exmp42/sample/data +type: application/x-tiddler-dictionary \ No newline at end of file diff --git a/tiddlers/exmp42_sample_data.tid b/tiddlers/exmp42_sample_data.tid deleted file mode 100644 index e7d78e4..0000000 --- a/tiddlers/exmp42_sample_data.tid +++ /dev/null @@ -1,13 +0,0 @@ -created: 20190207105125573 -creator: Mohammad -modified: 20190216180314543 -modifier: Mohammad -tags: exmp42 -title: exmp42/sample/data -type: application/x-tiddler-dictionary - -GBR: 826 -DEU: 276 -GRD: 308 -IRN: 364 -FRA: 250 \ No newline at end of file diff --git a/tiddlers/exmp43_macro_overloading.tid b/tiddlers/exmp43_macro_overloading.tid index 2774755..05f78ec 100644 --- a/tiddlers/exmp43_macro_overloading.tid +++ b/tiddlers/exmp43_macro_overloading.tid @@ -1,6 +1,6 @@ created: 20190207122616663 creator: Mohammad -modified: 20190216180314537 +modified: 20190704155014853 modifier: Mohammad tags: exmp43 $:/tags/Macro title: exmp43/macro/overloading diff --git a/tiddlers/exmp44_dictionary.tid b/tiddlers/exmp44_dictionary.json similarity index 59% rename from tiddlers/exmp44_dictionary.tid rename to tiddlers/exmp44_dictionary.json index 6decaa5..fbbe7c4 100644 --- a/tiddlers/exmp44_dictionary.tid +++ b/tiddlers/exmp44_dictionary.json @@ -1,11 +1,3 @@ -created: 20190207152844147 -creator: Mohammad -modified: 20190216180314527 -modifier: Mohammad -tags: exmp44 -title: exmp44/dictionary -type: application/json - { "father": "a male parent", "mother": "a woman who has given birth to a child ", diff --git a/tiddlers/exmp44_dictionary.json.meta b/tiddlers/exmp44_dictionary.json.meta new file mode 100644 index 0000000..f429bc6 --- /dev/null +++ b/tiddlers/exmp44_dictionary.json.meta @@ -0,0 +1,7 @@ +created: 20190207152844147 +creator: Mohammad +modified: 20190704155014844 +modifier: Mohammad +tags: exmp44 +title: exmp44/dictionary +type: application/json \ No newline at end of file diff --git a/tiddlers/exmp46.tid b/tiddlers/exmp46.tid index 20dccee..cf443e5 100644 --- a/tiddlers/exmp46.tid +++ b/tiddlers/exmp46.tid @@ -1,8 +1,7 @@ created: 20190208094810548 creator: Mohammad list: [[Sort Tiddlers in Tag Pill]] exmp46/macro [[Example 46: Sort Tiddlers in Tag Pill]] -modified: 20190216180314498 +modified: 20190704155014831 modifier: Mohammad title: exmp46 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/exmp46_macro.tid b/tiddlers/exmp46_macro.tid index 61ef7a8..71ee763 100644 --- a/tiddlers/exmp46_macro.tid +++ b/tiddlers/exmp46_macro.tid @@ -1,6 +1,6 @@ created: 20190208093315319 creator: Mohammad -modified: 20190216180314440 +modified: 20190704155014825 modifier: Mohammad tags: $:/tags/Macro exmp46 title: exmp46/macro diff --git a/tiddlers/exmp50.tid b/tiddlers/exmp50.tid index 52972fd..8eef88c 100644 --- a/tiddlers/exmp50.tid +++ b/tiddlers/exmp50.tid @@ -1,8 +1,7 @@ created: 20190223180533055 creator: Mohammad list: [[Create Tiddler with Sequence Number]] [[Example 50: Tiddler Title with Zero Padded Number]] -modified: 20190316114916137 +modified: 20190704155014814 modifier: Mohammad title: exmp50 -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/exmp55_data_tid01.tid b/tiddlers/exmp55_data_tid01.tid index a5f6ae6..f7e96ac 100644 --- a/tiddlers/exmp55_data_tid01.tid +++ b/tiddlers/exmp55_data_tid01.tid @@ -1,6 +1,6 @@ created: 20190324034910283 creator: Mohammad -modified: 20190406122515928 +modified: 20190704155014806 modifier: Mohammad tags: exmp55 title: exmp55/data/tid01 diff --git a/tiddlers/exmp55_data_tid02.tid b/tiddlers/exmp55_data_tid02.tid index 182714c..4af3886 100644 --- a/tiddlers/exmp55_data_tid02.tid +++ b/tiddlers/exmp55_data_tid02.tid @@ -1,6 +1,6 @@ created: 20190324035009033 creator: Mohammad -modified: 20190406122516522 +modified: 20190704155014797 modifier: Mohammad tags: exmp55 title: exmp55/data/tid02 diff --git a/tiddlers/exmp60_data_tid01.tid b/tiddlers/exmp60_data_tid01.tid new file mode 100644 index 0000000..75b1392 --- /dev/null +++ b/tiddlers/exmp60_data_tid01.tid @@ -0,0 +1,13 @@ +caption: Tid01 caption +created: 20190608194518299 +creator: Mohammad +modified: 20190704155014789 +modifier: Mohammad +tags: exmp60 +title: exmp60/data/tid01 +type: text/vnd.tiddlywiki + +This text pulls its content from caption and title fields of this tiddler: + +* Tiddler title: //{{!!title}}// +* Tiddler caption: //{{!!caption}}// \ No newline at end of file diff --git a/tiddlers/exmp60_data_tid02.tid b/tiddlers/exmp60_data_tid02.tid new file mode 100644 index 0000000..670812a --- /dev/null +++ b/tiddlers/exmp60_data_tid02.tid @@ -0,0 +1,13 @@ +caption: Tid02 caption +created: 20190608194953754 +creator: Mohammad +modified: 20190704155014783 +modifier: Mohammad +tags: exmp60 +title: exmp60/data/tid02 +type: text/vnd.tiddlywiki + +This text pulls its content from caption and title fields of this tiddler: + +* Tiddler title: //{{!!title}}// +* Tiddler caption: //{{!!caption}}// \ No newline at end of file diff --git a/tiddlers/exmp60_template-1168512280.tid b/tiddlers/exmp60_template-1168512280.tid new file mode 100644 index 0000000..c756ef1 --- /dev/null +++ b/tiddlers/exmp60_template-1168512280.tid @@ -0,0 +1,8 @@ +created: 20190608194848701 +creator: Mohammad +modified: 20190704155014767 +modifier: Mohammad +title: exmp60/template-1168512280 +type: text/vnd.tiddlywiki + +exmp60/data/tid01 \ No newline at end of file diff --git a/tiddlers/exmp60_template-1598991563.tid b/tiddlers/exmp60_template-1598991563.tid new file mode 100644 index 0000000..4e4bae3 --- /dev/null +++ b/tiddlers/exmp60_template-1598991563.tid @@ -0,0 +1,8 @@ +created: 20190608194854701 +creator: Mohammad +modified: 20190704155014761 +modifier: Mohammad +title: exmp60/template-1598991563 +type: text/vnd.tiddlywiki + +exmp60/data/tid01 \ No newline at end of file diff --git a/tiddlers/exmp60_template.tid b/tiddlers/exmp60_template.tid new file mode 100644 index 0000000..4702ce9 --- /dev/null +++ b/tiddlers/exmp60_template.tid @@ -0,0 +1,11 @@ +created: 20190608194430696 +creator: Mohammad +modified: 20190704155014776 +modifier: Mohammad +tags: exmp60 +title: exmp60/template +type: text/vnd.tiddlywiki + +<$tiddler tiddler=<>> +<$transclude mode="block" /> + \ No newline at end of file diff --git a/tiddlers/exmp63_data01.tid b/tiddlers/exmp63_data01.tid new file mode 100644 index 0000000..fc2fd47 --- /dev/null +++ b/tiddlers/exmp63_data01.tid @@ -0,0 +1,10 @@ +created: 20190629045505157 +creator: Mohammad +ingredient: sugar +modified: 20190704155014756 +modifier: Mohammad +tags: exmp63 +title: exmp63/data01 +type: text/vnd.tiddlywiki + +This is part of <> dont delete! \ No newline at end of file diff --git a/tiddlers/exmp63_data02.tid b/tiddlers/exmp63_data02.tid new file mode 100644 index 0000000..620cca6 --- /dev/null +++ b/tiddlers/exmp63_data02.tid @@ -0,0 +1,10 @@ +created: 20190629045611943 +creator: Mohammad +ingredient: salat +modified: 20190704155014747 +modifier: Mohammad +tags: exmp63 +title: exmp63/data02 +type: text/vnd.tiddlywiki + +This is part of <> dont delete! \ No newline at end of file diff --git a/tiddlers/exmp63_data03.tid b/tiddlers/exmp63_data03.tid new file mode 100644 index 0000000..88fad6e --- /dev/null +++ b/tiddlers/exmp63_data03.tid @@ -0,0 +1,10 @@ +created: 20190629045627658 +creator: Mohammad +ingredient: pepper +modified: 20190704155014741 +modifier: Mohammad +tags: exmp63 +title: exmp63/data03 +type: text/vnd.tiddlywiki + +This is part of <> dont delete! \ No newline at end of file diff --git a/tiddlers/exmp64_data_tid01.tid b/tiddlers/exmp64_data_tid01.tid new file mode 100644 index 0000000..7808fab --- /dev/null +++ b/tiddlers/exmp64_data_tid01.tid @@ -0,0 +1,12 @@ +created: 20190701063615916 +creator: Mohammad +modified: 20190704155014730 +modifier: Mohammad +tags: exmp64 +title: exmp64/data/tid01 +type: text/vnd.tiddlywiki + +.mycls{ +font-size: 16px; +text-align: center; +} \ No newline at end of file diff --git a/tiddlers/exmp64_data_tid02.tid b/tiddlers/exmp64_data_tid02.tid new file mode 100644 index 0000000..12d602d --- /dev/null +++ b/tiddlers/exmp64_data_tid02.tid @@ -0,0 +1,11 @@ +created: 20190701064338047 +creator: Mohammad +modified: 20190704155014717 +modifier: Mohammad +tags: exmp64 +title: exmp64/data/tid02 +type: text/vnd.tiddlywiki + +.mycls{ +color:green; +} \ No newline at end of file diff --git a/tiddlers/exmp64_data_tid03.tid b/tiddlers/exmp64_data_tid03.tid new file mode 100644 index 0000000..191b759 --- /dev/null +++ b/tiddlers/exmp64_data_tid03.tid @@ -0,0 +1,11 @@ +created: 20190701064422662 +creator: Mohammad +modified: 20190704155014710 +modifier: Mohammad +tags: exmp64 +title: exmp64/data/tid03 +type: text/vnd.tiddlywiki + +.mycls{ +line-height:1em; +} \ No newline at end of file diff --git a/tiddlers/exmp64_stylesheet.tid b/tiddlers/exmp64_stylesheet.tid new file mode 100644 index 0000000..f055bb8 --- /dev/null +++ b/tiddlers/exmp64_stylesheet.tid @@ -0,0 +1,16 @@ +created: 20190701064536130 +creator: Mohammad +modified: 20190704155014703 +modifier: Mohammad +tags: $:/tags/Stylesheet exmp64 +title: exmp64/stylesheet +type: text/vnd.tiddlywiki + +/* This stylesheet tiddler is generated conditionally! It populate all tiddlers tagged with exmp64 +and exclude the current tiddler and 'Example 64: Demo'. More sophisticated filters can be used*/ + + +<$list filter="[tag[exmp64]!tag[solution]!!title[Example 64: Demo]]"> +<$transclude/> + + diff --git a/tiddlers/exmp65_data01.tid b/tiddlers/exmp65_data01.tid new file mode 100644 index 0000000..47c8e88 --- /dev/null +++ b/tiddlers/exmp65_data01.tid @@ -0,0 +1,8 @@ +created: 20190702123438694 +creator: Mohammad +modified: 20190704155015020 +modifier: Mohammad +title: exmp65/data01 +type: text/vnd.tiddlywiki + +Part of <> Do not delete \ No newline at end of file diff --git a/tiddlers/exmp65_data02.tid b/tiddlers/exmp65_data02.tid new file mode 100644 index 0000000..b35aee5 --- /dev/null +++ b/tiddlers/exmp65_data02.tid @@ -0,0 +1,9 @@ +created: 20190702123512855 +creator: Mohammad +modified: 20190704155015014 +modifier: Mohammad +tags: exmp65 +title: exmp65/data02 +type: text/vnd.tiddlywiki + +Part of <> Do not delete \ No newline at end of file diff --git a/tiddlers/exmp65_data03.tid b/tiddlers/exmp65_data03.tid new file mode 100644 index 0000000..23270ca --- /dev/null +++ b/tiddlers/exmp65_data03.tid @@ -0,0 +1,8 @@ +created: 20190702123519384 +creator: Mohammad +modified: 20190704155015009 +modifier: Mohammad +title: exmp65/data03 +type: text/vnd.tiddlywiki + +Part of <> Do not delete \ No newline at end of file diff --git a/tiddlers/exmp65_state.tid b/tiddlers/exmp65_state.tid new file mode 100644 index 0000000..20130cb --- /dev/null +++ b/tiddlers/exmp65_state.tid @@ -0,0 +1,9 @@ +created: 20190702123654997 +creator: Mohammad +modified: 20190704155015003 +modifier: Mohammad +tags: exmp65 +title: exmp65/state +type: text/vnd.tiddlywiki + +exmp65/data02 \ No newline at end of file diff --git a/tiddlers/exmp66_data.tid b/tiddlers/exmp66_data.tid new file mode 100644 index 0000000..ef51a80 --- /dev/null +++ b/tiddlers/exmp66_data.tid @@ -0,0 +1,11 @@ +created: 20190704044135597 +creator: Mohammad +fa: dog +fb: cat +modified: 20190704155014998 +modifier: Mohammad +tags: exmp66 +title: exmp66/data +type: text/vnd.tiddlywiki + +This is part of <> do not delete it \ No newline at end of file diff --git a/tiddlers/exmp66_temp.tid b/tiddlers/exmp66_temp.tid new file mode 100644 index 0000000..52bf21b --- /dev/null +++ b/tiddlers/exmp66_temp.tid @@ -0,0 +1,10 @@ +created: 20190704044135597 +creator: Mohammad +description: part of example 66 donot delete +modified: 20190704155014991 +modifier: Mohammad +tags: exmp66 +title: exmp66/temp +type: text/vnd.tiddlywiki + +cat \ No newline at end of file diff --git a/tiddlers/exmp67_data.tid b/tiddlers/exmp67_data.tid new file mode 100644 index 0000000..6ec125a --- /dev/null +++ b/tiddlers/exmp67_data.tid @@ -0,0 +1,25 @@ +created: 20190704040650463 +creator: Mohammad +fa: One +fb: Three +modified: 20190704155014976 +modifier: Mohammad +tags: exmp67 +title: exmp67/data +type: text/vnd.tiddlywiki + +\define switch() +<$action-setfield $tiddler="exmp67/data" $field="fa" $value={{exmp67/state}} /> +<$action-setfield $tiddler="exmp67/data" $field="fb" $value="$(Temp)$" /> +\end + +<$set name=Temp tiddler="exmp67/data" field="fa"> +Select a value +<$select tiddler='exmp67/state' + actions=<> +> + <$list filter='One Two Three Four Five'> + + + + \ No newline at end of file diff --git a/tiddlers/exmp67_state.tid b/tiddlers/exmp67_state.tid new file mode 100644 index 0000000..9dad7a6 --- /dev/null +++ b/tiddlers/exmp67_state.tid @@ -0,0 +1,8 @@ +created: 20190704050514106 +creator: Mohammad +modified: 20190704155014961 +modifier: Mohammad +title: exmp67/state +type: text/vnd.tiddlywiki + +One \ No newline at end of file diff --git a/tiddlers/forum.tid b/tiddlers/forum.tid index fe16c4a..ebe97f7 100644 --- a/tiddlers/forum.tid +++ b/tiddlers/forum.tid @@ -1,5 +1,5 @@ created: 20180625161327258 -modified: 20190216180311941 +modified: 20190704155015120 title: forum type: text/vnd.tiddlywiki diff --git a/tiddlers/great icons.tid b/tiddlers/great icons.tid new file mode 100644 index 0000000..946ec8b --- /dev/null +++ b/tiddlers/great icons.tid @@ -0,0 +1,15 @@ +created: 20190626143654416 +creator: Mohammad +description: +developer: +modified: 20190704155015391 +modifier: Mohammad +tags: task Links +title: great icons +type: text/vnd.tiddlywiki +url: +wiki-name: + +https://thenounproject.com/search/?q=leaf&i=846554# + +<> \ No newline at end of file diff --git a/tiddlers/hP01.tid b/tiddlers/hP01.tid index 3e99cd3..04dfe08 100644 --- a/tiddlers/hP01.tid +++ b/tiddlers/hP01.tid @@ -1,6 +1,6 @@ created: 20190111155754906 creator: Mohammad -modified: 20190216180311361 +modified: 20190704155015478 modifier: Mohammad title: hP01 type: text/vnd.tiddlywiki diff --git a/tiddlers/hP02.tid b/tiddlers/hP02.tid index 8f6c6f8..737dc58 100644 --- a/tiddlers/hP02.tid +++ b/tiddlers/hP02.tid @@ -1,6 +1,6 @@ created: 20190111155845811 creator: Mohammad -modified: 20190216180311344 +modified: 20190704155015472 modifier: Mohammad title: hP02 type: text/vnd.tiddlywiki diff --git a/tiddlers/hirad.tid b/tiddlers/hirad.tid index b1a6d86..45d85b2 100644 --- a/tiddlers/hirad.tid +++ b/tiddlers/hirad.tid @@ -1,7 +1,7 @@ class: alert-primary created: 20181107081455107 creator: Mohammad -modified: 20190216180311617 +modified: 20190704155015281 modifier: Mohammad tags: title: hirad diff --git a/tiddlers/https___ooktech.com_jed_ExampleWikis_LinkCSSStuff_.tid b/tiddlers/https___ooktech.com_jed_ExampleWikis_LinkCSSStuff_.tid new file mode 100644 index 0000000..6ee0c73 --- /dev/null +++ b/tiddlers/https___ooktech.com_jed_ExampleWikis_LinkCSSStuff_.tid @@ -0,0 +1,17 @@ +created: 20190626031112171 +creator: Mohammad +description: +developer: +modified: 20190704155015713 +modifier: Mohammad +tags: task Links +title: https://ooktech.com/jed/ExampleWikis/LinkCSSStuff/ +type: text/vnd.tiddlywiki +url: +wiki-name: + +https://ooktech.com/jed/ExampleWikis/LinkCSSStuff/ + +* search and replace +* add remove tags +* good css \ No newline at end of file diff --git a/tiddlers/learning.tid b/tiddlers/learning.tid index b86b19f..93f6968 100644 --- a/tiddlers/learning.tid +++ b/tiddlers/learning.tid @@ -1,7 +1,7 @@ caption: Learning created: 20180616073408474 creator: Mohammad -modified: 20190216180315207 +modified: 20190704155015743 modifier: Mohammad tags: contents title: learning diff --git a/tiddlers/list.ico.meta b/tiddlers/list.ico.meta index aa045e2..95140e9 100644 --- a/tiddlers/list.ico.meta +++ b/tiddlers/list.ico.meta @@ -1,7 +1,7 @@ created: 20180621073257093 creator: Mohammad -modified: 20190216180314969 +modified: 20190704155016134 modifier: Mohammad tags: title: list.ico -type: image/x-icon +type: image/x-icon \ No newline at end of file diff --git a/tiddlers/macro for comparison.tid b/tiddlers/macro for comparison.tid index 85af60d..bcbc0d6 100644 --- a/tiddlers/macro for comparison.tid +++ b/tiddlers/macro for comparison.tid @@ -1,7 +1,7 @@ created: 20190214102856434 creator: Mohammad keywords: -modified: 20190224163833520 +modified: 20190704155016054 modifier: Mohammad responder: Mohammad tags: task solution diff --git a/tiddlers/macro_datatiddler_utility.tid b/tiddlers/macro_datatiddler_utility.tid index 7d62ae4..66785d4 100644 --- a/tiddlers/macro_datatiddler_utility.tid +++ b/tiddlers/macro_datatiddler_utility.tid @@ -1,6 +1,6 @@ created: 20190208064631203 creator: Mohammad -modified: 20190216180314847 +modified: 20190704155016011 modifier: Mohammad tags: exmp45 $:/tags/Macro title: macro/datatiddler/utility diff --git a/tiddlers/macro_docit.tid b/tiddlers/macro_docit.tid index e20d568..78e3623 100644 --- a/tiddlers/macro_docit.tid +++ b/tiddlers/macro_docit.tid @@ -1,6 +1,6 @@ created: 20190214072259710 creator: Mohammad -modified: 20190224163833483 +modified: 20190704155016005 modifier: Mohammad tags: $:/tags/Macro title: macro/docit diff --git a/tiddlers/macro_floating-images.tid b/tiddlers/macro_floating-images.tid index 34d9cf5..1ad95d9 100644 --- a/tiddlers/macro_floating-images.tid +++ b/tiddlers/macro_floating-images.tid @@ -1,6 +1,6 @@ created: 20150320143808221 creator: Mohammad -modified: 20190216180314840 +modified: 20190704155015998 modifier: Mohammad tags: $:/tags/Macro floating-images title: macro/floating-images diff --git a/tiddlers/macro_rank.tid b/tiddlers/macro_rank.tid index 7d34e6b..e9b9f69 100644 --- a/tiddlers/macro_rank.tid +++ b/tiddlers/macro_rank.tid @@ -1,6 +1,6 @@ created: 20181214165827926 creator: Mohammad -modified: 20190216180314835 +modified: 20190704155015991 modifier: Mohammad tags: $:/tags/Macro title: macro/rank diff --git a/tiddlers/macro_sort-tagged-tiddlers.tid b/tiddlers/macro_sort-tagged-tiddlers.tid index 63f1446..5086cb7 100644 --- a/tiddlers/macro_sort-tagged-tiddlers.tid +++ b/tiddlers/macro_sort-tagged-tiddlers.tid @@ -1,7 +1,7 @@ created: 20190211071143619 creator: Mohammad list: -modified: 20190216180314824 +modified: 20190704155016295 modifier: Mohammad tags: exmp47 $:/tags/TagDropdown title: macro/sort-tagged-tiddlers diff --git a/tiddlers/myMacros5.tid b/tiddlers/myMacros5.tid deleted file mode 100644 index 4280fe4..0000000 --- a/tiddlers/myMacros5.tid +++ /dev/null @@ -1,22 +0,0 @@ -created: 20180502063442372 -creator: Mohammad -modified: 20190216180315843 -modifier: Mohammad -tags: macro tiddlyfor $:/tags/Macro -title: myMacros5 -type: text/vnd.tiddlywiki - -\define figure(image,caption:"") -
    -[img[$image$]] -

    -$caption$ -

    -
    -\end - - -!! Experimenting with macro -This tiddler contains the user defined macros. Edit to see the code. - -* figure \ No newline at end of file diff --git a/tiddlers/myTab.tid b/tiddlers/myTab.tid deleted file mode 100644 index cb1181e..0000000 --- a/tiddlers/myTab.tid +++ /dev/null @@ -1,32 +0,0 @@ -created: 20180430034354812 -creator: Mohammad -modified: 20190216180315748 -modifier: Mohammad -tags: tutorial $:/tags/SideBar -title: myTab -type: text/vnd.tiddlywiki - -
    - -!! How to add a new Tab to sidebar - -If you use caption, it will be used for Tab caption - -# Create a tiddler -# Tag it with `$:/tags/SideBar` -# Populate with your desired data - -That is it - -!! How to add an expandable table of contents -Put the below code inside the new tab tiddler. Replace the "myTab" with your desired tag - -``` -
    -<> -
    -``` -
    - -^^Edit at: [[myTab]] -^^ diff --git a/tiddlers/myTemplate_help_xxx.tid b/tiddlers/myTemplate_help_xxx.tid index 5144b47..345b31e 100644 --- a/tiddlers/myTemplate_help_xxx.tid +++ b/tiddlers/myTemplate_help_xxx.tid @@ -1,7 +1,7 @@ caption: xxx created: 20181201192139073 creator: Mohammad -modified: 20190216180315730 +modified: 20190704155016192 modifier: Mohammad tags: title: myTemplate/help/xxx diff --git a/tiddlers/myTiddler.tid b/tiddlers/myTiddler.tid index 5589869..ccf9a65 100644 --- a/tiddlers/myTiddler.tid +++ b/tiddlers/myTiddler.tid @@ -1,6 +1,6 @@ created: 20190221144500914 creator: Mohammad -modified: 20190224163833319 +modified: 20190704155016182 modifier: Mohammad tags: trash title: myTiddler diff --git a/tiddlers/myWideClass.css.meta b/tiddlers/myWideClass.css.meta index a2d42f0..ab543fe 100644 --- a/tiddlers/myWideClass.css.meta +++ b/tiddlers/myWideClass.css.meta @@ -1,7 +1,7 @@ created: 20180729044434245 creator: Mohammad -modified: 20190216180315639 +modified: 20190704155016168 modifier: Mohammad tags: $:/tags/Stylesheet title: myWideClass -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/myplugins.tid b/tiddlers/myplugins.tid index 000b84d..ec42c13 100644 --- a/tiddlers/myplugins.tid +++ b/tiddlers/myplugins.tid @@ -1,7 +1,7 @@ caption: Coding created: 20181115033040511 creator: Mohammad -modified: 20190216180315769 +modified: 20190704155016198 modifier: Mohammad tags: $:/tags/SideBar title: myplugins diff --git a/tiddlers/mytitlesearch.tid b/tiddlers/mytitlesearch.tid index da119ba..6be89c2 100644 --- a/tiddlers/mytitlesearch.tid +++ b/tiddlers/mytitlesearch.tid @@ -1,7 +1,6 @@ created: 20180820164935948 creator: Mohammad -modified: 20190216180315710 +modified: 20190704155016176 modifier: Mohammad title: mytitlesearch -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/mywiki.tid b/tiddlers/mywiki.tid index 4805084..f8cf957 100644 --- a/tiddlers/mywiki.tid +++ b/tiddlers/mywiki.tid @@ -1,9 +1,8 @@ caption: My Plugins created: 20180616152846478 creator: Mohammad -modified: 20190216180315624 +modified: 20190704155016161 modifier: Mohammad tags: contents title: mywiki -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/nesting the effect of brackets.tid b/tiddlers/nesting the effect of brackets.tid index dd456f8..7cb433a 100644 --- a/tiddlers/nesting the effect of brackets.tid +++ b/tiddlers/nesting the effect of brackets.tid @@ -1,7 +1,7 @@ created: 20190303185445915 creator: Mohammad keywords: -modified: 20190316114919198 +modified: 20190704155016409 modifier: Mohammad responder: Jeremy Ruston tags: solution diff --git a/tiddlers/osa.svg b/tiddlers/osa.svg new file mode 100644 index 0000000..f74cf22 --- /dev/null +++ b/tiddlers/osa.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tiddlers/osa.svg.meta b/tiddlers/osa.svg.meta new file mode 100644 index 0000000..304e147 --- /dev/null +++ b/tiddlers/osa.svg.meta @@ -0,0 +1,9 @@ +caption: Osa.svg (content type has been set to image/svg+xml) +created: 20190608142939136 +creator: Mohammad +modified: 20190704155016476 +modifier: Mohammad +tags: exmp59 +title: osa.svg +type: image/svg+xml +url: https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/osa.svg \ No newline at end of file diff --git a/tiddlers/padding with zero.tid b/tiddlers/padding with zero.tid index bbfb8ef..1e3c9b9 100644 --- a/tiddlers/padding with zero.tid +++ b/tiddlers/padding with zero.tid @@ -1,6 +1,6 @@ created: 20190215195923648 creator: Mohammad -modified: 20190224163833956 +modified: 20190704155016460 modifier: Mohammad tags: task title: padding with zero diff --git a/tiddlers/pig.png.meta b/tiddlers/pig.png.meta index 42229cd..ee42f1b 100644 --- a/tiddlers/pig.png.meta +++ b/tiddlers/pig.png.meta @@ -1,5 +1,5 @@ caption: Pig Icon created: 20180807130852828 -modified: 20190216180317071 +modified: 20190704155016693 title: pig.png -type: image/png +type: image/png \ No newline at end of file diff --git a/tiddlers/python.svg.tid b/tiddlers/python.svg.tid new file mode 100644 index 0000000..7dfb8f6 --- /dev/null +++ b/tiddlers/python.svg.tid @@ -0,0 +1,28 @@ +caption: Python svg (content type has not been set) +created: 20190608143807306 +creator: Mohammad +modified: 20190704155016643 +modifier: Mohammad +tags: exmp59 +title: python.svg +type: text/vnd.tiddlywiki +url: view-source:https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/python.svg + + + + + + + + + + + + + + + + + + + diff --git a/tiddlers/reading.tid b/tiddlers/reading.tid index 5214f57..10f6808 100644 --- a/tiddlers/reading.tid +++ b/tiddlers/reading.tid @@ -1,9 +1,8 @@ caption: Readings created: 20190201051731387 creator: Mohammad -modified: 20190216180316801 +modified: 20190704155016630 modifier: Mohammad tags: contents title: reading -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/search/search.tid b/tiddlers/search.tid similarity index 97% rename from tiddlers/search/search.tid rename to tiddlers/search.tid index c892751..508d4ff 100644 --- a/tiddlers/search/search.tid +++ b/tiddlers/search.tid @@ -2,7 +2,7 @@ caption: Search operation created: 20190124041504097 creator: Mohammad list: [[Simple search]] [[Search Case Sensitive]] [[Search in Field]] [[Search in Several Fields]] [[Search in All Fields]] [[Search System or Non-System Tiddlers]] [[Search Titles Followed by Text]] [[Tips: Advanced Search with Search Operator]] [[Customize Search Result]] -modified: 20190216180316363 +modified: 20190704155016933 modifier: Mohammad tags: zolive $:/.mr/toc title: search diff --git a/tiddlers/search/Search in Official Tiddlywiki Site.tid b/tiddlers/search/Search in Official Tiddlywiki Site.tid deleted file mode 100644 index 8ffd82c..0000000 --- a/tiddlers/search/Search in Official Tiddlywiki Site.tid +++ /dev/null @@ -1,12 +0,0 @@ -class: AliceBlue -created: 20190124111327541 -creator: Mohammad -modified: 20190216180316234 -modifier: Mohammad -tags: -title: Search in Official Tiddlywiki Site -type: text/vnd.tiddlywiki - -Enter a keyword and click on the created link to search the Tiddlywiki toolmap. - -{{Search Tiddlywiki.com}} diff --git a/tiddlers/select-demo-268180185.tid b/tiddlers/select-demo-268180185.tid index fa6b18c..726f656 100644 --- a/tiddlers/select-demo-268180185.tid +++ b/tiddlers/select-demo-268180185.tid @@ -1,6 +1,6 @@ created: 20190131190510159 creator: Mohammad -modified: 20190224163834183 +modified: 20190704155017061 modifier: Mohammad title: select-demo-268180185 type: text/vnd.tiddlywiki diff --git a/tiddlers/snippet_macrocall-wikitext-example.tid b/tiddlers/snippet_macrocall-wikitext-example.tid index f8514e2..10ce22b 100644 --- a/tiddlers/snippet_macrocall-wikitext-example.tid +++ b/tiddlers/snippet_macrocall-wikitext-example.tid @@ -1,7 +1,7 @@ caption: macrocall wikitext-example created: 20181023161605661 creator: Mohammad -modified: 20190216180317397 +modified: 20190704155017113 modifier: Mohammad tags: $:/tags/TextEditor/Snippet title: snippet/macrocall-wikitext-example diff --git a/tiddlers/snippet_wikitext-macro.tid b/tiddlers/snippet_wikitext-macro.tid index fd42eeb..27c78c0 100644 --- a/tiddlers/snippet_wikitext-macro.tid +++ b/tiddlers/snippet_wikitext-macro.tid @@ -1,7 +1,7 @@ caption: wikitext-example created: 20181007154126921 creator: Mohammad -modified: 20190216180317391 +modified: 20190704155017108 modifier: Mohammad tags: $:/tags/TextEditor/Snippet title: snippet/wikitext-macro diff --git a/tiddlers/solution.tid b/tiddlers/solution.tid index 2c361d5..6e4d015 100644 --- a/tiddlers/solution.tid +++ b/tiddlers/solution.tid @@ -1,9 +1,8 @@ created: 20190211080236686 creator: Mohammad -list: 100.50 [[A Dictionary Project]] [[A Gallery of Core Imgaes]] [[A Rdio Button Macro]] [[A Simple Time Stamp]] [[Activate the Spell Check with Codemirror]] [[Add Filter Search into Sidebar]] [[Add More Languages to Highlight.js]] [[Add or Remove Tiddler Fields]] [[Add Remove Tags]] [[Another DataTiddler and Tiddler Widget]] [[Append Items to List Field]] [[Appending Tiddlers to a List]] [[Apply Custom Styles Dynamically]] [[Batch Delete Export Tiddlers]] [[Batch Edit Tiddler Title]] [[Beset Pattern in Actions and Button Widget]] [[Better Performance in Filter Run]] [[Bookmarks with ID and Links]] [[Build Name from Complex Parts]] [[Buttons to Sort Tiddlers in Tagpill]] [[Camel Case Words in List Output]] [[Canonical URI and External Image]] [[Center Table Horizontally]] [[Change Body Font Size]] [[Change Password on Tiddlyspot]] [[Change the Color of Sidebar Tabs]] [[Checkbox with Three State]] [[Checkboxes Like Radio Button]] [[Chnage Colors and Styles of Control Buttons]] [[Close all Tiddlers and Open Home]] [[Colorful Tab]] Colors [[Comma Separated List of Tiddlers]] [[Compare Variables for Equality and Inequality]] [[Concatenate Different Tiddlers in one Tiddler]] [[Concatenate the Contents of Different Tiddlers]] [[Concatenating Text to Make Dynamic URLs]] [[Conditional Output]] [[Conditionally Display The Tiddler Contents]] [[Consolitate the Current Story to Default]] [[Create a New Tiddler Using Input Box]] [[Create a Simple Comment Button]] [[Create a Tiddler if not Existed]] [[Create External Images from A Directory]] [[Create New Tiddler and TextReference in Tags]] [[Create Tiddler with Title and Time]] [[CSS and Blockquote]] [[CSS for Last Char of Title]] [[CSS inside Macro]] [[Custom Filter in Advanced Search]] [[Custom Languages and Brushes for highlight.js]] [[Customize Look of Editor 5.1.18]] [[Customize Search Result]] [[DataTiddler Terminology]] [[DataTiddler Value Set to a Variable]] [[Date in Custom Field]] [[Defualt Tiddlers as a Blog]] [[Delete a List of Tiddlers]] [[Delete Tiddlers]] [[Delete Tiddlers Based on a Field]] [[Disable Dragability of an Element]] [[Display All Core Images in a Table]] [[Display Certain Level of Tag Tree]] [[Display Tagged Tiddlers Using ViewTemplate]] [[Drag and Drop of a Whole File]] [[Drag and Drop of Tag Pills]] [[Embed SVG ICONS BUTTONS]] [[Empty Filter]] [[Exact Phrase Search]] [[Exclude Tag in TOC Macro]] [[Export Latest Changes in Current Session]] [[External Images and External Thumbnails]] [[Field Value as DataTiddler Index]] [[Filter Returns Only the First suffix word]] [[Filtered Transclusion]] [[Find DataTiddlers with Certain Index/Value]] [[Five Most Important Widgets]] [[Float Images]] [[Floating Images HowTo]] [[Folding Editor]] [[Generic Template]] [[Globally and Private Macro]] [[Go to Tab]] [[Hacked Table of Content Macro]] [[Hide a Field in Edit Mode]] [[Hide Count Output If Zero]] [[Hide Username Date and Tags in Printing]] [[How Exclude Some Indexes in Filter]] [[How Sidebar Works]] [[How to Truncate Long String with Ellipsis]] [[How to Write a Plugin]] [[How to write Widgets]] [[How Use Now Macro inside a Filter]] [[Html5 Date Attribute]] [[Html5 Detail Tag]] [[Html5 Forms Elements]] [[If Field Macro]] [[If Then Else]] [[If Then Else Action Macro]] [[Iframe and Tiddlers Contains a Html Page]] [[Image with Tooltip]] [[Import JSON Tiddler]] [[Introduction to Tiddlywiki]] [[Iterate DataTiddler Indexes]] [[Javascript Macro]] [[Line break in Filters Attributes]] [[Link to a PDF File on a Specific Page]] [[List all Tiddlers Created in x Days]] [[List All Tiddlers Created or Modified in Last x Days]] [[List and Transclude Tiddlers with Today Date]] [[List Contact Tiddlers Based on a Category]] [[List Results into Hardcopy]] [[List the Last Ten Modified Tiddlers]] [[List Tiddler Tags Based on a Field]] [[List Tiddlers with Their Tags as Tagpill]] [[Load a Local HTML File in an Iframe]] [[Logical Opertaion with Filters]] [[Macro Overloading]] [[Macro with Variable Number of Arguments]] [[Maximum Width of TOC]] [[More on Conditional Output]] [[Multiple Wiki and Browser Tab Management]] [[Navigate to a Tiddler with Space in Title]] [[Nested Referencing Fields]] [[Notes on Macro]] [[Notes on Using External Web Content v1]] [[Notification Duration]] [[Online Dictionary Lookup]] [[Open All Tiddlers Meet Some Criteria]] [[Open all Tiddlers with Tag-X]] [[Order of Stylesheets in Tiddlywiki]] [[PDF Document Link]] [[Recent Tab and Bold Timeline]] [[Regexp to Find all Tiddlers with .ext in Their Name]] [[Remove Blue Border from Button]] [[Remove Surrounding Quotes]] [[Rewrite of TOC Macro]] [[Save the Filter Output]] [[Search DataTiddler Using regexp]] [[Search in Fields]] [[Search in Local Wiki Files]] [[Search in Tags]] [[Search Titles Followed by Text]] [[Select Icon]] [[Setting Empty Value for a Macro Parameter]] [[Shorthand Syntax Summary]] [[Show All Tags in a Wiki]] [[Show Icons of Tiddler]] [[Simple Comparison of Two or More Variables]] [[Simple Comparison of Two Variables]] [[Simple Template with List]] [[Size of Icons in Tiddler Toolbar]] [[Slider Macro]] [[Slider Macro II]] [[Slider Macro III]] [[Sort Tag Wizard]] [[Sort Tiddlers in Tag Pill]] [[Specification for Autonumbering References]] [[Spellcheck Preview in Codemirror]] [[Split Date into Day Month Year]] [[Stitch Tiddlers together for Printing]] [[Story River in Two Columns]] [[Stylesheet for Print Media]] [[Stylesheet Tiddler or Inline CSS]] [[Stylesheet with Conditional Rules]] [[Subfilter Example]] [[SVG Images Transclusion]] [[Switch Tags without Change in Timestamp]] [[Syntax for Using Brackets]] [[Table Class by Variable]] [[Table Tool]] [[Tag Hierachy and Table of Contents]] [[Template and Tiddler Widget]] [[Text Formatting with Macro]] [[The has Operator Behaviour]] [[The List Field]] [[Tiddler Associated with a Button]] [[Tiddler Count to Dictate HTML Table Rowspan]] [[Tiddler TOC]] [[Tiddler Toolbar Icon]] [[Tiddlywiki Favicon]] [[Timimi and Snapshot]] [[Tips: Advanced Search with Search Operator]] [[TOC Macro and Exclude Filter]] [[Top Level Tiddlers]] [[Transclude a Missing Tiddler]] [[Transclude Tiddlers Into Table]] [[Transcluded Codeblock]] [[Transclusion by Template]] [[TW and Search URLs]] [[TW5 is Really Two Separate Languages]] [[Tweak Sidebar Background]] [[Use Variable in CSS Calc Function]] [[Using Google Font with Tiddywiki]] [[Using Named Colors]] [[Using Radio Button]] [[Using Svg in CSS Content Properties]] [[Using Tiddler Widget with DataTiddler]] [[Variable as DataTiddler Index]] [[Variable Class Attribute for Html Tag]] [[Variable Overriding]] [[Variable Reference inside Macro]] [[Variables vs. Parameters]] [[Variables, Fields and Filters in TiddlyWiki]] Widdly [[Widgets in Conventional Programming]] [[Wikilink ans Rule]] -modified: 20190316114919418 +list: 100.50 [[A Dictionary Project]] [[A Gallery of Core Imgaes]] [[A Rdio Button Macro]] [[A Simple Time Stamp]] [[Activate the Spell Check with Codemirror]] [[Add Filter Search into Sidebar]] [[Manually Add More Language Brushes to Highlight.js]] [[Add or Remove Tiddler Fields]] [[Add Remove Tags]] [[Another DataTiddler and Tiddler Widget]] [[Append Items to List Field]] [[Appending Tiddlers to a List]] [[Apply Custom Styles Dynamically]] [[Batch Delete Export Tiddlers]] [[Batch Edit Tiddler Title]] [[Beset Pattern in Actions and Button Widget]] [[Better Performance in Filter Run]] [[Bookmarks with ID and Links]] [[Build Name from Complex Parts]] [[Buttons to Sort Tiddlers in Tagpill]] [[Camel Case Words in List Output]] [[Canonical URI and External Image]] [[Center Table Horizontally]] [[Change Body Font Size]] [[Change Password on Tiddlyspot]] [[Change the Color of Sidebar Tabs]] [[Checkbox with Three State]] [[Checkboxes Like Radio Button]] [[Chnage Colors and Styles of Control Buttons]] [[Close all Tiddlers and Open Home]] [[Colorful Tab]] Colors [[Comma Separated List of Tiddlers]] [[Compare Variables for Equality and Inequality]] [[Concatenate Different Tiddlers in one Tiddler]] [[Concatenate the Contents of Different Tiddlers]] [[Concatenating Text to Make Dynamic URLs]] [[Conditional Output]] [[Conditionally Display The Tiddler Contents]] [[Consolitate the Current Story to Default]] [[Create a New Tiddler Using Input Box]] [[Create a Simple Comment Button]] [[Create a Tiddler if not Existed]] [[Create External Images from A Directory]] [[Create New Tiddler and TextReference in Tags]] [[Create Tiddler with Title and Time]] [[CSS and Blockquote]] [[CSS for Last Char of Title]] [[CSS inside Macro]] [[Custom Filter in Advanced Search]] [[Add Language Brushes to Highlight.js Using Startup Modules]] [[Customize Look of Editor 5.1.18]] [[Customize Search Result]] [[DataTiddler Terminology]] [[DataTiddler Value Set to a Variable]] [[Date in Custom Field]] [[Defualt Tiddlers as a Blog]] [[Delete a List of Tiddlers]] [[Delete Tiddlers]] [[Delete Tiddlers Based on a Field]] [[Disable Dragability of an Element]] [[Display All Core Images in a Table]] [[Display Certain Level of Tag Tree]] [[Display Tagged Tiddlers Using ViewTemplate]] [[Drag and Drop of a Whole File]] [[Drag and Drop of Tag Pills]] [[SVG ICONS as BUTTONS]] [[Empty Filter]] [[Exact Phrase Search]] [[Exclude Tag in TOC Macro]] [[Export Latest Changes in Current Session]] [[External Images and External Thumbnails]] [[Field Value as DataTiddler Index]] [[Filter Returns Only the First suffix word]] [[Filtered Transclusion]] [[Find DataTiddlers with Certain Index/Value]] [[Five Most Important Widgets]] [[Float Images]] [[Floating Images HowTo]] [[Folding Editor]] [[Generic Template]] [[Globally and Private Macro]] [[Go to Tab]] [[Hacked Table of Content Macro]] [[Hide a Field in Edit Mode]] [[Hide Count Output If Zero]] [[Hide Username Date and Tags in Printing]] [[How Exclude Some Indexes in Filter]] [[How Sidebar Works]] [[How to Truncate Long String with Ellipsis]] [[How to Write a Plugin]] [[How to write Widgets]] [[How Use Now Macro inside a Filter]] [[Html5 Date Attribute]] [[Html5 Detail Tag]] [[Html5 Forms Elements]] [[If Field Macro]] [[If Then Else]] [[If Then Else Action Macro]] [[Iframe and Tiddlers Contains a Html Page]] [[Image with Tooltip]] [[Import JSON Tiddler]] [[Introduction to Tiddlywiki]] [[Iterate DataTiddler Indexes]] [[Javascript Macro]] [[Line break in Filters Attributes]] [[Link to a PDF File on a Specific Page]] [[List all Tiddlers Created in x Days]] [[List All Tiddlers Created or Modified in Last x Days]] [[List and Transclude Tiddlers with Today Date]] [[List Contact Tiddlers Based on a Category]] [[List Results into Hardcopy]] [[List the Last Ten Modified Tiddlers]] [[List Tiddler Tags Based on a Field]] [[List Tiddlers with Their Tags as Tagpill]] [[Load a Local HTML File in an Iframe]] [[Logical Opertaion with Filters]] [[Macro Overloading]] [[Macro with Variable Number of Arguments]] [[Maximum Width of TOC]] [[More on Conditional Output]] [[Multiple Wiki and Browser Tab Management]] [[Navigate to a Tiddler with Space in Title]] [[Nested Referencing Fields]] [[Notes on Macro]] [[Notes on Using External Web Content v1]] [[Notification Duration]] [[Online Dictionary Lookup]] [[Open All Tiddlers Meet Some Criteria]] [[Open all Tiddlers with Tag-X]] [[Order of Stylesheets in Tiddlywiki]] [[PDF Document Link]] [[Recent Tab and Bold Timeline]] [[Regexp to Find all Tiddlers with .ext in Their Name]] [[Remove Blue Border from Button]] [[Remove Surrounding Quotes]] [[Rewrite of TOC Macro]] [[Save the Filter Output]] [[Search DataTiddler Using regexp]] [[Search in Fields]] [[Search in Local Wiki Files]] [[Search in Tags]] [[Search Titles Followed by Text]] [[Select Icon]] [[Setting Empty Value for a Macro Parameter]] [[Shorthand Syntax Summary]] [[Show All Tags in a Wiki]] [[Show Icons of Tiddler]] [[Simple Comparison of Two or More Variables]] [[Simple Comparison of Two Variables]] [[Simple Template with List]] [[Size of Icons in Tiddler Toolbar]] [[Slider Macro]] [[Slider Macro II]] [[Slider Macro III]] [[Sort Tag Wizard]] [[Sort Tiddlers in Tag Pill]] [[Specification for Autonumbering References]] [[Spellcheck Preview in Codemirror]] [[Split Date into Day Month Year]] [[Stitch Tiddlers together for Printing]] [[Story River in Two Columns]] [[Stylesheet for Print Media]] [[Stylesheet Tiddler or Inline CSS]] [[Stylesheet with Conditional Rules]] [[Subfilter Example]] [[SVG Images Transclusion]] [[Switch Tags without Change in Timestamp]] [[Syntax for Using Brackets]] [[Table Class by Variable]] [[Table Tool]] [[Tag Hierachy and Table of Contents]] [[Template and Tiddler Widget]] [[Text Formatting with Macro]] [[The has Operator Behaviour]] [[The List Field]] [[Tiddler Associated with a Button]] [[Tiddler Count to Dictate HTML Table Rowspan]] [[Tiddler TOC]] [[Tiddler Toolbar Icon]] [[Tiddlywiki Favicon]] [[Timimi and Snapshot]] [[Tips: Advanced Search with Search Operator]] [[TOC Macro and Exclude Filter]] [[Top Level Tiddlers]] [[Transclude a Missing Tiddler]] [[Transclude Tiddlers Into Table]] [[Transcluded Codeblock]] [[Transclusion by Template]] [[TW and Search URLs]] [[TW5 is Really Two Separate Languages]] [[Tweak Sidebar Background]] [[Use Variable in CSS Calc Function]] [[Using Google Font with Tiddywiki]] [[Using Named Colors]] [[Using Radio Button]] [[Using Svg in CSS Content Properties]] [[Using Tiddler Widget with DataTiddler]] [[Variable as DataTiddler Index]] [[Variable Class Attribute for Html Tag]] [[Variable Overriding]] [[Variable Reference inside Macro]] [[Variables vs. Parameters]] [[Variables, Fields and Filters in TiddlyWiki]] Widdly [[Widgets in Conventional Programming]] [[Wikilink ans Rule]] +modified: 20190704155017102 modifier: Mohammad tags: title: solution -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/splash screen.tid b/tiddlers/splash screen.tid index 09ebdc0..b6dad70 100644 --- a/tiddlers/splash screen.tid +++ b/tiddlers/splash screen.tid @@ -1,6 +1,6 @@ created: 20181206190333344 creator: Mohammad -modified: 20190224163834746 +modified: 20190704155017243 modifier: Mohammad tags: $:/tags/RawMarkupWikified/TopBody title: splash screen diff --git a/tiddlers/star.svg b/tiddlers/star.svg index 51d8e79..73d5a91 100644 --- a/tiddlers/star.svg +++ b/tiddlers/star.svg @@ -1,9 +1,3 @@ - - - + + + \ No newline at end of file diff --git a/tiddlers/star.svg.meta b/tiddlers/star.svg.meta index 74fb72d..b2afd49 100644 --- a/tiddlers/star.svg.meta +++ b/tiddlers/star.svg.meta @@ -1,6 +1,6 @@ created: 20181214165440040 creator: Mohammad -modified: 20190224163834734 +modified: 20190704155017225 modifier: Mohammad title: star.svg -type: image/svg+xml +type: image/svg+xml \ No newline at end of file diff --git a/tiddlers/stylesheet_Exmp17-Tooltip.css.meta b/tiddlers/stylesheet_Exmp17-Tooltip.css.meta index 2206c0f..c48c438 100644 --- a/tiddlers/stylesheet_Exmp17-Tooltip.css.meta +++ b/tiddlers/stylesheet_Exmp17-Tooltip.css.meta @@ -1,7 +1,7 @@ created: 20181216111449436 creator: Mohammad -modified: 20190224163834646 +modified: 20190704155017349 modifier: Mohammad tags: exmp17 $:/tags/Stylesheet title: stylesheet/Exmp17-Tooltip -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_customClass.css.meta b/tiddlers/stylesheet_customClass.css.meta index 725041c..07fb92b 100644 --- a/tiddlers/stylesheet_customClass.css.meta +++ b/tiddlers/stylesheet_customClass.css.meta @@ -1,7 +1,7 @@ created: 20190208071944214 creator: Mohammad -modified: 20190224163834669 +modified: 20190704155017367 modifier: Mohammad tags: exmp45 $:/tags/Stylesheet title: stylesheet/customClass -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_dynamically-read-from-datatiddler.tid b/tiddlers/stylesheet_dynamically-read-from-datatiddler.tid index 0c85596..32a8d9a 100644 --- a/tiddlers/stylesheet_dynamically-read-from-datatiddler.tid +++ b/tiddlers/stylesheet_dynamically-read-from-datatiddler.tid @@ -1,6 +1,6 @@ created: 20180802104452237 creator: Mohammad -modified: 20190224163834661 +modified: 20190704155017361 modifier: Mohammad tags: exmp22 $:/tags/Stylesheet title: stylesheet/dynamically-read-from-datatiddler diff --git a/tiddlers/stylesheet_exmp10.css.meta b/tiddlers/stylesheet_exmp10.css.meta index 6d84cd5..94f6220 100644 --- a/tiddlers/stylesheet_exmp10.css.meta +++ b/tiddlers/stylesheet_exmp10.css.meta @@ -1,7 +1,7 @@ created: 20181015195253394 creator: Mohammad -modified: 20190224163834652 +modified: 20190704155017356 modifier: Mohammad tags: $:/tags/Stylesheet exmp10 title: stylesheet/exmp10 -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_exmp23.tid b/tiddlers/stylesheet_exmp23.tid index 57551f0..e32332e 100644 --- a/tiddlers/stylesheet_exmp23.tid +++ b/tiddlers/stylesheet_exmp23.tid @@ -1,6 +1,6 @@ created: 20181204065934856 creator: Mohammad -modified: 20190224163834641 +modified: 20190704155017343 modifier: Mohammad tags: exmp23 $:/tags/Stylesheet title: stylesheet/exmp23 diff --git a/tiddlers/stylesheet_floating-images.txt.meta b/tiddlers/stylesheet_floating-images.txt.meta index 24e619d..5cfd924 100644 --- a/tiddlers/stylesheet_floating-images.txt.meta +++ b/tiddlers/stylesheet_floating-images.txt.meta @@ -1,7 +1,7 @@ created: 20150320130633774 creator: Mohammad -modified: 20190224163834636 +modified: 20190704155017333 modifier: Mohammad tags: $:/tags/Stylesheet floating-images title: stylesheet/floating-images -type: text/plain +type: text/plain \ No newline at end of file diff --git a/tiddlers/stylesheet_highlight.js-theme.css b/tiddlers/stylesheet_highlight.js-theme.css deleted file mode 100644 index 94d21f3..0000000 --- a/tiddlers/stylesheet_highlight.js-theme.css +++ /dev/null @@ -1,84 +0,0 @@ -/* -Zenburn style from voldmar.ru (c) Vladimir Epifanov -based on dark.css by Ivan Sagalaev -Modified by: -Mohammad Rahmani -Apr 20, 2018 -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #3f3f3f; - color: #dcdcdc; - font-size: 0.90em; /* smaller font */ -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-tag { - color: #e3ceab; - font-weight: normal; -} - -.hljs-template-tag { - color: #dcdcdc; -} - -.hljs-number { - color: #8cd0d3; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-attribute { - color: #efdcbc; -} - -.hljs-literal { - color: #efefaf; -} - -.hljs-subst { - color: #8f8f8f; -} - -.hljs-title, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-section, -.hljs-type { - color: #efef8f; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link { - color: #dca3a3; -} - -.hljs-deletion, -.hljs-string, -.hljs-built_in, -.hljs-builtin-name { - color: #cc9393; -} - -.hljs-addition, -.hljs-comment, -.hljs-quote, -.hljs-meta { - color: #7f9f7f; - font-style:normal; -} - - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/tiddlers/stylesheet_highlight.js-theme.css.meta b/tiddlers/stylesheet_highlight.js-theme.css.meta deleted file mode 100644 index 4bbeb75..0000000 --- a/tiddlers/stylesheet_highlight.js-theme.css.meta +++ /dev/null @@ -1,7 +0,0 @@ -created: 20180406073658241 -creator: Mohammad -modified: 20190224163834629 -modifier: Mohammad -tags: $:/tags/Stylesheet -title: stylesheet/highlight.js-theme -type: text/css diff --git a/tiddlers/stylesheet_semantic_bghightone-colors.css.meta b/tiddlers/stylesheet_semantic_bghightone-colors.css.meta index c126dc6..27cab6f 100644 --- a/tiddlers/stylesheet_semantic_bghightone-colors.css.meta +++ b/tiddlers/stylesheet_semantic_bghightone-colors.css.meta @@ -1,7 +1,7 @@ created: 20190210043239782 creator: Mohammad -modified: 20190224163834624 +modified: 20190704155017323 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/bghightone-colors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_bglowtone-colors.css.meta b/tiddlers/stylesheet_semantic_bglowtone-colors.css.meta index f78b94d..4bd5f80 100644 --- a/tiddlers/stylesheet_semantic_bglowtone-colors.css.meta +++ b/tiddlers/stylesheet_semantic_bglowtone-colors.css.meta @@ -1,7 +1,7 @@ created: 20181029071532524 creator: Mohammad -modified: 20190224163834618 +modified: 20190704155017315 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/bglowtone-colors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_border-colors.css.meta b/tiddlers/stylesheet_semantic_border-colors.css.meta index 2837667..5f98dde 100644 --- a/tiddlers/stylesheet_semantic_border-colors.css.meta +++ b/tiddlers/stylesheet_semantic_border-colors.css.meta @@ -1,7 +1,7 @@ created: 20190209162403907 creator: Mohammad -modified: 20190224163834609 +modified: 20190704155017310 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/border-colors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_darkcolors.css.meta b/tiddlers/stylesheet_semantic_darkcolors.css.meta index a9c1cf3..71dd61b 100644 --- a/tiddlers/stylesheet_semantic_darkcolors.css.meta +++ b/tiddlers/stylesheet_semantic_darkcolors.css.meta @@ -1,7 +1,7 @@ created: 20190209162312213 creator: Mohammad -modified: 20190224163834603 +modified: 20190704155017511 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/darkcolors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_lightcolors.css.meta b/tiddlers/stylesheet_semantic_lightcolors.css.meta index 732b208..93b8716 100644 --- a/tiddlers/stylesheet_semantic_lightcolors.css.meta +++ b/tiddlers/stylesheet_semantic_lightcolors.css.meta @@ -1,7 +1,7 @@ created: 20190209162353692 creator: Mohammad -modified: 20190224163834597 +modified: 20190704155017506 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/lightcolors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_tags-bghightone-colors.css.meta b/tiddlers/stylesheet_semantic_tags-bghightone-colors.css.meta index c0c9917..7db73c6 100644 --- a/tiddlers/stylesheet_semantic_tags-bghightone-colors.css.meta +++ b/tiddlers/stylesheet_semantic_tags-bghightone-colors.css.meta @@ -1,8 +1,8 @@ created: 20190210043445902 creator: Mohammad list: powderblue aquamarine palegreen pink lightsalmon lime mint beige appricot -modified: 20190224163834591 +modified: 20190704155017499 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/tags-bghightone-colors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_tags-bglowtone-colors.css.meta b/tiddlers/stylesheet_semantic_tags-bglowtone-colors.css.meta index a666464..f2bf5c7 100644 --- a/tiddlers/stylesheet_semantic_tags-bglowtone-colors.css.meta +++ b/tiddlers/stylesheet_semantic_tags-bglowtone-colors.css.meta @@ -1,8 +1,8 @@ created: 20190210043517478 creator: Mohammad list: mistyrose lemonchiffon lavenderblush lavender honeydew lightcyan aliceblue cornsilk gainsboro bisque snow -modified: 20190224163834585 +modified: 20190704155017493 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/tags-bglowtone-colors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_tags-border-colors.css.meta b/tiddlers/stylesheet_semantic_tags-border-colors.css.meta index 2269245..4df54eb 100644 --- a/tiddlers/stylesheet_semantic_tags-border-colors.css.meta +++ b/tiddlers/stylesheet_semantic_tags-border-colors.css.meta @@ -1,8 +1,8 @@ created: 20190209185255753 creator: Mohammad list: beginner elementary intermediate advanced -modified: 20190224163834579 +modified: 20190704155017482 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/tags-border-colors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_tags-darkcolors.css.meta b/tiddlers/stylesheet_semantic_tags-darkcolors.css.meta index 55aade9..8f1daf2 100644 --- a/tiddlers/stylesheet_semantic_tags-darkcolors.css.meta +++ b/tiddlers/stylesheet_semantic_tags-darkcolors.css.meta @@ -1,8 +1,8 @@ created: 20190209190815445 creator: Mohammad list: zyale zolive zmaroon ziron zclay -modified: 20190224163834571 +modified: 20190704155017475 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/tags-darkcolors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_semantic_tags-lightcolors.css.meta b/tiddlers/stylesheet_semantic_tags-lightcolors.css.meta index 360b280..b91a0e1 100644 --- a/tiddlers/stylesheet_semantic_tags-lightcolors.css.meta +++ b/tiddlers/stylesheet_semantic_tags-lightcolors.css.meta @@ -1,8 +1,8 @@ created: 20190209185743376 creator: Mohammad list: zcyan zorange zlemon zsilver zblue zgreen zred zpurple -modified: 20190224163834564 +modified: 20190704155017466 modifier: Mohammad tags: $:/tags/Stylesheet title: stylesheet/semantic/tags-lightcolors -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/stylesheet_show-contents-macro-tiddler.css.meta b/tiddlers/stylesheet_show-contents-macro-tiddler.css.meta index 90f0831..fccd64d 100644 --- a/tiddlers/stylesheet_show-contents-macro-tiddler.css.meta +++ b/tiddlers/stylesheet_show-contents-macro-tiddler.css.meta @@ -1,8 +1,8 @@ created: 20181219101236877 creator: Mohammad description: This viewtemplate causes the contents of macro tiddlers (e.g those tagged with `$:/tags/Macro`) to be shown -modified: 20190224163834556 +modified: 20190704155017461 modifier: Mohammad tags: $:/tags/Stylesheet macro title: stylesheet/show-contents-macro-tiddler -type: text/css +type: text/css \ No newline at end of file diff --git a/tiddlers/svg-image - Footer.tid b/tiddlers/svg-image - Footer.tid new file mode 100644 index 0000000..6623e0c --- /dev/null +++ b/tiddlers/svg-image - Footer.tid @@ -0,0 +1,9 @@ +created: 20190629091630812 +creator: Mohammad +modified: 20190704155017593 +modifier: Mohammad +tags: slideFooter svg-image +title: svg-image - Footer +type: text/vnd.tiddlywiki + +Working with SVG images \ No newline at end of file diff --git a/tiddlers/svg-image.tid b/tiddlers/svg-image.tid new file mode 100644 index 0000000..5fe76f7 --- /dev/null +++ b/tiddlers/svg-image.tid @@ -0,0 +1,8 @@ +caption: Working with SVG +created: 20190629091553368 +creator: Mohammad +modified: 20190704155017600 +modifier: Mohammad +tags: trail +title: svg-image +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/syntax.tid b/tiddlers/syntax.tid index 7d71b93..cbaf0a2 100644 --- a/tiddlers/syntax.tid +++ b/tiddlers/syntax.tid @@ -1,9 +1,8 @@ caption: Syntax created: 20190201033658676 creator: Mohammad -modified: 20190224163834528 +modified: 20190704155017565 modifier: Mohammad tags: zyale $:/.mr/toc title: syntax -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/tags/Show All Tags in a Wiki.tid b/tiddlers/tags/Show All Tags in a Wiki.tid deleted file mode 100644 index f7f4376..0000000 --- a/tiddlers/tags/Show All Tags in a Wiki.tid +++ /dev/null @@ -1,24 +0,0 @@ -created: 20180911082428833 -creator: Mohammad -keywords: tag -modified: 20190216180317489 -modifier: Mohammad -responder: Anthony Muscio -tags: solution -title: Show All Tags in a Wiki -type: text/vnd.tiddlywiki -url: https://groups.google.com/d/msg/tiddlywiki/7-2_yOi1Ujg/gWYd7fdZBgAJ - -< - <$view field=title format="text"/> - - -*''Case 1'' - -<$list filter="[tags[]!is[system]]"> - {{||$:/core/ui/TagTemplate}} - - -""">> \ No newline at end of file diff --git a/tiddlers/task.tid b/tiddlers/task.tid index fbae569..47ea05d 100644 --- a/tiddlers/task.tid +++ b/tiddlers/task.tid @@ -1,9 +1,8 @@ created: 20181108101755605 creator: Mohammad -list: [[Embed SVG ICONS BUTTONS]] ActionListops [[10th November 2018]] [[To be discussed and added]] [[8th October 2018]] [[7th November 2018]] [[Story River in Two Columns]] [[Some Proposed Names for Plugins]] [[Html5 Forms Elements]] [[Some macros]] ToDos -modified: 20190224163834482 +list: [[SVG ICONS as BUTTONS]] ActionListops [[10th November 2018]] [[To be discussed and added]] [[8th October 2018]] [[7th November 2018]] [[Story River in Two Columns]] [[Some Proposed Names for Plugins]] [[Html5 Forms Elements]] [[Some macros]] ToDos +modified: 20190704155017700 modifier: Mohammad tags: title: task -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/tinka/tinka.tid b/tiddlers/tinka.tid similarity index 71% rename from tiddlers/tinka/tinka.tid rename to tiddlers/tinka.tid index 5a6e976..0b779d9 100644 --- a/tiddlers/tinka/tinka.tid +++ b/tiddlers/tinka.tid @@ -1,8 +1,7 @@ created: 20190201054814808 creator: Mohammad list: [[Tinka Introduction]] [[Tinka Basics]] [[Tinka Readme]] -modified: 20190224163834828 +modified: 20190704155018050 modifier: Mohammad title: tinka -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/toc.tid b/tiddlers/toc.tid index 4527a2a..e203d78 100644 --- a/tiddlers/toc.tid +++ b/tiddlers/toc.tid @@ -1,6 +1,6 @@ created: 20141122084438772 creator: Tobias Beer -modified: 20190224163834777 +modified: 20190704155018168 modifier: Mohammad tags: tidtoc title: toc diff --git a/tiddlers/tools.tid b/tiddlers/tools.tid index e104e0f..8f12d81 100644 --- a/tiddlers/tools.tid +++ b/tiddlers/tools.tid @@ -1,7 +1,6 @@ caption: Tools created: 20180616093223765 -modified: 20190224163836680 +modified: 20190704155018135 tags: contents title: tools -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/tutorial.tid b/tiddlers/tutorial.tid index 3ffbb37..4a9cb75 100644 --- a/tiddlers/tutorial.tid +++ b/tiddlers/tutorial.tid @@ -1,9 +1,8 @@ created: 20190211080636911 creator: Mohammad list: [[Button Tutorial]] [[Filter Tutorial]] [[Macro Tutorial]] [[Paragraphs in Numbered Lists]] myTab [[Nested Lists Tutorial]] [[Setup TW5 on TiddlySpot]] [[TiddlyWiki Tips and Tricks]] [[Work with Lists]] [[Work with Lists - 01]] [[Work with Lists - 03]] [[Work with Lists - 04]] [[Work with Lists - 05]] [[Work with Lists - 06]] [[Work with Lists - 07]] [[Work with Lists - 08]] [[Work with Lists - 10]] [[Work with Lists - 11]] [[Work with Lists - 12]] [[Work with Lists - 13]] -modified: 20190406122521211 +modified: 20190704155018218 modifier: Mohammad tags: title: tutorial -type: text/vnd.tiddlywiki - +type: text/vnd.tiddlywiki \ No newline at end of file diff --git a/tiddlers/viewtemplate_Links.tid b/tiddlers/viewtemplate_Links.tid index b59fd6f..e74f079 100644 --- a/tiddlers/viewtemplate_Links.tid +++ b/tiddlers/viewtemplate_Links.tid @@ -1,7 +1,7 @@ created: 20190121040650032 creator: Mohammad list-before: $:/core/ui/ViewTemplate/body -modified: 20190224163837431 +modified: 20190704155018486 modifier: Mohammad tags: $:/tags/ViewTemplate title: viewtemplate/Links diff --git a/tiddlers/viewtemplate_show-contents-macro-tiddler.tid b/tiddlers/viewtemplate_show-contents-macro-tiddler.tid index 2f3f0ee..493fe4d 100644 --- a/tiddlers/viewtemplate_show-contents-macro-tiddler.tid +++ b/tiddlers/viewtemplate_show-contents-macro-tiddler.tid @@ -1,6 +1,6 @@ created: 20181212041419278 description: This viewtemplate causes the contents of macro tiddlers (e.g those tagged with `$:/tags/Macro`) to be shown -modified: 20190224163837425 +modified: 20190704155018478 tags: macro $:/tags/ViewTemplate title: viewtemplate/show-contents-macro-tiddler type: text/vnd.tiddlywiki diff --git a/tiddlers/viewtemplate_sticky-footer.tid b/tiddlers/viewtemplate_sticky-footer.tid index bfa11ba..9250a75 100644 --- a/tiddlers/viewtemplate_sticky-footer.tid +++ b/tiddlers/viewtemplate_sticky-footer.tid @@ -1,6 +1,6 @@ created: 20180907071314793 creator: Mohammad -modified: 20190224163837383 +modified: 20190704155018470 modifier: Mohammad tags: $:/tags/ViewTemplate title: viewtemplate/sticky-footer diff --git a/tiddlers/viewtemplate_tagging.tid b/tiddlers/viewtemplate_tagging.tid index 283674d..c8d5c05 100644 --- a/tiddlers/viewtemplate_tagging.tid +++ b/tiddlers/viewtemplate_tagging.tid @@ -2,13 +2,16 @@ created: 20190208134235750 creator: Mohammad description: This viewtemplate lists all tiddlers tagged with current tiddler list-before: $:/core/ui/ViewTemplate/body -modified: 20190224163837377 +modified: 20190704155018463 modifier: Mohammad tags: $:/tags/ViewTemplate title: viewtemplate/tagging type: text/vnd.tiddlywiki -<$list filter="[is[current]tagging[]] +[limit[1]]" variable="null" > +<$list filter="[all[current]!tag[trail]tagging[]] +[limit[1]]" variable="null" > Tiddlers tagged with <$text text=<>/>: <$macrocall $name="list-links" filter="[is[current]tagging[]]" type="ol"/> - \ No newline at end of file + + \ No newline at end of file