tzk/docs/index.html

4180 lines
5.6 MiB
HTML
Raw Permalink Normal View History

2021-09-21 16:32:33 +00:00
<!doctype html>
<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->
<!-- saved from url=(0021)https://tiddlywiki.com -->
<html lang="en-GB">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<!--~~ Raw markup for the top of the head section ~~-->
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<meta name="application-name" content="TiddlyWiki" />
<meta name="generator" content="TiddlyWiki" />
2022-01-03 21:31:14 +00:00
<meta name="tiddlywiki-version" content="5.2.0" />
2021-09-21 16:32:33 +00:00
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="mobile-web-app-capable" content="yes"/>
<meta name="format-detection" content="telephone=no" />
<meta name="copyright" content="TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)
Copyright (c) 2004-2007, Jeremy Ruston
2022-01-03 21:31:14 +00:00
Copyright (c) 2007-2021, UnaMesa Association
2021-09-21 16:32:33 +00:00
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." />
<link id="faviconLink" rel="shortcut icon" href="favicon.ico">
2022-01-03 21:31:14 +00:00
<title>My TiddlyZettelKasten
— Say something clever about it here
</title>
2021-09-21 16:32:33 +00:00
<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->
<!--~~ Raw markup ~~-->
<!--
This snippet sends pageviews to Simple Analytics, a privacy-friendly analytics service.
It records only aggregate statistics and cannot identify you.
-->
<script>window.sa_event=window.sa_event||function(){a=[].slice.call(arguments);sa_event.q?sa_event.q.push(a):sa_event.q=[a]};</script>
<script async defer src="https://scripts.simpleanalyticscdn.com/latest.js"></script>
<noscript><img src="https://queue.simpleanalyticscdn.com/noscript.gif" alt=""
/></noscript>
</head>
<body class="tc-body">
<!--~~ Raw markup for the top of the body section ~~-->
<!-- Spinner mechanism shamelessly stolen from https://tiddlywiki.org. --><div class="tc-remove-when-wiki-loaded">
<style scoped>.tc-splash-text {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 16px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
margin: 20px auto 0;
width: 200px;
text-align: center;
color: #fbf1c7;
fill: #fbf1c7;
}.tc-splash-text img {
width: 150px;
-webkit-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
}html body.tc-body {
background: #282828;
}/*
Spinner from https://github.com/tobiasahlin/SpinKit/ by Tobias AhlinThe MIT License (MIT)Copyright (c) 2015 Tobias AhlinPermission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/.tc-splash-spinner {
margin: 20px auto 0;
width: 70px;
text-align: center;
}.tc-splash-spinner > div {
width: 18px;
height: 18px;
border-radius: 100%;
display: inline-block;
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
background-color: #f88;
}.tc-splash-spinner .tc-splash-bounce-1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
background-color: #8f8;
}.tc-splash-spinner .tc-splash-bounce-2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
background-color: #88f;
}@-webkit-keyframes sk-bouncedelay {
0%, 80%, 100% { -webkit-transform: scale(0) }
40% { -webkit-transform: scale(1.0) }
}@keyframes sk-bouncedelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
} 40% {
-webkit-transform: scale(1.0);
transform: scale(1.0);
}
}
</style><div class="tc-splash-spinner">
<div class="tc-splash-bounce-1"></div>
<div class="tc-splash-bounce-2"></div>
<div class="tc-splash-bounce-3"></div>
</div><div class="tc-splash-text">
Loading My TiddlyZettelKasten...
</div>
</div>
<!--~~ Static styles ~~-->
<div id="styleArea">
<style data-tiddler-title="$:/boot/boot.css" data-tiddler-type="text/css" type="text/css">/*
Basic styles used before we boot up the parsing engine
*/
/*
Error message and password prompt
*/
.tc-error-form {
font-family: sans-serif;
color: #fff;
z-index: 20000;
position: fixed;
background-color: rgb(255, 75, 75);
border: 8px solid rgb(255, 0, 0);
border-radius: 8px;
width: 50%;
margin-left: 25%;
margin-top: 4em;
padding: 0 2em 1em 2em;
}
.tc-error-form h1 {
text-align: center;
}
.tc-error-prompt {
text-align: center;
color: #000;
}
.tc-error-message {
overflow: auto;
max-height: 40em;
padding-right: 1em;
margin: 1em 0;
white-space: pre-line;
}
.tc-password-wrapper {
font-family: sans-serif;
z-index: 20000;
position: fixed;
text-align: center;
width: 200px;
top: 4em;
left: 50%;
margin-left: -144px; /* - width/2 - paddingHorz/2 - border */
padding: 16px 16px 16px 16px;
border-radius: 8px;
}
.tc-password-wrapper {
color: #000;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
background-color: rgb(197, 235, 183);
border: 8px solid rgb(164, 197, 152);
}
.tc-password-wrapper form {
text-align: left;
}
.tc-password-wrapper h1 {
font-size: 16px;
line-height: 20px;
padding-bottom: 16px;
}
.tc-password-wrapper input {
width: 100%;
}
</style>
</div>
<!--~~ Static content for Google and browsers without JavaScript ~~-->
<noscript>
<div id="splashArea">
<p>This <a class="tc-tiddlylink-external" href="https://tiddlywiki.com" rel="noopener noreferrer" target="_blank">TiddlyWiki</a> contains the following tiddlers:</p><p><ul>
<li>$:/config/AnimationDuration</li>
<li>$:/config/bimlas/locator/fields/parent</li>
<li>$:/config/codemirror/keyMap</li>
<li>$:/config/codemirror/theme</li>
<li>$:/config/DefaultSidebarTab</li>
<li>$:/config/DownloadSaver/AutoSave</li>
2022-01-03 21:31:14 +00:00
<li>$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/do-thing</li>
2021-09-21 16:32:33 +00:00
<li>$:/config/EditTabIndex</li>
<li>$:/config/flibbles/relink/fields/bibliography</li>
<li>$:/config/flibbles/relink/fields/description</li>
<li>$:/config/flibbles/relink/fields/memberof</li>
<li>$:/config/flibbles/relink/fields/spouse</li>
<li>$:/config/flibbles/relink/fields/universe</li>
<li>$:/config/flibbles/relink/macros/expando/tiddler</li>
<li>$:/config/Manager/Filter</li>
<li>$:/config/Manager/Show</li>
<li>$:/config/Manager/Sort</li>
<li>$:/config/Manager/System</li>
<li>$:/config/Manager/Tag</li>
<li>$:/config/NewJournal/Title</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/control-panel</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-tiddler</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/save-wiki</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager</li>
<li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp</li>
<li>$:/config/PageControlButtons/Visibility/$:/plugins/aaldrich/tables/button</li>
<li>$:/config/PageControlButtons/Visibility/$:/sib/Buttons/NewSource</li>
<li>$:/config/PageControlButtons/Visibility/$:/sib/Buttons/ReadingInbox</li>
<li>$:/config/PageControlButtons/Visibility/$:/sib/NewSourceButton</li>
<li>$:/config/Performance/Instrumentation</li>
<li>$:/config/Plugins/Disabled/$:/plugins/bimlas/locator</li>
<li>$:/config/Plugins/Disabled/$:/plugins/flibbles/relink</li>
<li>$:/config/Plugins/Disabled/$:/plugins/frd/simplecalendar</li>
<li>$:/config/Plugins/Disabled/$:/plugins/kantorsite/mathjax</li>
<li>$:/config/Plugins/Disabled/$:/plugins/kixam/datepicker</li>
<li>$:/config/Plugins/Disabled/$:/plugins/kixam/moment</li>
<li>$:/config/Plugins/Disabled/$:/plugins/kookma/refnotes</li>
<li>$:/config/Plugins/Disabled/$:/plugins/MaxGyver83/tw5-keyboard-navigation</li>
<li>$:/config/Plugins/Disabled/$:/plugins/sk/FancyQuotes</li>
<li>$:/config/Plugins/Disabled/$:/plugins/sobjornstad/3click2edit</li>
<li>$:/config/Plugins/Disabled/$:/plugins/telmiger/details</li>
<li>$:/config/Plugins/Disabled/$:/plugins/TheDiveO/FontAwesome</li>
<li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-autocomplete</li>
<li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-closebrackets</li>
<li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-keymap-vim</li>
<li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-search-replace</li>
<li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/highlight</li>
<li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/katex</li>
<li>$:/config/PublicContactInfo</li>
<li>$:/config/RelinkOnRename</li>
<li>$:/config/ShortcutInfo/excise-private-chunk</li>
<li>$:/config/shortcuts/cancel-edit-tiddler</li>
<li>$:/config/shortcuts/excise-private-chunk</li>
<li>$:/config/sib/CurrentEditionPublicity</li>
<li>$:/config/sib/IsPublicEdition</li>
<li>$:/config/sib/TopBarHeight</li>
<li>$:/config/SyncFilter</li>
<li>$:/config/TiddlerInfo/Mode</li>
<li>$:/config/Tiddlers/TitleLinks</li>
<li>$:/config/TiddlyRemember/TagMapping</li>
<li>$:/config/TimestampDisable</li>
<li>$:/config/Toolbar/ButtonClass</li>
<li>$:/config/Toolbar/Text</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/edit</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/sib/Buttons/CopyPublicZettelkastenLink</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/sib/Buttons/CopyTitleReference</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/sib/CopyPublicZettelkastenLink</li>
<li>$:/config/ViewToolbarButtons/Visibility/$:/sib/CopyTitleReference</li>
<li>$:/config/ViewToolbarButtons/Visibility/DoCopyTitleReference</li>
<li>$:/config/WikiParserRules/Inline/dash</li>
<li>$:/config/zettelkasten/Build/KillPhrases</li>
2021-09-21 16:32:33 +00:00
<li>$:/config/zettelkasten/copyright/Content</li>
<li>$:/config/zettelkasten/copyright/InitialNotice</li>
<li>$:/config/zettelkasten/copyright/MIT</li>
<li>$:/config/zettelkasten/copyright/System</li>
<li>$:/config/zettelkasten/copyright/UserNotice</li>
<li>$:/config/zettelkasten/FeatureFlags/Clock</li>
<li>$:/config/zettelkasten/FeatureFlags/CopyrightFooter</li>
<li>$:/config/zettelkasten/FeatureFlags/EditorPublicLine</li>
<li>$:/config/zettelkasten/FeatureFlags/EpistemicStatus</li>
<li>$:/config/zettelkasten/FeatureFlags/GisTools</li>
<li>$:/config/zettelkasten/FeatureFlags/MediaRating</li>
<li>$:/config/zettelkasten/FeatureFlags/OpenTopBar</li>
<li>$:/config/zettelkasten/FeatureFlags/SidebarInfoLinks</li>
<li>$:/config/zettelkasten/FeatureFlags/SpoilerBanner</li>
<li>$:/config/zettelkasten/FeatureFlags/ViewerPublicLine</li>
<li>$:/config/zettelkasten/GettingStartedWizardCurr</li>
<li>$:/config/zettelkasten/gis/GMapsApiKey</li>
<li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/More</li>
<li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Open</li>
<li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Recent</li>
<li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Tools</li>
<li>$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Explore</li>
<li>$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Write</li>
<li>$:/config/zettelkasten/SplashScreenMessage</li>
<li>$:/core</li>
<li>$:/core/Filters/AllTags</li>
<li>$:/core/macros/tag-picker</li>
<li>$:/core/modules/editor-operations/text/fancyquotes.js</li>
<li>$:/core/templates/canonical-uri-external-image</li>
2022-01-03 21:31:14 +00:00
<li>$:/core/ui/EditorToolbar/linkify</li>
<li>$:/core/ui/EditorToolbar/transcludify</li>
2021-09-21 16:32:33 +00:00
<li>$:/core/ui/SideBar/Open</li>
<li>$:/core/ui/SideBarSegments/tabs</li>
<li>$:/core/ui/ViewTemplate/subtitle</li>
<li>$:/DefaultTiddlers</li>
2022-01-03 21:31:14 +00:00
<li>$:/inmysocks/macros/day-diff.js</li>
2021-09-21 16:32:33 +00:00
<li>$:/isEncrypted</li>
<li>$:/layout</li>
<li>$:/palette</li>
<li>$:/plugins/aaldrich/tables</li>
<li>$:/plugins/adithyab/cmplus</li>
<li>$:/plugins/bimlas/locator</li>
<li>$:/plugins/bimlas/locator/edit-template/locator-references</li>
<li>$:/plugins/flibbles/relink</li>
<li>$:/plugins/frd/simplecalendar/CalendarConfigDefault</li>
<li>$:/plugins/ihm/tidgraph</li>
<li>$:/plugins/kixam/datepicker</li>
<li>$:/plugins/kixam/moment</li>
<li>$:/plugins/kookma/refnotes/styles/footnote-counter</li>
<li>$:/plugins/kookma/refnotes/ui/bibtexlibrary</li>
2022-01-03 21:31:14 +00:00
<li>$:/plugins/mklauber/shuffle</li>
2021-09-21 16:32:33 +00:00
<li>$:/plugins/sobjornstad/3click2edit</li>
<li>$:/plugins/sobjornstad/TiddlyRemember</li>
2022-01-03 21:31:14 +00:00
<li>$:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz</li>
2021-09-21 16:32:33 +00:00
<li>$:/plugins/sobjornstad/TiddlyStretch</li>
<li>$:/plugins/sobjornstad/TiddlyStretch/macros/stretch</li>
<li>$:/plugins/telmiger/details</li>
<li>$:/plugins/telmiger/details/colours.css</li>
<li>$:/plugins/TheDiveO/FontAwesome</li>
<li>$:/plugins/TheDiveO/FontAwesome/styles/extlinks/randomthoughts</li>
<li>$:/plugins/tiddlywiki/codemirror</li>
<li>$:/plugins/tiddlywiki/codemirror-autocomplete</li>
<li>$:/plugins/tiddlywiki/codemirror-closebrackets</li>
<li>$:/plugins/tiddlywiki/codemirror-keymap-vim</li>
<li>$:/plugins/tiddlywiki/codemirror-search-replace</li>
<li>$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js2</li>
<li>$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css</li>
<li>$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css2</li>
<li>$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js2</li>
<li>$:/plugins/tiddlywiki/highlight</li>
<li>$:/plugins/tiddlywiki/katex</li>
<li>$:/sib/Buttons/CopyPublicZettelkastenLink</li>
<li>$:/sib/Buttons/CopyTitleReference</li>
<li>$:/sib/Buttons/excise-private-chunk</li>
<li>$:/sib/Buttons/NewSource</li>
<li>$:/sib/Buttons/ReadingInbox</li>
<li>$:/sib/Buttons/Tools</li>
<li>$:/sib/Documentation</li>
<li>$:/sib/Documentation/Macros</li>
<li>$:/sib/Documentation/ViewTemplates</li>
<li>$:/sib/EpistemicStatus/confident</li>
<li>$:/sib/EpistemicStatus/Display</li>
<li>$:/sib/EpistemicStatus/likely</li>
<li>$:/sib/EpistemicStatus/mythological</li>
<li>$:/sib/EpistemicStatus/personal</li>
<li>$:/sib/EpistemicStatus/possible</li>
<li>$:/sib/EpistemicStatus/probably-wrong</li>
<li>$:/sib/EpistemicStatus/unlikely</li>
<li>$:/sib/Fonts/SourceSansPro</li>
<li>$:/sib/GettingStarted</li>
<li>$:/sib/GettingStarted/Copyright</li>
<li>$:/sib/GettingStarted/NextSteps</li>
<li>$:/sib/GettingStarted/ReferenceExplorer</li>
<li>$:/sib/GettingStarted/ThingsToDo</li>
<li>$:/sib/GettingStarted/Title</li>
<li>$:/sib/GettingStarted/Warning</li>
<li>$:/sib/GettingStarted/ZettelkastenCardTypes</li>
<li>$:/sib/gis/AddInfo</li>
<li>$:/sib/gis/DrivingDirections</li>
<li>$:/sib/gis/Info</li>
<li>$:/sib/gis/MappingTools</li>
<li>$:/sib/gis/SatelliteMap</li>
<li>$:/sib/gui/KillPhrases</li>
<li>$:/sib/gui/SidebarTabSelector</li>
<li>$:/sib/indite/ChildListItemTemplate</li>
<li>$:/sib/indite/InditeChildren</li>
<li>$:/sib/indite/macros</li>
<li>$:/sib/indite/Sidebar</li>
<li>$:/sib/indite/Stylesheet</li>
<li>$:/sib/indite/ViewTemplate</li>
<li>$:/sib/js/excise-private-chunk.js</li>
<li>$:/sib/js/ListSubscriptionsWidget</li>
<li>$:/sib/js/SendFeedbackWidget</li>
<li>$:/sib/js/SubscriptionManagementWidget</li>
<li>$:/sib/js/thirdparty/TiddlyTools/Time/action-timeout.js</li>
<li>$:/sib/Macros/cb</li>
<li>$:/sib/Macros/check-item</li>
<li>$:/sib/Macros/clarify</li>
<li>$:/sib/Macros/colorsplotch</li>
<li>$:/sib/Macros/ff</li>
<li>$:/sib/Macros/float-image</li>
<li>$:/sib/Macros/fnote</li>
<li>$:/sib/Macros/privateperson</li>
<li>$:/sib/Macros/rt</li>
<li>$:/sib/Macros/speaker</li>
<li>$:/sib/Macros/star-rating</li>
<li>$:/sib/Macros/subreddit</li>
<li>$:/sib/MediaRating/average</li>
<li>$:/sib/MediaRating/classic</li>
<li>$:/sib/MediaRating/Display</li>
<li>$:/sib/MediaRating/distinguished</li>
<li>$:/sib/MediaRating/good</li>
<li>$:/sib/MediaRating/great</li>
<li>$:/sib/MediaRating/irrational</li>
<li>$:/sib/MediaRating/poor</li>
<li>$:/sib/MediaRating/skimmable</li>
<li>$:/sib/Overrides/CodeMirrorPopupFix</li>
<li>$:/sib/Overrides/details-background-color</li>
<li>$:/sib/RawMarkup/ClockTicker</li>
<li>$:/sib/RawMarkup/SimpleAnalytics</li>
<li>$:/sib/RawMarkup/SplashScreen</li>
<li>$:/sib/refexplorer/All</li>
<li>$:/sib/refexplorer/Footnotes</li>
<li>$:/sib/refexplorer/Ideas</li>
<li>$:/sib/refexplorer/LinkGraph</li>
<li>$:/sib/refexplorer/LinkTypeTemplate</li>
<li>$:/sib/refexplorer/PAO</li>
<li>$:/sib/refexplorer/Places</li>
<li>$:/sib/refexplorer/ReferenceExplorer</li>
<li>$:/sib/refexplorer/Sinks</li>
<li>$:/sib/refexplorer/Sources</li>
<li>$:/sib/refexplorer/Subtiddlers</li>
<li>$:/sib/Reviewer/Dateops</li>
<li>$:/sib/Reviewer/SchedulableTemplate</li>
<li>$:/sib/Reviewer/SchedulerMacros</li>
<li>$:/sib/Reviewer/Tiddlers due for review</li>
<li>$:/sib/Search/Locator</li>
<li>$:/sib/Search/LocatorFields</li>
<li>$:/sib/SideBar/Explore</li>
<li>$:/sib/SideBar/Explore/Bibliographies</li>
<li>$:/sib/SideBar/InfoLinks</li>
<li>$:/sib/SideBar/Write</li>
<li>$:/sib/SideBar/Write/Stub</li>
<li>$:/sib/Snippets/TiddlyRememberDetailsWidget</li>
2022-01-03 21:31:14 +00:00
<li>$:/sib/StorySaver/Saver</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/body</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/footnote</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/FourColMode</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/GeneralStyles</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/hr</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/OpenTopBar</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/Publicity</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/ReferenceExplorer</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/styles/Subtitle</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/Clock</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/MacroDescription</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/MissingTiddlerCreationNotification</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/OpenTopBar</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/PrivateChunkParentNotice</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/Publicity/EditorPublicLine</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/Publicity/LevelDisplay</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/Publicity/ViewerPublicLine</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/ReaderActions</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/Source</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/SpoilerBanner</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/StoryRiverFooter</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/Subtiddler</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/TypeTagChecker</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/Untitled</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Automatic/ViewTemplateDescription</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Export/SabbaticalUpdateCabCrosspost</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/General/IdentityTemplate</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/TableColumns/BookRating</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/TableColumns/ThanksgivingDate</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/AnkiPattern</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/AnkiPattern/Common</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/AnkiPattern/Edit</li>
2021-09-22 15:54:06 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/AnkiPattern/View</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/BibliographyList</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/Build2020SessionDetails</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/MaudWikiImport</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/MinnesotaStateParkInfo</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/PublicHomepageTab</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/ReadingList/LargeTemplate</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/ReadingList/Rating</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/ReadingList/SmallTemplate</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/TitleDescriptionStretch</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Templates/Topical/WhoIAmTab</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/FeatureFlags</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/LowLinkTiddlers</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/MissingPeople</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/PaletteBrowser</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/ReadingInbox</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/RelationshipValueTool</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/SmartOrphanList</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/SmartOrphanList/Table</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/Statistics</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/TagReplace</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/sib/Tools/Tray</li>
<li>$:/sib/Tools/Tray/Template</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/SiteSubtitle</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/SiteTitle</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/status/RequireReloadDueToPluginChange</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/StoryList</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/tags/EditorToolbar</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/tags/EditTemplate</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/tags/PageTemplate</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/tags/ReferenceExplorerTab</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/tags/SideBar</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/tags/Stylesheet</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/tags/ViewTemplate</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/TagSaver</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/theme</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/snowwhite</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/metrics/storyright</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/metrics/storywidth</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/options/sidebarlayout</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/options/stickytitles</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/settings/backgroundimage</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/settings/codefontfamily</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/settings/editorfontfamily</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/settings/fontfamily</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/themes/tiddlywiki/vanilla/sticky</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/todolist/data/base/archive</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/todolist/data/base/done</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/todolist/data/base/priority</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/todolist/data/base/state</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/todolist/data/base/status</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>$:/todolist/data/base/tasks</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Attachment</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Bibliography</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Class</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Conversation</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>CopyrightNotice</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Footnote</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Idea</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Image</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Index</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Journal</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Meta</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>NeedsAttention</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>NeedsExcision</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>NeedsPhotograph</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>NeedsRemoval</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Notes</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>OpenQuestion</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>OurNamingConventions</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>PAO</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Place</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>PrivateChunk</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Public</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Publication</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>PublicHomepage</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>ReferenceExplorer</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Sink</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Source</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Stub</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Subtiddler</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>TODO</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>Tool</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<li>ZettelkastenCardType</li>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
</ul>
</p>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
<style>
.tc-remove-when-wiki-loaded {display: none;}
</style>
2021-09-21 16:32:33 +00:00
2022-01-03 21:31:14 +00:00
</div>
</noscript>
<!--~~ Ordinary tiddlers ~~-->
<script class="tiddlywiki-tiddler-store" type="application/json">[
{"title":"$:/config/AnimationDuration","created":"20200118003418275","creator":"soren","modified":"20200118003419972","modifier":"soren","type":"text/vnd.tiddlywiki","text":"200"},
{"title":"$:/config/bimlas/locator/fields/parent","created":"20200410133117956","creator":"soren","field-direction":"to","modified":"20200410133133054","modifier":"soren","type":"text/vnd.tiddlywiki","text":"$:/plugins/bimlas/locator/field-templates/text"},
{"title":"$:/config/codemirror/keyMap","text":"default","type":"string","created":"20200118023853777","creator":"soren","modified":"20210910160825258","modifier":"soren"},
{"title":"$:/config/codemirror/theme","text":"cmplus","type":"string","created":"20210316232428596","modified":"20210329225730283"},
{"title":"$:/config/DefaultSidebarTab","created":"20200118003657706","creator":"soren","modified":"20200118003658921","modifier":"soren","type":"text/vnd.tiddlywiki","text":"$:/core/ui/SideBar/More"},
{"title":"$:/config/DownloadSaver/AutoSave","created":"20200226002847048","modified":"20200226002849153","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/do-thing","created":"20210928031215487","creator":"soren","modified":"20210928031216652","modifier":"soren","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/EditTabIndex","created":"20200515033855017","modified":"20200515033900734","tags":"","type":"text/vnd.tiddlywiki","text":"1"},
{"title":"$:/config/flibbles/relink/fields/bibliography","created":"20210606192417191","modified":"20210606192216249","type":"text/vnd.tiddlywiki","text":"list"},
{"title":"$:/config/flibbles/relink/fields/description","created":"20200517132308563","modified":"20200517132308152","type":"text/vnd.tiddlywiki","text":"wikitext"},
{"title":"$:/config/flibbles/relink/fields/memberof","created":"20200517132228253","modified":"20200517132227841","type":"text/vnd.tiddlywiki","text":"list"},
{"title":"$:/config/flibbles/relink/fields/spouse","created":"20200517132233649","modified":"20200517132233649","type":"text/vnd.tiddlywiki","text":"title"},
{"title":"$:/config/flibbles/relink/fields/universe","created":"20210606192156910","modified":"20210606192156910","type":"text/vnd.tiddlywiki","text":"title"},
{"title":"$:/config/flibbles/relink/macros/expando/tiddler","created":"20201207185209448","modified":"20201207185209448","type":"text/vnd.tiddlywiki","text":"title"},
{"title":"$:/config/Manager/Filter","created":"20200226225437497","modified":"20200301191728127","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/Manager/Show","created":"20200125221910159","modified":"20200510003949538","type":"text/vnd.tiddlywiki","text":"tiddlers"},
{"title":"$:/config/Manager/Sort","created":"20200225231329450","modified":"20210102053655395","type":"text/vnd.tiddlywiki","text":"text"},
{"title":"$:/config/Manager/System","created":"20200225231355813","modified":"20200225231357995","type":"text/vnd.tiddlywiki","text":"system"},
{"title":"$:/config/Manager/Tag","created":"20200225231334446","modified":"20210102053649967","type":"text/vnd.tiddlywiki","text":"Source"},
{"title":"$:/config/NewJournal/Title","created":"20200425021836647","modified":"20200425022040020","type":"text/vnd.tiddlywiki","text":"YYYY-0MM-0DD ddd"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search","created":"20210102053710313","modified":"20210102053627345","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all","created":"20200913160459794","modified":"20200913160708406","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/control-panel","created":"20200913160724199","modified":"20200913160920405","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen","created":"20200404141720140","creator":"soren","modified":"20200404141727487","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home","created":"20200323004119552","modified":"20200913160059735","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import","created":"20210102053930923","modified":"20210202033953029","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions","created":"20200329180402644","modified":"20200425031432070","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal","created":"20200125221848147","modified":"20200804182421726","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-tiddler","created":"20200404141647796","creator":"soren","modified":"20200913160849302","modifier":"soren","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview","created":"20200329180357772","modified":"20200329180359920","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/save-wiki","created":"20200425031326114","modified":"20200425031326136","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager","created":"20200425031433809","modified":"20200425031433831","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp","created":"20200404141704643","creator":"soren","modified":"20210509011208732","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/plugins/aaldrich/tables/button","created":"20200322013805236","creator":"soren","modified":"20200322013806469","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/PageControlButtons/Visibility/$:/sib/Buttons/NewSource","created":"20210525001028932","modified":"20210525000833968","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/PageControlButtons/Visibility/$:/sib/Buttons/ReadingInbox","created":"20210525001112107","modified":"20210525001215732","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/PageControlButtons/Visibility/$:/sib/NewSourceButton","created":"20200913160857999","modified":"20210307212022651","tags":"","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/Performance/Instrumentation","created":"20210721001042152","modified":"20210811223526328","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/bimlas/locator","created":"20210205013358090","modified":"20210205014133254","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/flibbles/relink","created":"20210205013547783","modified":"20210205014248273","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/frd/simplecalendar","created":"20210205013416214","modified":"20210205013728062","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/kantorsite/mathjax","created":"20200710193223440","modified":"20200710193424989","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/kixam/datepicker","created":"20210205013308502","modified":"20210307161239111","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/kixam/moment","created":"20210205013419352","modified":"20210307161611835","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/kookma/refnotes","created":"20210920204145810","creator":"soren","modified":"20210920204145826","modifier":"soren","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/MaxGyver83/tw5-keyboard-navigation","created":"20210205013330536","modified":"20210205013924490","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/sk/FancyQuotes","created":"20210205013542897","modified":"20210205013915843","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/sobjornstad/3click2edit","created":"20210205013622647","modified":"20210205013715594","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/telmiger/details","created":"20210205013521277","modified":"20210205014302258","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/TheDiveO/FontAwesome","created":"20210205013551526","modified":"20210205014243897","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-autocomplete","created":"20210205013531768","modified":"20210329225610285","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-closebrackets","created":"20210205013530658","modified":"20210205014016671","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-keymap-vim","created":"20210205013534170","modified":"20210205013559477","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-search-replace","created":"20210205013607133","modified":"20210205013828489","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/highlight","created":"20210205013556905","modified":"20210205232117777","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/katex","created":"20210205013601533","modified":"20210205015443190","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/PublicContactInfo","text":"homepage: https://www.sorenbjornstad.com\nemail: zettelkasten@sorenbjornstad.com\ngithub: https://github.com/sobjornstad/zettelkasten-sib","type":"application/x-tiddler-dictionary","created":"20200508015911051","modified":"20200508020040701"},
{"title":"$:/config/RelinkOnRename","created":"20200121230518238","modified":"20210410005001202","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/ShortcutInfo/excise-private-chunk","created":"20210522035122311","modified":"20210522034939194","tags":"","type":"text/vnd.tiddlywiki","text":"Excise the current selection to a new private chunk"},
{"title":"$:/config/shortcuts/cancel-edit-tiddler","created":"20200118025014806","modified":"20200118030240382","type":"text/vnd.tiddlywiki","text":"ctrl-Escape"},
{"title":"$:/config/shortcuts/excise-private-chunk","created":"20210522035108354","creator":"soren","modified":"20210920161704326","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"ctrl-shift-E"},
{"title":"$:/config/sib/CurrentEditionPublicity","created":"20210622002423952","modified":"20210622002233531","tags":"","type":"text/vnd.tiddlywiki","text":"private"},
{"title":"$:/config/sib/IsPublicEdition","caption":"Whether interface elements for personal use only should appear.","created":"20200508003748651","modified":"20210508232303597","tags":"Meta","type":"text/vnd.tiddlywiki","text":"true"},
{"title":"$:/config/sib/TopBarHeight","created":"20210627200040615","modified":"20210627201201583","tags":"","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\u003C\u003Cff OpenTopBar>> emptyMessage=\"0px\">30px\u003C/$list>"},
{"title":"$:/config/SyncFilter","created":"20200528020409590","modified":"20200528020441073","type":"text/vnd.tiddlywiki","text":"[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]] -[[$:/StoryList]]"},
{"title":"$:/config/TiddlerInfo/Mode","created":"20200118003704896","creator":"soren","modified":"20200118003705931","modifier":"soren","type":"text/vnd.tiddlywiki","text":"sticky"},
{"title":"$:/config/Tiddlers/TitleLinks","created":"20210507013444291","modified":"20210507013256599","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/config/TiddlyRemember/TagMapping","created":"20200516190911842","modified":"20211113234932630","tags":"","type":"text/vnd.tiddlywiki","text":"[[Source::Zettelkasten]]\n[has[tr-tags]get[tr-tags]]"},
{"title":"$:/config/TimestampDisable","created":"20200118025806832","creator":"soren","modified":"20210721005951761","modifier":"soren","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/Toolbar/ButtonClass","created":"20200118003731285","creator":"soren","modified":"20200118003737882","modifier":"soren","type":"text/vnd.tiddlywiki","text":"tc-btn-rounded"},
{"title":"$:/config/Toolbar/Text","created":"20200118003741043","creator":"soren","modified":"20200118003745155","modifier":"soren","type":"text/vnd.tiddlywiki","text":"no"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone","created":"20200321222632217","creator":"soren","modified":"20201120173219656","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others","created":"20200913195739332","modified":"20200913195744428","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/edit","created":"20200508024425999","modified":"20200508024854302","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler","created":"20200321222634628","creator":"soren","modified":"20200321222636791","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar","created":"20200125183503813","modified":"20200125183510102","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info","created":"20200118034433307","modified":"20201120173206280","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here","created":"20200125183450402","creator":"soren","modified":"20201120173225978","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here","created":"20201120173247431","modified":"20201120173222291","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink","created":"20200913200724872","modified":"20201120173215063","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar","created":"20200404141629548","creator":"soren","modified":"20200404141630712","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/sib/Buttons/CopyPublicZettelkastenLink","created":"20210525001044166","creator":"soren","modified":"20210922125743198","modifier":"soren","type":"text/vnd.tiddlywiki","text":"hide"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/sib/Buttons/CopyTitleReference","created":"20210525001045047","modified":"20210525000850061","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/sib/CopyPublicZettelkastenLink","created":"20201216045704818","modified":"20201216045631478","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/ViewToolbarButtons/Visibility/$:/sib/CopyTitleReference","created":"20201201192308952","modified":"20201201192236971","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/ViewToolbarButtons/Visibility/DoCopyTitleReference","created":"20200913200034137","modified":"20200913200042061","type":"text/vnd.tiddlywiki","text":"show"},
{"title":"$:/config/WikiParserRules/Inline/dash","created":"20201124030001841","modified":"20201124030011884","type":"text/vnd.tiddlywiki","text":"enable"},
{"title":"$:/config/zettelkasten/Build/KillPhrases","created":"20210731165327653","modified":"20210731173813193","type":"text/vnd.tiddlywiki","text":""},
{"title":"$:/config/zettelkasten/copyright/Content","created":"20210523151041802","creator":"soren","modified":"20210825142618069","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"The ''text of my notes'', that is, most of the content of the wiki, is all-rights-reserved.\nYou are welcome to read, learn from, and link to all notes (click the hash icon in the upper-right to copy a link to any tiddler; keep in mind that currently public notes could become private in the future, though I try to avoid doing this).\nObvious [[fair use|https://en.wikipedia.org/wiki/Fair_use]] such as quoting a small excerpt with attribution in order to discuss it is also fine.\nPlease contact me if this doesn't cover something you were hoping to do."},
{"title":"$:/config/zettelkasten/copyright/InitialNotice","created":"20210523151255793","creator":"soren","modified":"20210825142934141","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"Copyright © 2020--\u003C\u003Cnow YYYY>> Soren Bjornstad."},
{"title":"$:/config/zettelkasten/copyright/MIT","created":"20210523151209436","creator":"soren","modified":"20210825144137850","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"MIT License\nApplies to SYSTEM TIDDLERS ONLY, as defined above!\nDoes NOT apply to the text of notes in this wiki.\n\n{{$:/config/zettelkasten/copyright/InitialNotice}}\u003Cbr>{{$:/config/zettelkasten/copyright/UserNotice}}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."},
{"title":"$:/config/zettelkasten/copyright/System","created":"20210523151106274","creator":"soren","modified":"20210825144239931","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"All ''system tiddlers'' in the wiki specific to Soren's Zettelkasten Edition, that is, the parts that extend TiddlyWiki and handle the display of tiddlers, e.g., the ReferenceExplorer, are available under the MIT license (see below). The names of system tiddlers begin with `$:/`.\n\nBe aware that many system tiddlers are contributed by TiddlyWiki itself or by other plugins, which are usually licensed under the MIT or BSD license or a similar open-source license. If you're using a system tiddler which is found under `$:/sib/`, you can be sure it is included in this license grant; otherwise, you may need to check whether it's a [[shadow tiddler|https://groktiddlywiki.com/read/#Shadow%20Tiddlers]] or modified shadow tiddler that might have a different license.\n\nVisit the ''Explorer'' section of the ''Explore'' sidebar tab to find system tiddlers.\n\n\u003Cpre>{{$:/config/zettelkasten/copyright/MIT}}\u003C/pre>"},
{"title":"$:/config/zettelkasten/copyright/UserNotice","created":"20210825143221469","creator":"soren","modified":"20210825144152783","modifier":"soren","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/Clock","caption":"Clock","created":"20210627030648862","description":"Show the current time and a Pomodoro timer in the upper-right corner of the wiki.","modified":"20210825145427187","private":"no","public":"no","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/CopyrightFooter","caption":"Copyright footer","created":"20210902152332169","creator":"soren","description":"Display a copyright and attribution notice underneath the story river.","modified":"20210902152446023","modifier":"soren","private":"no","public":"yes","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/EditorPublicLine","caption":"Editor public line","created":"20210622003532452","description":"Show the \"publish this tiddler\" checkbox when editing a tiddler.","modified":"20210825145437728","private":"yes","public":"no","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/EpistemicStatus","caption":"Epistemic status","created":"20210920193247824","creator":"soren","description":"Show the [[epistemic status|EpistemicStatus]] of the current tiddler on ideas.","modified":"20210920193354215","modifier":"soren","private":"yes","public":"yes","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/GisTools","caption":"GIS tools","created":"20210910153740764","creator":"soren","description":"Use the Google Maps embed API to show satellite location and directions on Place tiddlers. Requires setting up an embed API in Google Cloud Platform (when you turn this feature on, an error will appear on your place tiddlers explaining how to do so).","modified":"20210910153929369","modifier":"soren","private":"no","public":"no","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/MediaRating","caption":"Media rating","created":"20210920193222752","creator":"soren","description":"Show the [[rating|MediaRating]] of the current tiddler on sources.","modified":"20210920193357318","modifier":"soren","private":"yes","public":"yes","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/OpenTopBar","caption":"Open top bar","created":"20210626233606201","description":"Show the list of open tiddlers in a horizontal bar at the top of the screen","modified":"20210825145444520","private":"yes","public":"no","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/SidebarInfoLinks","caption":"Sidebar info links","created":"20210623014408947","creator":"soren","description":"Show navigation links to the most important parts of the wiki underneath the subtitle.","modified":"20211107173557802","modifier":"soren","private":"yes","public":"no","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/SpoilerBanner","caption":"Spoiler banner","created":"20210622003118415","creator":"soren","description":"Display a warning banner on fiction tiddlers (any tiddler with a non-empty `universe` field) noting that we don't try to hide spoilers.","modified":"20211107181812051","modifier":"soren","private":"no","public":"no","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/FeatureFlags/ViewerPublicLine","caption":"Viewer public line","created":"20210622003316816","description":"Show the \"publish this tiddler\" checkbox when viewing a tiddler.","modified":"20210825145501899","private":"yes","public":"no","tags":"","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/GettingStartedWizardCurr","created":"20210825150640449","creator":"soren","modified":"20210920161523682","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"$:/sib/GettingStarted/Warning"},
{"title":"$:/config/zettelkasten/gis/GMapsApiKey","text":"","type":"text/plain","created":"20201129173535848","creator":"soren","modified":"20210910154319208","modifier":"soren","tags":""},
{"title":"$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/More","created":"20210731163927911","modified":"20210731163711887","private":"yes","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Open","created":"20210731163926154","modified":"20210731164114943","private":"yes","public":"yes","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Recent","created":"20210731163905536","modified":"20210731163711418","private":"yes","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Tools","created":"20210731163927055","modified":"20210731164112742","private":"yes","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Explore","created":"20210731163930355","modified":"20210731193804848","private":"no","public":"yes","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Write","created":"20210731163929481","modified":"20210731163713454","private":"yes","type":"text/vnd.tiddlywiki"},
{"title":"$:/config/zettelkasten/SplashScreenMessage","created":"20210910163319096","creator":"soren","modified":"20210910163319296","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"Loading {{$:/SiteTitle}}..."},
{"title":"$:/core","name":"Core","description":"TiddlyWiki5 core","author":"JeremyRuston","core-version":">=5.0.0","plugin-priority":"0","list":"readme","version":"5.2.0","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"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-2021, 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\":\"\u003Csvg width=\\\"22pt\\\" height=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\">\u003Cpath d=\\\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.3
{"title":"$:/core/Filters/AllTags","created":"20200329173823386","description":"{{$:/language/Filters/AllTags}}","filter":"[tags[]!is[system]sort[title]sort[color]]","modified":"20210414230511254","tags":"$:/tags/Filter","type":"text/vnd.tiddlywiki"},
{"title":"$:/core/macros/tag-picker","created":"20210205020444088","creator":"soren","first-search-filter":"[tags[]!is[system]search:title\u003CuserInput>sort[]sort[color]]","modified":"20210825130424785","modifier":"soren","second-search-filter":"[tags[]is[system]search:title\u003CuserInput>sort[]sort[color]]","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define get-tagpicker-focus-selector() [data-tiddler-title=\"$(currentTiddlerCSSEscaped)$\"] .tc-add-tag-name input\n\n\\define delete-tag-state-tiddlers() \u003C$action-deletetiddler $filter=\"[\u003CnewTagNameTiddler>] [\u003CstoreTitle>] [\u003CtagSelectionState>]\"/>\n\n\\define add-tag-actions(actions,tagField:\"tags\")\n\u003C$set name=\"tag\" value={{{ [\u003C__tiddler__>get[text]] }}}>\n\u003C$list filter=\"[\u003CsaveTiddler>!contains:$tagField$\u003Ctag>!match[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n\u003C$action-listops $tiddler=\u003C\u003CsaveTiddler>> $field=\u003C\u003C__tagField__>> $subfilter=\"-[\u003Ctag>]\"/>\n\"\"\">\n\u003C$action-listops $tiddler=\u003C\u003CsaveTiddler>> $field=\u003C\u003C__tagField__>> $subfilter=\"[\u003Ctag>]\"/>\n$actions$\n\u003C/$list>\n\u003C/$set>\n\u003C\u003Cdelete-tag-state-tiddlers>>\n\u003C$action-setfield $tiddler=\u003C\u003CrefreshTitle>> text=\"yes\"/>\n\\end\n\n\\define clear-tags-actions-inner()\n\u003C$list filter=\"[\u003CstoreTitle>has[text]] [\u003CnewTagNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"\u003C\u003Ccancel-delete-tiddler-actions \"cancel\">>\"\"\">\n\u003C\u003Cdelete-tag-state-tiddlers>>\n\u003C/$list>\n\\end\n\n\\define clear-tags-actions()\n\u003C$set name=\"userInput\" value={{{ [\u003CstoreTitle>get[text]] }}}>\n\u003C$list filter=\"[\u003CnewTagNameTiddler>get[text]!match\u003CuserInput>]\" emptyMessage=\"\"\"\u003C\u003Cclear-tags-actions-inner>>\"\"\">\n\u003C$action-setfield $tiddler=\u003C\u003CnewTagNameTiddler>> text=\u003C\u003CuserInput>>/>\u003C$action-setfield $tiddler=\u003C\u003CrefreshTitle>> text=\"yes\"/>\n\u003C/$list>\n\u003C/$set>\n\\end\n\n\\define tag-picker-inner(actions,tagField:\"tags\")\n\\whitespace trim\n\u003C$vars newTagNameInputTiddlerQualified=\u003C\u003Cqualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddlerQualified=\u003C\u003Cqualify \"$:/temp/NewTagName/selected-item\">> fallbackTarget={{$(palette)$##tag-background}} colourA={{$(palette)$##foreground}} colourB={{$(palette)$##background}}>\n\u003C$vars storeTitle={{{ [\u003CnewTagNameInputTiddler>!match[]] ~[\u003CnewTagNameInputTiddlerQualified>] }}} tagSelectionState={{{ [\u003CnewTagNameSelectionTiddler>!match[]] ~[\u003CnewTagNameSelectionTiddlerQualified>] }}}>\n\u003C$vars refreshTitle=\u003C\u003Cqualify \"$:/temp/NewTagName/refresh\">> nonSystemTagsFilter=\"[tags[]!is[system]search:title\u003CuserInput>sort[]sort[color]]\" systemTagsFilter=\"[tags[]is[system]search:title\u003CuserInput>sort[]sort[color]]\">\n\u003Cdiv class=\"tc-edit-add-tag\">\n\u003Cdiv>\n\u003Cspan class=\"tc-add-tag-name tc-small-gap-right\">\n\u003C$macrocall $name=\"keyboard-driven-input\" tiddler=\u003C\u003CnewTagNameTiddler>> storeTitle=\u003C\u003CstoreTitle>> refreshTitle=\u003C\u003CrefreshTitle>>\n\t\tselectionStateTitle=\u003C\u003CtagSelectionState>> inputAcceptActions=\"\"\"\u003C$macrocall $name=\"add-tag-actions\" actions=\u003C\u003C__actions__>> tagField=\u003C\u003C__tagField__>>/>\"\"\"\n\t\tinputCancelActions=\u003C\u003Cclear-tags-actions>> tag=\"input\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}}\n\t\tfocusPopup=\u003C\u003Cqualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=\u003C\u003CtabIndex>> \n\t\tfocus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}} filterMinLength={{$:/config/Tags/MinLength}} \n\t\tcancelPopups=\u003C\u003CcancelPopups>> configTiddlerFilter=\"[[$:/core/macros/tag-picker]]\"/>\n\u003C/span>\u003C$button popup=\u003C\u003Cqualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags
{"title":"$:/core/modules/editor-operations/text/fancyquotes.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[\"fancyquotes\"] = function(event,operation) {\nvar listtext=operation.selection;\n\n// ellipsis\n listtext= listtext.replace(/\\.\\.\\./gm,'…');\n// opening quotes\n listtext= listtext.replace(/([\\\\n \\(\\t])\\\"/gm,'$1“');\n listtext= listtext.replace(/([\\\\n \\(\\t])\\'/gm,'$1');\n//substitute prime and double prime if following numbers\n listtext= listtext.replace(/([0-9])'/gm,'$1');\n listtext= listtext.replace(/([0-9])\"/gm,'$1″');\n//rearrange \". to .\"\n// remove this one because it is only Americans who insist on this.\n// listtext= listtext.replace(/\"([.!?])/gm,'$1”');\n// closing quote\n listtext= listtext.replace(/([?!.,])\"([\\n \\t\\)])/gm,'$1”$2');\n listtext= listtext.replace(/\"([!?., ][\\n \\t\\)])/gm,'”$1');\n listtext= listtext.replace(/'([\\n \\t])/gm,'$1');\n listtext= listtext.replace(/'([!?.])/gm,'$1');\n//apostrophes\n listtext= listtext.replace(/([a-zA-Z])'([a-zA-Z])/gm,'$1$2');\n//convert post sentence double space to single\n listtext= listtext.replace(/([\\.?!] ) /gm,'$1');\n//convert x to × when between numbers\n// SIB: this broke URLs for me\n// listtext= listtext.replace(/([0-9])x([0-9])/gm,'$1×$2');\n//convert superscript small o to °\n listtext= listtext.replace(/\\^\\^o\\^\\^/gm,'°');\n//convert ens and ems\n// listtext= listtext.replace(/--/gm,'');\n// listtext= listtext.replace(/---/gm,'—');\n\n\noperation.replacement=listtext;\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","created":"20160328022859019","modified":"20201211141928688","tags":""},
{"title":"$:/core/templates/canonical-uri-external-image","created":"20201031142744332","modified":"20201031142744139","type":"text/vnd.tiddlywiki","text":"\u003C!--\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./extimage/\u003C$view field=\"title\" format=\"doubleurlencoded\"/>"},
{"title":"$:/core/ui/EditorToolbar/linkify","caption":"{{$:/language/Buttons/Linkify/Caption}}","condition":"[\u003CtargetTiddler>!has[type]] [\u003CtargetTiddler>type[text/vnd.tiddlywiki]]","created":"20210928031136147","creator":"soren","description":"{{$:/language/Buttons/Linkify/Hint}}","icon":"$:/core/images/linkify","modified":"20210928031136215","modifier":"soren","shortcuts":"((linkify))","tags":"$:/tags/EditorToolbar","type":"text/vnd.tiddlywiki","text":"\u003C$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"},
{"title":"$:/core/ui/EditorToolbar/transcludify","caption":"{{$:/language/Buttons/Transcludify/Caption}}","condition":"[\u003CtargetTiddler>!has[type]] [\u003CtargetTiddler>type[text/vnd.tiddlywiki]]","created":"20210928031136147","creator":"soren","description":"{{$:/language/Buttons/Transcludify/Hint}}","icon":"$:/core/images/transcludify","modified":"20210928031136239","modifier":"soren","shortcuts":"((transcludify))","tags":"$:/tags/EditorToolbar","type":"text/vnd.tiddlywiki","text":"\u003C$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"},
{"title":"$:/core/ui/SideBar/Open","caption":"{{$:/language/SideBar/Open/Caption}}","created":"20201126152706945","modified":"20201126152652516","tags":"$:/tags/SideBar","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n\u003C$action-listops $tiddler=\u003C\u003Ctv-story-list>> $subfilter=\"+[insertbefore:currentTiddler\u003CactionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n\u003Cdiv class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n\u003C$droppable actions=\u003C\u003Cdrop-actions>> enable=\u003C\u003Ctv-allow-drag-and-drop>>>\n\u003C\u003Cplaceholder>>\n\u003Cdiv>\n$button$\n\u003C/div>\n\u003C/$droppable>\n\\end\n\n\u003Cdiv class=\"tc-sidebar-tab-open\">\n\u003C$list filter=\"[list\u003Ctv-story-list>]\" history=\u003C\u003Ctv-history-list>> storyview=\"pop\">\n\u003Cdiv class=\"tc-sidebar-tab-open-item\">\n\u003C$macrocall $name=\"droppable-item\" button=\"\"\"\u003C$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">{{$:/core/images/close-button}}\u003C/$button>&nbsp;\u003C$link to={{!!title}}>\u003C$view field=\"title\"/>\u003C/$link>\"\"\"/>\n\u003C/div>\n\u003C/$list>\n\u003C$tiddler tiddler=\"\">\n\u003Cdiv>\n\u003C$macrocall $name=\"droppable-item\" button=\"\"\"\u003C$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\">\u003C\u003Clingo Button>>\u003C/$button>\"\"\"/>\n\u003C/div>\n\u003C/$tiddler>\n\u003C/div>\n\n{{$:/sib/StorySaver/Saver}}"},
{"title":"$:/core/ui/SideBarSegments/tabs","created":"20210731164211393","modified":"20210731164054970","tags":"$:/tags/SideBarSegment","type":"text/vnd.tiddlywiki","text":"\\define isEnabled() [addprefix[$:/config/zettelkasten/SideBar/Visibility/]get{$:/config/sib/CurrentEditionPublicity}] -[[no]]\n\n\u003Cdiv class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n\u003C$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]filter\u003CisEnabled>]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\" explicitState=\"$:/state/tab/sidebar--595412856\"/>\n\n\u003C/div>\n"},
{"title":"$:/core/ui/ViewTemplate/subtitle","created":"20210611015734693","modified":"20210611023708529","tags":"$:/tags/ViewTemplate","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\n\u003C$reveal type=\"nomatch\" stateTitle=\u003C\u003Cfolded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n\u003Cdiv class=\"tc-subtitle\">\n\u003Cdiv>\n\u003Ci class=\"fa fa-history\"/>&ensp;Created&nbsp;\u003C$view field=\"created\" format=\"date\" template={{$:/language/Tiddler/DateFormat}} />\n\u003C/div>\n\u003Cdiv>\n\u003Ci class=\"fa fa-clock\"/>&ensp;Updated&nbsp;\u003C$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}} />\n\u003C/div>\n\u003C$list filter=\"[all[current]has[description]]\">\n\t\u003Cdiv>\n\t\u003Ci class=\"fa fa-gem\"/>&ensp;{{!!description}}\n\t\u003C/div>\n\u003C/$list>\n\u003C/div>\n\u003C/$reveal>"},
{"title":"$:/DefaultTiddlers","created":"20200118003419923","creator":"soren","modified":"20200804182428572","modifier":"soren","type":"text/vnd.tiddlywiki","text":"$:/sib/GettingStarted"},
{"title":"$:/inmysocks/macros/day-diff.js","text":"/*\\\ntitle: $:/inmysocks/macros/day-diff.js\ntype: application/javascript\nmodule-type: macro\n\nTakes two dates and returns their difference in days\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 = \"day-diff\";\n\nexports.params = [\n\t{name: \"year1\"},\n\t{name: \"month1\"},\n\t{name: \"day1\"},\n\t{name: \"year2\"},\n\t{name: \"month2\"},\n\t{name: \"day2\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(year1, month1, day1, year2, month2, day2) {\n\t//Make each date object.\n\tvar date1 = new Date(year1, Number(month1)+Number(1), day1);\n\tvar date2 = new Date(year2, Number(month2)+Number(1), day2);\n\n\t//Find difference in milliseconds.\n\tvar elapsed = date2.getTime()-date1.getTime();\n\n\t//Number of milliseconds in a day.\n\tvar dayMS = 86400000; \n\n\t//Convert milliseconds to year months and days\n\tvar days_diff = Math.floor(elapsed/dayMS);\n\t\n\tvar result = days_diff;\n\n\treturn result;\n};\n\n})();\n","type":"application/javascript","module-type":"macro","created":"20150225185218583","modified":"20211204021739668","tags":""},
{"title":"$:/isEncrypted","text":"no"},
{"title":"$:/layout","created":"20210615031007914","modified":"20210615030805720","type":"text/vnd.tiddlywiki","text":"$:/core/ui/PageTemplate"},
{"title":"$:/palette","created":"20200118025758811","creator":"soren","modified":"20210920194636481","modifier":"soren","type":"text/vnd.tiddlywiki","text":"$:/palettes/GruvboxDark"},
{"author":"Alan Aldrich","core-version":"5.1.16","created":"20170212060612535","dependents":"","description":"TiddlyTables","list":"readme","modified":"20200322003951511","plugin-type":"plugin","title":"$:/plugins/aaldrich/tables","version":"0.6.21","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/aaldrich/tables/button\":{\"title\":\"$:/plugins/aaldrich/tables/button\",\"caption\":\"{{$:/plugins/aaldrich/tables/button/image}} new table\",\"created\":\"20170205062652787\",\"description\":\"Create a new table\",\"modified\":\"20191212071246997\",\"tags\":\"$:/tags/PageControls\",\"text\":\"\\\\define newTableText()\\n\u003C\u003Ctable \\\"$(newTableTitle)$\\\">>\\n\\\\end\\n\\n\\\\define makeNewTable()\\n\\n\u003C$set name=\\\"newTableTitle\\\" value={{$:/temp/tables/button/generate-new-table-name}} >\\n\u003C$action-setfield $tiddler={{$:/temp/tables/button/generate-new-table-name}} text=\u003C\u003CnewTableText>>/>\\n\u003C/$set>\\n\u003C$action-navigate $to={{$:/temp/tables/button/generate-new-table-name}}/>\\n\u003C$action-deletetiddler $tiddler=\\\"$:/temp/tables/button/generate-new-table-name\\\"/>\\n\\\\end\\n\\n\u003C$button class=\u003C\u003Ctv-config-toolbar-class>> tooltip=\\\"Create new table\\\" aria-label={{$:/plugins/aaldrich/tables/button!!caption}} actions=\u003C\u003CmakeNewTable>>>\\n\u003C$list filter=\\\"[\u003Ctv-config-toolbar-icons>prefix[yes]]\\\">\\n{{$:/plugins/aaldrich/tables/button/image}}\\n\u003C/$list>\\n\u003C$list filter=\\\"[\u003Ctv-config-toolbar-text>prefix[yes]]\\\">\\n\u003Cspan class=\\\"tc-btn-text\\\">\u003C$text text=\\\"new table\\\"/>\u003C/span>\\n\u003C/$list>\\n\u003C$action-createtiddler $basetitle={{$:/plugins/aaldrich/tables/defaults!!tbl-default-title}}\\n$savetitle=\\\"$:/temp/tables/button/generate-new-table-name\\\"\\ntbl-add-records={{$:/plugins/aaldrich/tables/defaults!!tbl-add-records}}\\ntbl-anything={{$:/plugins/aaldrich/tables/defaults!!tbl-anything}}\\ntbl-button-actions={{$:/plugins/aaldrich/tables/defaults!!tbl-button-actions}}\\ntbl-button-icon={{$:/plugins/aaldrich/tables/defaults!!tbl-button-icon}}\\ntbl-button-tip={{$:/plugins/aaldrich/tables/defaults!!tbl-button-tip}}\\ntbl-caption={{$:/plugins/aaldrich/tables/defaults!!tbl-caption}}\\ntbl-checkbox-actions-selected={{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-actions-selected}}\\ntbl-checkbox-actions-unselected={{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-actions-unselected}}\\ntbl-checkbox-field={{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-field}}\\ntbl-checkbox-tag={{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-tag}}\\ntbl-checkbox-tip={{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-tip}}\\ntbl-checkbox-value-selected={{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-value-selected}}\\ntbl-checkbox-value-unselected={{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-value-unselected}}\\ntbl-class={{$:/plugins/aaldrich/tables/defaults!!tbl-class}}\\ntbl-columns={{$:/plugins/aaldrich/tables/defaults!!tbl-columns}}\\ntbl-expand={{$:/plugins/aaldrich/tables/defaults!!tbl-expand}}\\ntbl-filter={{$:/plugins/aaldrich/tables/defaults!!tbl-filter}}\\ntbl-show-caption={{$:/plugins/aaldrich/tables/defaults!!tbl-show-caption}}\\ntbl-show-colgroup={{$:/plugins/aaldrich/tables/defaults!!tbl-show-colgroup}}\\ntbl-show-edit={{$:/plugins/aaldrich/tables/defaults!!tbl-show-edit}}\\ntbl-show-footer={{$:/plugins/aaldrich/tables/defaults!!tbl-show-footer}}\\ntbl-show-header={{$:/plugins/aaldrich/tables/defaults!!tbl-show-header}}\\ntbl-show-mode={{$:/plugins/aaldrich/tables/defaults!!tbl-show-mode}}\\ntbl-show-pagination={{$:/plugins/aaldrich/tables/defaults!!tbl-show-pagination}}\\ntbl-limit={{$:/plugins/aaldrich/tables/defaults!!tbl-limit}}\\ntbl-mode={{$:/plugins/aaldrich/tables/defaults!!tbl-mode}}\\ntbl-page-marker={{$:/plugins/aaldrich/tables/defaults!!tbl-page-marker}}\\ntbl-sort-by={{$:/plugins/aaldrich/tables/defaults!!tbl-sort-by}}\\ntbl-sort-negate={{$:/plugins/aaldrich/tables/defaults!!tbl-sort-negate}}\\ntbl-sort-type={{$:/plugins/aaldrich/tables/defaults!!tbl-sor
{"created":"20210327052508762","dependents":"$:/plugins/tiddlywiki/codemirror","description":"A better editor for TW5 - built on the Official CodeMirror Plugin","modified":"20210510224047195","name":"CMPlus","plugin-type":"plugin","tags":"","title":"$:/plugins/adithyab/cmplus","version":"0.2.1","type":"application/json","text":"{\"tiddlers\":{\"$:/config/codemirror/autocomplete\":{\"title\":\"$:/config/codemirror/autocomplete\",\"text\":\"{\\n\\t\\\"Ctrl-Space\\\": \\\"autocomplete\\\"\\n}\",\"type\":\"json\",\"created\":\"20210328004023360\",\"extend\":\"extraKeys\",\"modified\":\"20210328004023360\"},\"$:/plugins/adithyab/cmplus/macros\":{\"title\":\"$:/plugins/adithyab/cmplus/macros\",\"created\":\"20210328020051916\",\"modified\":\"20210328053732117\",\"tags\":\"$:/tags/Macro\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\\\\define cmcolour(name)\\n{{$:/plugins/adithyab/cmplus/settings##$name$}}\\n\\\\end\"},\"$:/plugins/adithyab/cmplus/readme\":{\"title\":\"$:/plugins/adithyab/cmplus/readme\",\"created\":\"20210328060842133\",\"modified\":\"20210328060929665\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"!! TW5 CodeMirrorPlus\\nTowards making a better editor for TiddlyWiki5.\\n\"},\"$:/plugins/adithyab/cmplus/settings\":{\"title\":\"$:/plugins/adithyab/cmplus/settings\",\"text\":\"monospace-font:monospace,\\\"Courier New\\\"\\nselected:rgba(100,100,100,0.3)\\nlinenumber:\u003C\u003Ccolour primary>>\\nkeyword:\u003C\u003Ccolour code-foreground>>\\nmacro:\u003C\u003Ccolour code-foreground>>\\nquote:\u003C\u003Ccolour primary>>\\npre:\u003C\u003Ccolour foreground>>\\nexternallink:\u003C\u003Ccolour external-link-foreground>>\\ninternallink:\u003C\u003Ccolour tiddler-title-foreground>>\\nlink:\u003C\u003Ccolour tiddler-title-foreground>>\\ntransclude:\u003C\u003Ccolour tiddler-title-foreground>>\\nmonospace:\u003C\u003Ccolour foreground>>\\nlist1:\u003C\u003Ccolour primary>>\\nlist2:\u003C\u003Ccolour primary>>\\nlist3:\u003C\u003Ccolour primary>>\\nlist4:\u003C\u003Ccolour primary>>\\nlist5:\u003C\u003Ccolour primary>>\\nlist6:\u003C\u003Ccolour primary>>\\nh1:\u003C\u003Ccolour primary>>\\nh2:\u003C\u003Ccolour primary>>\\nh3:\u003C\u003Ccolour primary>>\\nh4:\u003C\u003Ccolour primary>>\\nh5:\u003C\u003Ccolour primary>>\\nh6:\u003C\u003Ccolour primary>>\\nhr:\u003C\u003Ccolour primary>>\",\"type\":\"application/x-tiddler-dictionary\",\"created\":\"20210328015904035\",\"modified\":\"20210328054754059\",\"tags\":\"\"},\"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\":{\"title\":\"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\",\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n\\n(function (mod) {\\n\\tif (typeof exports == \\\"object\\\" && typeof module == \\\"object\\\") // CommonJS\\n\\t\\tmod(require(\\\"../../lib/codemirror\\\"));\\n\\telse if (typeof define == \\\"function\\\" && define.amd) // AMD\\n\\t\\tdefine([\\\"../../lib/codemirror\\\"], mod);\\n\\telse // Plain browser env\\n\\t\\tmod(CodeMirror);\\n})(function (CodeMirror) {\\n\\t\\\"use strict\\\";\\n\\n\\tCodeMirror.registerHelper('hint', 'anyword', function (editor) {\\n\\t\\tvar cur = editor.getCursor();\\n\\t\\tvar curLine = editor.getLine(cur.line);\\n\\t\\tvar start = cur.ch;\\n\\t\\tvar end = start;\\n\\t\\tvar max_length = 30\\n\\t\\twhile (start) {\\n\\t\\t\\tif (end - start > max_length) {\\n\\t\\t\\t\\treturn null;\\n\\t\\t\\t}\\n\\t\\t\\tvar ch = curLine.charAt(start - 1)\\n\\t\\t\\tif (!(ch == '[' || ch == '{' || ch == \\\"|\\\")) {\\n\\t\\t\\t\\tstart--;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar curWord = start !== end && curLine.slice(start, end);\\n\\t\\tif (curLine.charAt(start) == '$') {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tlist: $tw.wiki.filterTiddlers(`[all[tiddlers]search:title:literal[${curWord}]!prefix[$:/state]]`),\\n\\t\\t\\t\\tfrom: CodeMirror.Pos(cur.line, start),\\n\\t\\t\\t\\tto: CodeMirror.Pos(cur.line, end)\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\treturn {\\n\
{"title":"$:/plugins/bimlas/locator","description":"Locator: Discover and search by context","author":"bimlas","version":"2.0.1","core-version":">=5.1.18","source":"https://gitlab.com/bimlas/tw5-locator","plugin-type":"plugin","list":"README/README README/macros README/TIPS README/CHANGELOG README/LICENSE","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/config/bimlas/locator/fields/LINKS-IN-TEXT\":{\"title\":\"$:/config/bimlas/locator/fields/LINKS-IN-TEXT\",\"field-direction\":\"from\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"$:/plugins/bimlas/locator/field-templates/link\"},\"$:/config/bimlas/locator/fields/bag\":{\"title\":\"$:/config/bimlas/locator/fields/bag\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/caption\":{\"title\":\"$:/config/bimlas/locator/fields/caption\",\"hide-in-nested-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/color\":{\"title\":\"$:/config/bimlas/locator/fields/color\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"$:/plugins/bimlas/locator/field-templates/color\"},\"$:/config/bimlas/locator/fields/created\":{\"title\":\"$:/config/bimlas/locator/fields/created\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/draft.of\":{\"title\":\"$:/config/bimlas/locator/fields/draft.of\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/draft.title\":{\"title\":\"$:/config/bimlas/locator/fields/draft.title\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/icon\":{\"title\":\"$:/config/bimlas/locator/fields/icon\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"$:/plugins/bimlas/locator/field-templates/icon\"},\"$:/config/bimlas/locator/fields/list-after\":{\"title\":\"$:/config/bimlas/locator/fields/list-after\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"$:/plugins/bimlas/locator/field-templates/link\"},\"$:/config/bimlas/locator/fields/list-before\":{\"title\":\"$:/config/bimlas/locator/fields/list-before\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"$:/plugins/bimlas/locator/field-templates/link\"},\"$:/config/bimlas/locator/fields/list\":{\"title\":\"$:/config/bimlas/locator/fields/list\",\"field-type\":\"list\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"$:/plugins/bimlas/locator/field-templates/link\"},\"$:/config/bimlas/locator/fields/modified\":{\"title\":\"$:/config/bimlas/locator/fields/modified\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/revision\":{\"title\":\"$:/config/bimlas/locator/fields/revision\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/tags\":{\"title\":\"$:/config/bimlas/locator/fields/tags\",\"field-direction\":\"to\",\"field-type\":\"list\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"$:/plugins/bimlas/locator/field-templates/tag\"},\"$:/config/bimlas/locator/fields/text\":{\"title\":\"$:/config/bimlas/locator/fields/text\",\"hide-in-nested-fields-filter\":\"yes\",\"hide-in-regular-fields-filter\":\"yes\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/bimlas/locator/fields/title\":{\"title\":\"$:/config/bimlas/locator/fields/title\",\"hide-in-nested-fields
{"title":"$:/plugins/bimlas/locator/edit-template/locator-references","created":"20201204132628162","modified":"20201204132556548","tags":"$:/tags/EditTemplate","type":"text/vnd.tiddlywiki","text":"\\define prompt()\n The following references to this tiddler in //\u003C\u003C__field__>>// [[Locator field|$:/plugins/bimlas/locator/settings/settings]] will not be automatically updated:\n\\end\n\n\\define children-by-field(field)\n \u003C$list filter=\"[title{!!draft.of}locator-enlist-children:$field$[]first[]]\" variable=\"null\">\n \u003C$vars stateTiddler=\u003C\u003Cqualify \"$:/state/bimlas/locator/edit/references/$field$\">> >\n\n \u003C$reveal type=\"nomatch\" state=\u003C\u003CstateTiddler>> text=\"show\">\n \u003C$button set=\u003C\u003CstateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">\n {{$:/core/images/right-arrow}}\n \u003C\u003Cprompt>>\n \u003C/$button>\n \u003C/$reveal>\n \u003C$reveal type=\"match\" state=\u003C\u003CstateTiddler>> text=\"show\">\n \u003C$button set=\u003C\u003CstateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">\n {{$:/core/images/down-arrow}}\n \u003C\u003Cprompt>>\n \u003C/$button>\n \u003C/$reveal>\n\n \u003C$reveal type=\"match\" state=\u003C\u003CstateTiddler>> text=\"show\">\n \u003C$list filter=\"[title{!!draft.of}locator-enlist-children:$field$[]]\" template=\"$:/core/ui/ListItemTemplate\">\n \u003C$link/>\n \u003C/$list>\n \u003C/$reveal>\n\n \u003C/$vars>\n \u003C/$list>\n\\end\n\n\u003C$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n \u003C$list filter=\"[locator-enlist-relationship-fields[]] -[[tags]] -[[list]] -[[LINKS-IN-TEXT]]\" variable=\"currentField\">\n \u003C$macrocall $name=\"children-by-field\" field=\u003C\u003CcurrentField>>/>\n \u003C/$list>\n\u003C/$reveal>"},
{"name":"Relink","title":"$:/plugins/flibbles/relink","description":"Flexibility when relinking renamed tiddlers","author":"Flibbles","version":"2.0.0","core-version":">=5.1.22","source":"https://github.com/flibbles/tw5-relink","demo":"http://flibbles.github.io/tw5-relink/","list":"readme configuration license","dependents":"","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/config/flibbles/relink/PluginLibrary\":{\"title\":\"$:/config/flibbles/relink/PluginLibrary\",\"caption\":\"//Relink// Library\",\"tags\":\"$:/tags/PluginLibrary\",\"url\":\"https://flibbles.github.io/tw5-relink/library/index.html\",\"text\":\"The //Relink// library contains //Relink// as well as its supplemental plugins. It is maintained by Flibbles. See the [[github page|https://github.com/flibbles/tw5-relink]] for more information.\\n\"},\"$:/config/flibbles/relink/attributes/$button/set\":{\"title\":\"$:/config/flibbles/relink/attributes/$button/set\",\"text\":\"reference\"},\"$:/config/flibbles/relink/attributes/$button/setTo\":{\"title\":\"$:/config/flibbles/relink/attributes/$button/setTo\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$button/to\":{\"title\":\"$:/config/flibbles/relink/attributes/$button/to\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$checkbox/tag\":{\"title\":\"$:/config/flibbles/relink/attributes/$checkbox/tag\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$checkbox/tiddler\":{\"title\":\"$:/config/flibbles/relink/attributes/$checkbox/tiddler\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$count/filter\":{\"title\":\"$:/config/flibbles/relink/attributes/$count/filter\",\"text\":\"filter\"},\"$:/config/flibbles/relink/attributes/$draggable/filter\":{\"title\":\"$:/config/flibbles/relink/attributes/$draggable/filter\",\"text\":\"filter\"},\"$:/config/flibbles/relink/attributes/$draggable/tiddler\":{\"title\":\"$:/config/flibbles/relink/attributes/$draggable/tiddler\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler\":{\"title\":\"$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$edit-text/tiddler\":{\"title\":\"$:/config/flibbles/relink/attributes/$edit-text/tiddler\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$edit/tiddler\":{\"title\":\"$:/config/flibbles/relink/attributes/$edit/tiddler\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$encrypt/filter\":{\"title\":\"$:/config/flibbles/relink/attributes/$encrypt/filter\",\"text\":\"filter\"},\"$:/config/flibbles/relink/attributes/$fieldmangler/tiddler\":{\"title\":\"$:/config/flibbles/relink/attributes/$fieldmangler/tiddler\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$fields/tiddler\":{\"title\":\"$:/config/flibbles/relink/attributes/$fields/tiddler\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$image/source\":{\"title\":\"$:/config/flibbles/relink/attributes/$image/source\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$importvariables/filter\":{\"title\":\"$:/config/flibbles/relink/attributes/$importvariables/filter\",\"text\":\"filter\"},\"$:/config/flibbles/relink/attributes/$link/to\":{\"title\":\"$:/config/flibbles/relink/attributes/$link/to\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$linkcatcher/set\":{\"title\":\"$:/config/flibbles/relink/attributes/$linkcatcher/set\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$linkcatcher/to\":{\"title\":\"$:/config/flibbles/relink/attributes/$linkcatcher/to\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$list/editTemplate\":{\"title\":\"$:/config/flibbles/relink/attributes/$list/editTemplate\",\"text\":\"title\"},\"$:/config/flibbles/relink/attributes/$list/emptyMessage\":{\"title\":\"$:/config/flibbles/relink/attributes/$list/emptyMessage\",\"text\":\"wikitext\"},\"$:/config/flibbles/relink/attributes/$list/filter\":{\"title\":\"$:/config/flibbles/relink/attributes/$list/filter\",\"text\":\"filter\"},\"$:/config/flibbles/relink/
{"text":"{\n \"startingDay\": \"0\",\n \"days\": [\"S\", \"M\", \"T\", \"W\", \"R\", \"F\", \"A\"],\n\t\"months\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\"buttons\": \"yes\",\n\t\"buttonsImages\": [\"{{$:/core/images/chevron-left}}\", \"{{$:/core/images/left-arrow}}\", \"{{$:/core/images/right-arrow}}\", \"{{$:/core/images/chevron-right}}\"],\n\t\"cellContent\": \"sc_linkNavigateToOrCreateEditModeJournal\",\n\t\"format\": \"YYYY-0MM-0DD ddd\"\n}","type":"application/json","created":"20160829124345776","modified":"20200517133628092","tags":"","title":"$:/plugins/frd/simplecalendar/CalendarConfigDefault"},
{"author":"ihm4u","core-version":">=5.1.9","created":"20210301193448094","dependents":"","description":"Tidgraph - Easy tiddler graphs for TW5","list":"readme changelog documentation","modified":"20210301193448094","plugin-type":"plugin","source":"https://ihm4u.github.io/tw5plugs","title":"$:/plugins/ihm/tidgraph","version":"0.9.6","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/ihm/templates/collapse\":{\"title\":\"$:/plugins/ihm/templates/collapse\",\"created\":\"20151120174133063\",\"modified\":\"20151120180705805\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\u003Csvg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" x=\\\"0px\\\"\\n\\t y=\\\"0px\\\" width=\\\"14px\\\" height=\\\"14px\\\" >\\n\u003Ccircle cx=\\\"7\\\" cy=\\\"7\\\" r=\\\"6\\\" stroke=\\\"#aeb0b5\\\" stroke-width=\\\"1\\\" fill=\\\"#aeb0b5\\\"/>\\n\u003Cpolyline points=\\\"4,7 10,7\\\" fill=\\\"none\\\" stroke=\\\"white\\\"/>\\n\u003C/svg>\\n\"},\"$:/plugins/ihm/templates/expand\":{\"title\":\"$:/plugins/ihm/templates/expand\",\"created\":\"20151120174133063\",\"modified\":\"20151120180705805\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\u003Csvg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" x=\\\"0px\\\"\\n\\t y=\\\"0px\\\" width=\\\"14px\\\" height=\\\"14px\\\" >\\n\u003Ccircle cx=\\\"7\\\" cy=\\\"7\\\" r=\\\"6\\\" stroke=\\\"#aeb0b5\\\" stroke-width=\\\"1\\\" fill=\\\"#aeb0b5\\\"/>\\n\u003Cpolyline points=\\\"4,7 10,7 7,7 7,10 7,4\\\" fill=\\\"none\\\" stroke=\\\"white\\\"/>\\n\u003C/svg>\\n\"},\"$:/plugins/ihm/tidgraph/changelog\":{\"title\":\"$:/plugins/ihm/tidgraph/changelog\",\"created\":\"20151024161547099\",\"creator\":\"ihm4u\",\"modified\":\"20151031061347109\",\"modifier\":\"ihm4u\",\"tags\":\"\",\"text\":\"For the complete changelog see\\n\\nhttps://ihm4u.github.io/tw5plugs/#Tidgraph%20-%20Changelog\\n\"},\"$:/plugins/ihm/tidgraph/documentation\":{\"title\":\"$:/plugins/ihm/tidgraph/documentation\",\"text\":\"!!Example\\nThe following example shows a tiddler which tags 7 children:\\n\\n``\u003C$tidgraph start=\\\"Virtues\\\" />``\\n\\nlooks like this:\\n\\n{{$:/plugins/ihm/tidgraph/tidgraph.png}}\\n\\n!!Usage\\nSimple usage:\\n\\n``\u003C$tidgraph start=\\\"MyRootTiddler\\\" />``\\n\\nThe map will start with MyRootTiddler on the left, and show all its children recursively. The default maximum depth is 10 levels, it can be changed with the `maxdepth` attribute.\\n\\nAll options:\\n\\n|!Attribute |!Description|!Default |\\n|`start` |Initial tiddler that starts the map | none |\\n|`startat` |First level to display. 0 is the root tiddler named in the `start` attribute. 1 is the next level, etc. | 0 |\\n|`maxdepth` |Maximum depth to display.| 10 |\\n|`mode` |//tagging// or //linking// or custom. This is how to identify the children of a node. With //tagging// Tiddlers that tag other tiddlers become their parent. With //linking// tiddlers that link to other tiddlers become their parent. A custom mode can be specified by a `$:/config/tidgraph/modes/MyMode` tiddler where `MyMode` is the name of the mode. The subfilter can be also specified directly; e.g. `mode=\\\"fields[]\\\"`. See [[Custom Mode Demo|https://ihm4u.github.io/tw5plugs/#Custom%20Mode%20Demo]] for an example | //tagging// |\\n|`nodetitle` |Field to use as title for the node. | //title// (or //caption// if present) |\\n|`tooltip` |List of fields to use for node tooltip. The first field with a non empty value is used. | //summary// |\\n|`filter` |Only tiddlers matching filter will be used | none |\\n|`nocollapse` |Disable ability to collapse nodes. The graph allows node collapsing by default. | false |\\n|`nodetemplate` |One or mode node templates to make node look like you want. See the [[Node Templates Demo|https://ihm4u.github.io/tw5plugs/#Node%20Templates%20Demo]] for examples of how to use them. | none |\\n|`layout` |`E` for East (Vertical) or `S` for south (Horizontal) layout. | E |\\n\\n!CSS classes\\nYou can also change colors, and other styles with the following CSS classes.\\n\\n|!Class |!D
{"author":"kixam","core-version":">=5.1.8","created":"20210303231904987","dependents":"","description":"datepicker plugin for TiddlyWiki5, based on Pikaday version 1.6.1","list":"readme license usage","modified":"20210303231904987","plugin-type":"plugin","source":"https://github.com/kixam/TW5-datepicker","title":"$:/plugins/kixam/datepicker","version":"0.5.2","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/kixam/datepicker/icon\":{\"title\":\"$:/plugins/kixam/datepicker/icon\",\"tags\":\"$:/tags/Image\",\"text\":\"\u003Csvg height=\\\"22pt\\\" width=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\">\\n\u003Cpath d=\\\"M 13.775391 0 L 2.0664062 6.8671875 L 2.0664062 20.599609 L 13.775391 27.464844 L 25.484375 20.599609 L 25.484375 6.8671875 L 13.775391 0 z M 9.6582031 3.6230469 L 10.292969 3.6230469 C 10.728856 3.6230469 11.101705 3.7794391 11.412109 4.0898438 C 11.722514 4.4002483 11.876953 4.7730982 11.876953 5.2089844 L 11.876953 6.1601562 L 15.681641 6.1601562 L 15.681641 5.2089844 C 15.681641 4.7730982 15.83608 4.4002483 16.146484 4.0898438 C 16.456889 3.7794391 16.829738 3.6230469 17.265625 3.6230469 L 17.900391 3.6230469 C 18.336278 3.6230469 18.709127 3.7794391 19.019531 4.0898438 C 19.329936 4.4002483 19.484375 4.7730982 19.484375 5.2089844 L 19.484375 6.1601562 L 20.753906 6.1601562 C 21.097333 6.1601562 21.393566 6.284192 21.644531 6.5351562 C 21.895499 6.7861224 22.021484 7.0843085 22.021484 7.4277344 L 22.021484 20.107422 C 22.021484 20.450848 21.895499 20.749034 21.644531 21 C 21.393566 21.250966 21.097333 21.375 20.753906 21.375 L 6.8046875 21.375 C 6.4612605 21.375 6.1650274 21.250966 5.9140625 21 C 5.6630976 20.749034 5.5371094 20.450848 5.5371094 20.107422 L 5.5371094 7.4277344 C 5.5371094 7.0843085 5.6630976 6.7861224 5.9140625 6.5351562 C 6.1650274 6.284192 6.4612605 6.1601563 6.8046875 6.1601562 L 8.0722656 6.1601562 L 8.0722656 5.2089844 C 8.0722656 4.7730982 8.2286584 4.4002483 8.5390625 4.0898438 C 8.8494667 3.7794391 9.2223157 3.6230469 9.6582031 3.6230469 z M 9.6582031 4.890625 C 9.5723471 4.890625 9.4982891 4.923586 9.4355469 4.9863281 C 9.3728059 5.0490687 9.3417969 5.1231279 9.3417969 5.2089844 L 9.3417969 8.0605469 C 9.3417969 8.1464033 9.3728059 8.222414 9.4355469 8.2851562 C 9.4982891 8.3478969 9.5723471 8.3789062 9.6582031 8.3789062 L 10.292969 8.3789062 C 10.378825 8.3789062 10.452884 8.3478969 10.515625 8.2851562 C 10.578367 8.222414 10.609375 8.1464033 10.609375 8.0605469 L 10.609375 5.2089844 C 10.609375 5.1231279 10.578367 5.0490687 10.515625 4.9863281 C 10.452884 4.923586 10.378825 4.890625 10.292969 4.890625 L 9.6582031 4.890625 z M 17.265625 4.890625 C 17.179769 4.890625 17.105711 4.923586 17.042969 4.9863281 C 16.980227 5.0490687 16.949219 5.1231279 16.949219 5.2089844 L 16.949219 8.0605469 C 16.949219 8.1464033 16.980227 8.222414 17.042969 8.2851562 C 17.105711 8.3478969 17.179769 8.3789062 17.265625 8.3789062 L 17.900391 8.3789062 C 17.986247 8.3789062 18.060305 8.3478969 18.123047 8.2851562 C 18.185788 8.222414 18.216797 8.1464033 18.216797 8.0605469 L 18.216797 5.2089844 C 18.216797 5.1231279 18.185788 5.0490687 18.123047 4.9863281 C 18.060305 4.923586 17.986247 4.890625 17.900391 4.890625 L 17.265625 4.890625 z M 6.8046875 9.9628906 L 6.8046875 12.816406 L 9.6582031 12.816406 L 9.6582031 9.9628906 L 6.8046875 9.9628906 z M 10.292969 9.9628906 L 10.292969 12.816406 L 13.462891 12.816406 L 13.462891 9.9628906 L 10.292969 9.9628906 z M 14.095703 9.9628906 L 14.095703 12.816406 L 17.265625 12.816406 L 17.265625 9.9628906 L 14.095703 9.9628906 z M 17.900391 9.9628906 L 17.900391 12.816406 L 20.753906 12.816406 L 20.753906 9.9628906 L 17.900391 9.9628906 z M 6.8046875 13.451172 L 6.8046875 16.621094 L 9.6582031 16.621094 L 9.6582031 13.451172 L 6.8046875 13.451172 z M 10.292969 13.451172 L 10.292969 16.621094 L 13.462891 16.621094 L 13.462891 13.451172 L 10.292969 13.451172 z M 14.095703 13.451172 L 14.095703 16.621094 L 17.265625 16.621094 L 17.265625 13.451172 L 14.095703 13.451172 z M 17.900391 13.451172 L 17.900391 16.621094 L 20.753906 16.621094 L 20.753906 13.451172 L 1
{"author":"kixam","core-version":">=5.1.8","created":"20210307161555733","dependents":"","description":"moment.js plugin for TiddlyWiki5","list":"readme license","modified":"20210307161555734","plugin-type":"plugin","source":"https://github.com/kixam/TW5-moment.js","title":"$:/plugins/kixam/moment","version":"2.24.0","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/kixam/moment/icon\":{\"title\":\"$:/plugins/kixam/moment/icon\",\"tags\":\"$:/tags/Image\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\u003Csvg height=\\\"22pt\\\" width=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\">\\n\u003Cpath d=\\\"m 64.116816,0 -54.4965957,31.959746 0.00139,63.919491 54.4965967,31.959743 54.496603,-31.959743 0,-63.919491 L 64.118211,0 Z M 63.842544,28.318892 A 35.326327,35.326327 0 0 1 99.17259,63.645219 35.326327,35.326327 0 0 1 63.842544,98.975265 35.326327,35.326327 0 0 1 28.516216,63.645219 35.326327,35.326327 0 0 1 63.842544,28.318892 Z m 0,4.775599 c -16.870097,0 -30.550728,13.680631 -30.550728,30.550728 0,16.874746 13.680631,30.555841 30.550728,30.555841 16.874745,0 30.555841,-13.681095 30.555841,-30.555841 0,-16.870097 -13.681096,-30.550728 -30.555841,-30.550728 z m 0,1.906893 c 1.06455,0 1.910611,0.860008 1.910611,1.915725 l 0,28.638722 -17.190856,0 c -1.027361,0 -1.905499,-0.85536 -1.905499,-1.910612 0,-1.059902 0.854895,-1.905963 1.905499,-1.905963 l 13.374282,0 0,-24.81285 c 0,-1.06362 0.855359,-1.925022 1.905963,-1.925022 z\\\"/>\\n\u003C/svg>\\n\"},\"$:/plugins/kixam/moment/license\":{\"title\":\"$:/plugins/kixam/moment/license\",\"text\":\"!! moment.js licence: [[MIT|http://mit-license.org/]]\\n```\\nCopyright (c) 2011-2015 Tim Wood, Iskren Chernev, Moment.js contributors\\n\\nPermission is hereby granted, free of charge, to any person\\nobtaining a copy of this software and associated documentation\\nfiles (the \\\"Software\\\"), to deal in the Software without\\nrestriction, including without limitation the rights to use,\\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the\\nSoftware is furnished to do so, subject to the following\\nconditions:\\n\\nThe above copyright notice and this permission notice shall be\\nincluded in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\\nOTHER DEALINGS IN THE SOFTWARE.\\n```\\n\\n!! Plugin license: [[BSD 2-clause simplified license|http://www.freebsd.org/copyright/freebsd-license.html]]\\n```\\nCopyright (c) 2015, kixam\\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\\n1. Redistributions of source code must retain the above copyright notice, this\\n list of conditions and the following disclaimer.\\n\\n2. 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\\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 LIAB
{"title":"$:/plugins/kookma/refnotes/styles/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\tline-height: 1;\n /*line-height: 1.5;*/\n margin-left: -0.1em;\n}\n","created":"20181214085707714","modified":"20210710124941724","tags":"$:/tags/Stylesheet","type":"text/css"},
{"title":"$:/plugins/kookma/refnotes/ui/bibtexlibrary","caption":"Bibliography","created":"20181220153648454","description":"This code adds the `bibtex-entry` tag to all tiddlers imported by `BibTeX Importer` plugin thus having a `bibtex-title` field.","modified":"20210709011254977","tags":"","type":"text/vnd.tiddlywiki","text":"\\define dispEntry()\n\u003C$link/>\n\u003C$macrocall $name=stretchText text=\"\"\"\n\u003C$view field=\"bibtex-author\"/>. (\u003C$view field=\"bibtex-year\"/>). \u003C$view field=\"bibtex-title\"/>.\"\"\" />\n\\end\n\n\n\\define searchFilter() [has[bibtex-title]search:$(sField)$[$(sTerm)$]]\n\n\\define bibLibrary()\n\u003C$vars sField={{{[\u003CsearchTid>get[field]] ~[[bibtex-author]]}}} sTerm={{{[\u003CsearchTid>get[text]]}}}>\n\n\u003C!-- show hide entry details -->\n\u003Cdiv class=\"tc-search refnotes-library\" style=\"margin:10px 0 0 20px;\">\nShow and Hide Details: &nbsp;\n\u003C$button class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}}\n\u003C$list filter=\"[subfilter\u003CsearchFilter>]\">\n\u003C$action-setfield $tiddler=\u003C\u003CtTemp>> text=show />\n\u003C/$list>\n\u003C/$button>\n\u003C$button class=\"tc-btn-invisible\">{{$:/core/images/up-arrow}}\n\u003C$list filter=\"[subfilter\u003CsearchFilter>]\">\n\u003C$action-deletetiddler $tiddler=\u003C\u003CtTemp>> />\n\u003C/$list>\n\u003C/$button>\n\u003C/div>\n\n\u003C!-- show the library data -->\n\u003Col>\n\u003C$list filter=\"[subfilter\u003CsearchFilter>]\">\n\u003Cli>\u003C\u003CdispEntry>>\u003C/li>\n\u003C/$list>\n\u003C/ol>\n\u003C/$vars>\n\\end\n\n\u003C!-- interface -->\n\u003Cdiv style=\"margin-bottom:8px;\">\n\u003C\u003Cprocess-entries \"Process New Entries\">>\n\u003C/div>\n\n\u003C!-- make this optional\n[[Bibliography Table]]\n-->\n\n\u003C\u003CsearchUi>>\n\n\u003C\u003CbibLibrary>>\n\n\n\n"},
{"author":"Matthew Lauber","core-version":">=5.0.0","created":"20210105134918257","dependents":"","description":"A Shuffle filter operator","list":"readme","modified":"20211107172616237","plugin-type":"plugin","source":"https://github.com/mklauber/tiddly-shuffle","title":"$:/plugins/mklauber/shuffle","version":"1.0.2","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/mklauber/shuffle/readme\":{\"title\":\"$:/plugins/mklauber/shuffle/readme\",\"caption\":\"Shuffle Operator\",\"text\":\"|!purpose|Randomize the order of the input list|\\n|!input|a selection of titles|\\n|!parameter|a random string to be used to create consistent random ordering|\\n|!output|The input titles, rearranged in a random order|\\n\\nThis plugin implements a new filter operator called Shuffle. This operator takes the input list and randomizes the order of the list. If no parameter is provided, the list order is random every time.\\n\\n!!!Example:\\n```\\n\u003C$list filter=\\\"1 2 3 4 5 +[shuffle[]]\\\">\\n\\n\u003C/$list>\\n```\\n\\n\u003C$button popup=\\\"$:/state/shuffle/reveal1\\\">Run Demo\u003C/$button>\\n\\n\u003C$reveal type=\\\"popup\\\" state=\\\"$:/state/shuffle/reveal1\\\">\\n\u003Cdiv class=\\\"tc-drop-down\\\">\\n\u003C$list filter=\\\"1 2 3 4 5 +[shuffle[]]\\\">\\n\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$reveal>\\n\\nCombining this operator with the first operator allows you to choose 1 or more titles randomly from a list.\\n\\n!!!Example:\\n```\\n\u003C$list filter=\\\"1 2 3 4 5 +[shuffle[]first[2]]\\\">\\n\\n\u003C/$list>\\n```\\n\\n\u003C$button popup=\\\"$:/state/shuffle/reveal2\\\">Run Demo\u003C/$button>\\n\\n\u003C$reveal type=\\\"popup\\\" state=\\\"$:/state/shuffle/reveal2\\\">\\n\u003Cdiv class=\\\"tc-drop-down\\\">\\n\u003C$list filter=\\\"1 2 3 4 5 +[shuffle[]first[2]]\\\">\\n\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$reveal>\\n\\nIf a parameter is provided the list will be ordered identically every time it is rendered. This can be useful in conjunction a button that updates a state tiddler. Set the parameter of this operator to reference that state tiddler, and create a button that updates that tiddler, and now the ordering of the random operators only changes when the button is pressed.\\n\\n!!!Example:\\n```\\n\u003C$button>\\n\u003C$action-setfield $tiddler=\\\"$:/temp/shuffle/example\\\" $field=\\\"state\\\" $value=\u003C\u003Cnow \\\"0hh:0mm:0ss\\\">>/>\\nChange Order\\n\u003C/$button>\\n\\n\u003C$list filter=\\\"1 2 3 4 5 +[shuffle{$:/temp/shuffle/example!!state}]\\\">\\n\\n\u003C/$list>\\n```\\n\\n\u003C$button>\\n\u003C$action-setfield $tiddler=\\\"$:/temp/shuffle/example\\\" $field=\\\"state\\\" $value=\u003C\u003Cnow \\\"0hh:0mm:0ss\\\">>/>\\nUpdate\\n\u003C/$button>\\n\\n\u003C$list filter=\\\"1 2 3 4 5 +[shuffle{$:/temp/shuffle/example!!state}]\\\">\\n\\n\u003C/$list>\\n\"},\"$:/plugins/mklauber/shuffle/seedrandom.js\":{\"title\":\"$:/plugins/mklauber/shuffle/seedrandom.js\",\"text\":\"!function(a,b){function c(c,j,k){var n=[];j=1==j?{entropy:!0}:j||{};var s=g(f(j.entropy?[c,i(a)]:null==c?h():c,3),n),t=new d(n),u=function(){for(var a=t.g(m),b=p,c=0;a\u003Cq;)a=(a+c)*l,b*=l,c=t.g(1);for(;a>=r;)a/=2,b/=2,c>>>=1;return(a+c)/b};return u.int32=function(){return 0|t.g(4)},u.quick=function(){return t.g(4)/4294967296},u.double=u,g(i(t.S),a),(j.pass||k||function(a,c,d,f){return f&&(f.S&&e(f,t),a.state=function(){return e(t,{})}),d?(b[o]=a,c):a})(u,s,\\\"global\\\"in j?j.global:this==b,j.state)}function d(a){var b,c=a.length,d=this,e=0,f=d.i=d.j=0,g=d.S=[];for(c||(a=[c++]);e\u003Cl;)g[e]=e++;for(e=0;e\u003Cl;e++)g[e]=g[f=s&f+a[e%c]+(b=g[e])],g[f]=b;(d.g=function(a){for(var b,c=0,e=d.i,f=d.j,g=d.S;a--;)b=g[e=s&e+1],c=c*l+g[s&(g[e]=g[f=s&f+b])+(g[f]=b)];return d.i=e,d.j=f,c})(l)}function e(a,b){return b.i=a.i,b.j=a.j,b.S=a.S.slice(),b}function f(a,b){var c,d=[],e=typeof a;if(b&&\\\"object\\\"==e)for(c in a)try{d.push(f(a[c],b-1))}catch(a){}return d.length?d:\\\"string\\\"==e?a:a+\\\"\\\\0\\\"}function g(a,b){for(var c,d=a+\\\"\\\",e=0;e\u003Cd.length;)b[s&e]=s&(c^=19*b[s&e])+d.charCodeAt(e++);return i(b)}fu
{"title":"$:/plugins/sobjornstad/3click2edit","description":"triple-click to edit tiddlers","author":"Soren Bjornstad, after Danielo Rodriguez","version":"0.1","core-version":">=5.1.0","plugin-type":"plugin","source":"https://github.com/sobjornstad/TW5-3click2edit","list":"readme","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/danielo515/2click2edit/ClickListener.js\":{\"title\":\"$:/plugins/danielo515/2click2edit/ClickListener.js\",\"text\":\"/*\\\\\\ntitle: $:/plugins/danielo515/2click2edit/ClickListener.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nThis widgets adds an double click event listener to its parent\\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 ClickListener = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nClickListener.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nClickListener.prototype.render = function(parent,nextSibling) {\\n\\tthis.parentDomNode = parent;\\n\\tthis.execute();\\n\\tvar self = this;\\n /*Since the event listener have been added to the parent, the \\\"this\\\" property is pointing to the\\n wrong object, we should call our edit function with our widget object set as the this property.*/\\n /* https://stackoverflow.com/questions/6480060/how-do-i-listen-for-triple-clicks-in-javascript */\\n parent.addEventListener(\\\"click\\\", function (event) {\\n if (event.detail === 3) {\\n self.editTiddler.call(self, event);\\n }\\n });\\n};\\n\\nClickListener.prototype.editTiddler = function(event) {\\n this.dispatchEvent({type: \\\"tm-edit-tiddler\\\", param: this.getVariable(\\\"currentTiddler\\\")});\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nClickListener.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*/\\nClickListener.prototype.refresh = function(changedTiddlers) {\\n\\treturn false;\\n};\\n\\nexports.click = ClickListener;\\n\\n})();\\n\",\"type\":\"application/javascript\",\"module-type\":\"widget\"},\"$:/plugins/danielo515/2click2edit/readme\":{\"title\":\"$:/plugins/danielo515/2click2edit/readme\",\"text\":\"Modified by Soren Bjornstad to require 3 clicks instead of 2.\\n\\nThis plugin adds the ability to edit tiddlers by double clicking on its body.\\nJust try to edit any tiddler shown here by double clicking on it.\\n\\nThis can be considered a fast solution. It is only to fill the gap until TiddlyWiki adds support \\nfor it officially.\\n\"},\"$:/plugins/danielo515/2click2edit/ui/ViewTemplate\":{\"title\":\"$:/plugins/danielo515/2click2edit/ui/ViewTemplate\",\"tags\":\"$:/tags/ViewTemplate\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\u003C$click>\"}}}"},
{"title":"$:/plugins/sobjornstad/TiddlyRemember","description":"TiddlyRemember: Embed Anki notes in your TiddlyWiki","author":"Soren Bjornstad","version":"1.3.2","core-version":">=5.1.21","source":"https://github.com/sobjornstad/TiddlyRemember","list":"readme license","dependents":"","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/config/ShortcutInfo/remembercz\":{\"title\":\"$:/config/ShortcutInfo/remembercz\",\"created\":\"20200926193600000\",\"modified\":\"20200926193600000\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"Create a new `remembercz` macro snippet\"},\"$:/config/ShortcutInfo/rememberq\":{\"title\":\"$:/config/ShortcutInfo/rememberq\",\"created\":\"20200926193600000\",\"modified\":\"20200926193600000\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"Create a new `rememberq` macro snippet\"},\"$:/config/TiddlyRemember/DeckMapping\":{\"title\":\"$:/config/TiddlyRemember/DeckMapping\",\"created\":\"20200516223625569\",\"modified\":\"20200516223658777\",\"tags\":\"\"},\"$:/config/TiddlyRemember/DefaultClasses\":{\"title\":\"$:/config/TiddlyRemember/DefaultClasses\",\"created\":\"20210925145600000\",\"modified\":\"20210925145600000\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/config/TiddlyRemember/IdPrefix\":{\"title\":\"$:/config/TiddlyRemember/IdPrefix\",\"created\":\"20200516223625569\",\"modified\":\"20200516223658777\",\"tags\":\"\"},\"$:/config/TiddlyRemember/TagMapping\":{\"title\":\"$:/config/TiddlyRemember/TagMapping\",\"created\":\"20200516190911842\",\"modified\":\"20200516223231730\",\"tags\":\"\"},\"$:/config/TiddlyRemember/snippets/remembercz\":{\"title\":\"$:/config/TiddlyRemember/snippets/remembercz\",\"created\":\"20210929144900000\",\"modified\":\"20210929144900000\",\"tags\":\"\",\"text\":\"\u003C\u003Cremembercz \\\"%NOTE_ID%\\\"\\n\\t\\\"Cloze\\\">>\"},\"$:/config/TiddlyRemember/snippets/rememberq\":{\"title\":\"$:/config/TiddlyRemember/snippets/rememberq\",\"created\":\"20210929144900000\",\"modified\":\"20210929144900000\",\"tags\":\"\",\"text\":\"\u003C\u003Crememberq \\\"%NOTE_ID%\\\"\\n\\t\\\"Q\\\"\\n\\t\\\"A\\\">>\"},\"$:/config/shortcuts/remembercz\":{\"title\":\"$:/config/shortcuts/remembercz\",\"created\":\"20200926193600000\",\"modified\":\"20200926193600000\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"alt-shift-R\"},\"$:/config/shortcuts/rememberq\":{\"title\":\"$:/config/shortcuts/rememberq\",\"created\":\"20200926193600000\",\"modified\":\"20200926193600000\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"alt-R\"},\"$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg\":{\"title\":\"$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg\",\"text\":\"\u003C?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\n\u003Csvg width=\\\"18px\\\" height=\\\"18px\\\" viewBox=\\\"0 0 1792 1792\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\u003Cpath d=\\\"M1120 576q0 13-9.5 22.5t-22.5 9.5-22.5-9.5-9.5-22.5q0-46-54-71t-106-25q-13 0-22.5-9.5t-9.5-22.5 9.5-22.5 22.5-9.5q50 0 99.5 16t87 54 37.5 90zm160 0q0-72-34.5-134t-90-101.5-123-62-136.5-22.5-136.5 22.5-123 62-90 101.5-34.5 134q0 101 68 180 10 11 30.5 33t30.5 33q128 153 141 298h228q13-145 141-298 10-11 30.5-33t30.5-33q68-79 68-180zm128 0q0 155-103 268-45 49-74.5 87t-59.5 95.5-34 107.5q47 28 47 82 0 37-25 64 25 27 25 64 0 52-45 81 13 23 13 47 0 46-31.5 71t-77.5 25q-20 44-60 70t-87 26-87-26-60-70q-46 0-77.5-25t-31.5-71q0-24 13-47-45-29-45-81 0-37 25-64-25-27-25-64 0-54 47-82-4-50-34-107.5t-59.5-95.5-74.5-87q-103-113-103-268 0-99 44.5-184.5t117-142 164-89 186.5-32.5 186.5 32.5 164 89 117 142 44.5 184.5z\\\"/>\u003C/svg>\\n\u003C!-- Source: FontAwesome -->\",\"type\":\"image/svg+xml\",\"created\":\"20200517161140014\",\"modified\":\"20200517161732249\"},\"$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-white.svg\":{\"title\":\"$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-white.svg\",\"text\":\"\u003C?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\n\u003Csvg width=\\\"18px\\\" height=\\\"18px\\\" viewBox=\\\"0 0 1792 1792\\\
{"title":"$:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz","caption":"RememberCz","condition":"[\u003CtargetTiddler>!has[type]] [\u003CtargetTiddler>type[text/vnd.tiddlywiki]]","created":"20200517155905263","creator":"soren","description":"Remember Cloze Deletion","icon":"$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg","modified":"20211113234933532","modifier":"soren","shortcuts":"((remembercz))","tags":"$:/tags/EditorToolbar","type":"text/vnd.tiddlywiki","text":"\\define getMacro()\n\u003C\u003Cremembercz \"$(clozeid)$\"\n\t\"Cloze\">>\n\\end\n\n\\define prefixId() $(theprefix)$$(thetime)$\n\n\u003C$set name=thetime value=\u003C\u003Cnow \"[UTC]YYYY0MM0DD0hh0mm0ss0XXX\">> >\n\u003C$set name=theprefix value={{$:/config/TiddlyRemember/IdPrefix}}>\n\u003C$set name=clozeid value=\u003C\u003CprefixId>> >\n\t\u003C$action-sendmessage\n\t\t$message=\"tm-edit-text-operation\"\n\t\t$param=\"replace-selection\"\n\t\ttext=\u003C\u003CgetMacro>>\n\t/>\n\u003C/$set>\n\u003C/$set>\n\u003C/$set>\n"},
{"title":"$:/plugins/sobjornstad/TiddlyStretch","description":"Stretchtext in TiddlyWiki","author":"Soren Bjornstad","version":"0.1.0","core-version":">=5.1.21","source":"https://github.com/sobjornstad/TiddlyStretch","list":"readme license [[TiddlyStretch Macros]]","dependents":"$:/plugins/TheDiveO/FontAwesome","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/sobjornstad/TiddlyStretch/TiddlyStretch Macros\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/TiddlyStretch Macros\",\"created\":\"20210304022132594\",\"description\":\"TiddlyStretch provides four macros for creating stretchtext: `stretch`, `stretch-template`, `stretch-links`, and `stretch-template-links`.\",\"modified\":\"20210304032037222\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"The following four macros are used to create expandos:\\n\\n\u003C\u003Cstretch-template-links \\\"[all[tiddlers+shadows]tag[$:/plugins/sobjornstad/TiddlyStretch/doc/Macro]]\\\" \\\"$:/plugins/sobjornstad/TiddlyStretch/doc/st/MacroSummary\\\" \\\"$:/plugins/sobjornstad/TiddlyStretch/doc/st/Identity\\\">>\\n\"},\"$:/plugins/sobjornstad/TiddlyStretch/doc/EmptyMessage\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/EmptyMessage\",\"created\":\"20210304024358659\",\"description\":\"Optional wikitext to display if the filter yields no result.\",\"modified\":\"20210306022349423\",\"name\":\"emptyMessage\",\"tags\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/plugins/sobjornstad/TiddlyStretch/doc/Filter\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/Filter\",\"created\":\"20210304024354323\",\"description\":\"A filter expression describing the tiddlers to list.\",\"modified\":\"20210306022349455\",\"name\":\"filter\",\"tags\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/plugins/sobjornstad/TiddlyStretch/doc/LargeField\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/LargeField\",\"created\":\"20210304024150673\",\"description\":\"The field to display (in block mode) when the expando is expanded. Defaults to `text`.\",\"modified\":\"20210306022349461\",\"name\":\"largeField\",\"tags\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/plugins/sobjornstad/TiddlyStretch/doc/LargeMode\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/LargeMode\",\"created\":\"20210304024317434\",\"description\":\"Whether to render the expanded template in `block` or `inline` mode (default: block).\",\"modified\":\"20210306022349464\",\"name\":\"largeMode\",\"tags\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/plugins/sobjornstad/TiddlyStretch/doc/LargeTemplate\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/LargeTemplate\",\"created\":\"20210304024308673\",\"description\":\"The template tiddler to use when the expando is expanded.\",\"modified\":\"20210306022349466\",\"name\":\"largeTemplate\",\"tags\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\",\"created\":\"20210304032156159\",\"list\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/stretch $:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template $:/plugins/sobjornstad/TiddlyStretch/doc/stretch-links $:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template-links\",\"modified\":\"20210306022058465\",\"type\":\"text/vnd.tiddlywiki\"},\"$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate\":{\"title\":\"$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate\",\"created\":\"20210304025753399\",\"modified\":\"20210306022549030\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\u003C$macrocall $name=\\\"stretch-template\\\" tiddler=\u003C\u003CcurrentTiddler>> smallTemplate=\\\"$:/plugins/sobjornstad/TiddlyStretch/doc/ParameterListingTemplate\\\" largeTemplate=\\\"$:/plugins/sobjornstad/TiddlyStretch/doc/ParametersT
{"title":"$:/plugins/sobjornstad/TiddlyStretch/macros/stretch","created":"20210304002537855","modified":"20210714025439865","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define stretchtext-tools(tiddler)\n \u003C$button class=\"tc-btn-invisible tc-tiddlylink\" to=\u003C\u003C__tiddler__>> tooltip=\"Open this node's tiddler as a new item in the story river.\">\n \u003Ci class=\"fa fa-expand\"/>\n \u003C/$button>\n \u003C$button class=\"tc-btn-invisible tc-tiddlylink\" message=\"tm-edit-tiddler\" param=\u003C\u003C__tiddler__>> tooltip=\"Edit this node's tiddler.\">\n \u003Ci class=\"fa fa-pen\"/>\n \u003C/$button>\n\\end\n\n\\define stretchtext-missing-tiddler(tiddler, descr: \"tiddler\")\n \u003C$list filter=\"[\u003C__tiddler__>!is[tiddler]!is[shadow]]\" variable=_>\n //Missing $descr$ \u003C$link to=\u003C\u003C__tiddler__>>/>//\n \u003C/$list>\n\\end\n\n\\define stretchtext-missing(tiddler, field)\n \u003C$macrocall $name=\"stretchtext-missing-tiddler\" tiddler=\u003C\u003C__tiddler__>>/>\n \u003C$list filter=\"[\u003C__tiddler__>is[tiddler]!is[shadow]!has\u003C__field__>]\" variable=_>\n //Missing field '$field$' on existing tiddler \u003C$link to=\u003C\u003C__tiddler__>>/>//\n \u003C/$list>\n\\end\n\n\\define stretch(tiddler, smallField: \"description\", largeField: \"text\")\n \u003C$set name=\"stateTiddler\" value=\u003C\u003Cqualify \"\"\"$:/state/stretchtext/$tiddler$\"\"\">>>\n \u003C$reveal stateTitle=\u003C\u003CstateTiddler>> stateIndex=\u003C\u003C__tiddler__>> type=\"match\" text=\"hide\" default=\"hide\">\n \u003Cdiv class=\"st-closed\">\n \u003C$button setTitle=\u003C\u003CstateTiddler>> setIndex=\u003C\u003C__tiddler__>> setTo=\"show\" class=\"tc-btn-invisible tc-tiddlylink\" tooltip=\"Expand this node to show more detail.\">\n \u003Ci class=\"fa fa-search-plus\"/>\n \u003C/$button>\n \u003C$macrocall $name=\"stretchtext-tools\" tiddler=\u003C\u003C__tiddler__>>/>\n \u003C$macrocall $name=\"stretchtext-missing\" tiddler=\u003C\u003C__tiddler__>> field=\u003C\u003C__smallField__>>/>\n \u003C$tiddler tiddler=\u003C\u003C__tiddler__>>>\n \u003C$transclude tiddler=\u003C\u003C__tiddler__>> field=\u003C\u003C__smallField__>> />\n \u003C/$tiddler>\n \u003C/div>\n \u003C/$reveal>\n \u003C$reveal stateTitle=\u003C\u003CstateTiddler>> stateIndex=\u003C\u003C__tiddler__>> type=\"match\" text=\"show\" default=\"hide\">\n \u003Cdiv class=\"st-open\">\n \u003C$button setTitle=\u003C\u003CstateTiddler>> setIndex=\u003C\u003C__tiddler__>> setTo=\"hide\" class=\"tc-btn-invisible tc-tiddlylink\" tooltip=\"Shrink this node to show less detail.\">\n \u003Ci class=\"fa fa-search-minus st-expanded-colorize\"/>\n \u003C/$button>\n \u003C$macrocall $name=\"stretchtext-tools\" tiddler=\u003C\u003C__tiddler__>>/>\n [\u003C$link to=\u003C\u003C__tiddler__>>/>]\n\n \u003C$macrocall $name=\"stretchtext-missing\" tiddler=\u003C\u003C__tiddler__>> field=\u003C\u003C__largeField__>>/>\n \u003C$tiddler tiddler=\u003C\u003C__tiddler__>>>\n \u003C$transclude mode=\"block\" field=\u003C\u003C__largeField__>> tiddler=\u003C\u003C__tiddler__>>/>\n \u003C/$tiddler>\n \u003C/div>\n \u003C/$reveal>\n \u003C/$set>\n\\end\n\n\\define stretch-template(tiddler, smallTemplate, largeTemplate, smallMode: \"inline\", largeMode: \"block\")\n \u003C$set name=\"stateTiddler\" value=\u003C\u003Cqualify \"\"\"$:/state/stretchtext/$tiddler$\"\"\">>>\n \u003C$reveal stateTitle=\u003C\u003CstateTiddler>> stateIndex=\u003C\u003C__tiddler__>> type=\"match\" text=\"hide\" default=\"hide\">\n \u003Cdiv class=\"st-closed\">\n \u003C$button setTitle=\u003C\u003CstateTiddler>> setIndex=\u003C\u003C__tiddler__>> setTo=\"show\" class=\"tc-btn-invisible tc-tiddlylink\" tooltip=\"Expand this node to show more detail.\">\n \u003Ci class=\"fa fa-search-plus\"/>\n \u003C/$button>\n \u003C$macrocall $name=\"s
{"title":"$:/plugins/telmiger/details","author":"Thomas Elmiger","core-version":">=5.1.13","description":"DetailsWidget","list":"readme license","name":"Disclosure HTML element","plugin-type":"plugin","source":"https://tid.li/tw5/plugins.html","version":"0.7.4","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/telmiger/details/accordion\":{\"title\":\"$:/plugins/telmiger/details/accordion\",\"created\":\"20180928194557274\",\"creator\":\"Thomas Elmiger\",\"modified\":\"20200219093956524\",\"modifier\":\"Thomas Elmiger\",\"tags\":\"$:/tags/Macro\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\\\\define accordion(filter:\\\"_no_\\\",open:\\\"no\\\",class:\\\"\\\")\\n\u003C$vars accordion-filter=\\\"\\\"\\\"$filter$\\\"\\\"\\\" open=\\\"\\\"\\\"$open$\\\"\\\"\\\" class=\\\"\\\"\\\"$class$\\\"\\\"\\\">\\n\u003C$list filter=\u003C\u003Caccordion-filter>>>\\n\u003C$details summary=\u003C\u003CcurrentTiddler>> open=\u003C\u003Copen>> class=\u003C\u003Cclass>>>\\n\\n\u003C$transclude tiddler=\u003C\u003CcurrentTiddler>>/>\\n\\n\u003C/$details>\\n\u003C/$list>\\n\u003C/$vars>\\n\\\\end\\n\\n\u003C!-- !!! Accordion Macro for Details\\n\\nList tiddlers and open them in a details-summary structure\\n\\n!!!! Attributes\\n* filter: filter to select tiddlers\\n* open: set to \\\"open\\\" to display details on load\\n* class: set a class for the details tag\\n\\n-->\"},\"$:/plugins/telmiger/details/colours.css\":{\"title\":\"$:/plugins/telmiger/details/colours.css\",\"created\":\"20180925155320737\",\"creator\":\"Thomas Elmiger\",\"modified\":\"20200219093956600\",\"modifier\":\"Thomas Elmiger\",\"tags\":\"$:/tags/Stylesheet\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"/* details and summary colours */\\n\\ndetails {\\n background-color: \u003C\u003Ccolour tiddler-info-tab-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n}\\n\\ndetails summary {\\n background-color: \u003C\u003Ccolour dropdown-tab-background>>;\\n}\\n\\ndetails.notification summary {\\n background-color: \u003C\u003Ccolour notification-background>>;\\n /* TW leaves color undefined/uses foreground */\\n}\\n\\ndetails.warning summary {\\n background-color: #ffbbaf;\\n color: #000;\\n}\\n\\ndetails.success summary {\\n background-color: #88edc5;\\n color: #000;\\n}\\n\"},\"$:/plugins/telmiger/details/details.css\":{\"title\":\"$:/plugins/telmiger/details/details.css\",\"created\":\"20170122140815442\",\"creator\":\"Thomas Elmiger\",\"modified\":\"20200219093956595\",\"modifier\":\"Thomas Elmiger\",\"tags\":\"$:/tags/Stylesheet\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"/* details and summary */\\n\\ndetails {\\n transition: height 1s ease;\\n padding: 0 0.5em 0 0.66em;\\n margin-top: 0.66em;\\n margin-bottom: 0.66em;\\n}\\n\\ndetails + details {\\n margin-top: -0.46em;\\n}\\n\\ndetails[open] {\\n padding-bottom: 1em;\\n}\\n\\ndetails:not([open]) { \\n cursor: pointer;\\n}\\n\\ndetails > summary {\\n display: list-item;\\n margin: 0 -0.5em 0 -0.66em;\\n padding: 0.2em 0.5em 0.2em 0.66em;\\n padding-left: 1.76em; /* adjust for indentation */\\n text-indent: -1.1em;\\n cursor: pointer;\\n}\\n\\ndetails[open] > summary {\\n margin-bottom: 1em;\\n}\\n\\ndetails[open] > *:first-child:not(summary) {\\n margin-top: 1em;\\n}\\n\"},\"$:/plugins/telmiger/details/details.js\":{\"title\":\"$:/plugins/telmiger/details/details.js\",\"text\":\"/*\\\\\\ntitle: $:/plugins/telmiger/details/details.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nDetails widget v 0.8\\n\\nWill output an HTML 5 \u003Cdetails> section including a \u003Csummary>\\n\\n```\\n\\t\u003Cdetails>\\n\\t\\t\u003Csummary>This sums it up\u003C/summary> \\n\\t\\tAll the details follow here.\\n\\t\u003C/details>\\n```\\n\\n|Parameter |Description |h\\n|summary |Optional text to display as summary. Wins over field (see below). |\\n|open |Optional initial state, set to \\\"open\\\" to show details on load. Defaults to \\\"\\\". |\\n|state |An optional TextReference containing the state. Wins over open. |\\n|field |Opti
{"title":"$:/plugins/telmiger/details/colours.css","created":"20180925155320737","creator":"Thomas Elmiger","modified":"20210920202652482","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/* details and summary colours */\n\ndetails {\n background-color: \u003C\u003Cdetails-background-color>>;\n color: \u003C\u003Ccolour foreground>>;\n}\n\ndetails summary {\n background-color: \u003C\u003Ccolour dropdown-tab-background>>;\n}\n\ndetails.notification summary {\n background-color: \u003C\u003Ccolour notification-background>>;\n /* TW leaves color undefined/uses foreground */\n}\n\ndetails.warning summary {\n background-color: #ffbbaf;\n color: #000;\n}\n\ndetails.success summary {\n background-color: #88edc5;\n color: #000;\n}\n"},
{"author":"TheDiveO","core-version":">=5.1.0","created":"20140901105647564","description":"FontAwesome embedded font support for TW5","fa-version":"5.8.2","list":"readme license history","modified":"20200419150315831","plugin-type":"plugin","source":"https://github.com/TheDiveO/TW5FontAwesome","title":"$:/plugins/TheDiveO/FontAwesome","version":"1.2.18","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Brands.css\":{\"title\":\"$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Brands.css\",\"text\":\"/* autoimported retrieved from 'fontawesome-free-5.8.2-web' */\\n@font-face {\\n font-family: 'Font Awesome 5 Brands';\\n font-style: normal;\\n font-weight: normal;\\n src: url('data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAVX4AA0AAAAB+UABSbrhAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABoAAAAcik7xOkdERUYAAAFMAAAAHgAAAB4AKgG1T1MvMgAAAWwAAABPAAAAYEIQ5ZJjbWFwAAABvAAAAwkAAAV6Eu4UmWdhc3AAAATIAAAACAAAAAj//wADZ2x5ZgAABNAAATw9AAHOEJRTNq9oZWFkAAFBEAAAADMAAAA2FMnDQWhoZWEAAUFEAAAAIQAAACQENgPgaG10eAABQWgAAAJjAAAGujRmBgpsb2NhAAFDzAAAA2AAAANgNVqnlG1heHAAAUcsAAAAHwAAACACGANPbmFtZQABR0wAAAIUAAAFf3xycyVwb3N0AAFJYAAADJcAABQbHE4wK3icY2BgYGQAghsJmjlg+nvyMyj9HABK5ggAAAAAAQAAAAwAAAAWAAAAAgABAAMBrgACAAQAAAACAAAAAHicY2BhfMU4gYGVgYHRhzGNgYHBHUp/ZZBkaGFgYGJgZWaAAUYBBgQISHNNYWj40PjDifHA/wMMeoxnGEIagGrACq0YlwIpBQZGAIbADr4AeJzt021olmUUB/D72R6b93095zzbjDJQMFLQRHGrfGtOGUYfKkgR3yjxQ5KvQ2nStNRtOmq+UE7THsWXMMec1syWL6RDSB50TJ3aFGS+rGYi+HKfc+7rvuYSny4eR5Sf+mRf/MM58Ifrw+EHl+M4mc6j6eNE7HaiJbZF0j0aneo4kVxbspxcv8Jf61f7W/1Wv5160XAqoOk0h4ppEZXQciqnVbSONtLXtJW2Ux0dokZqpkt0i+6S5kx2Gfk5zucRXMhv8wyex8W8kJdzBa/mjZzgGv6eG/gwJ/kyX+Xr8p4slmVSJpXyuXwhm2WL7JBv5YAck+NyQk5Ks7RIm1yTDrkt90TkvjwMegQQvBi8FOQF7wQTgynBtKA1uBHc18/qar1d79K1+oD+STfqpG7WZzVpo7vCeJgbjg2Lwm1hfdgUNodtJmryzPum1HxiKk2VWWfWm4T5wfxojpqkuWAumnbze+eYzqJUynH88rRJwj/fbfK6NfmQ5tFC+oiWUJk1qUqbbLEmO6mBjlITtdBNukM+Z3BPBs7mPGsymt+yJjN5gTX5lMt4FW/gTbyb9/B+a3KCW/lK2mS2lMoKWWlN1sh6Scg2+UZqpMGa/CJJabIm561Ju/whd62JtiYZQVaQY00G/MOkI7ipvf9ocqrbZFjaZGm3yZdms6m3Jj93m1yzJq92jk2l4hXxJfGSeHF8ZHwIPsDLeBGP4He4D/diHdbgbtyFOzCBm/Ar3IDVWIWVuBQ/xtk4Cz/AqTgJJ+C7OBzzcRj2x16YizmYjT0wipnwJ3TBPbgDt+EWXIUWOAOnYSK8CW/AeCiCcVAIY6AARsMoGAkj4DV4BfIhD4bCEBgML8MgGAgDoD/0g77QB16A3vB87EGsMxbEJFYamxubE5um2tQ5dVqdUsdVozqo6lWdqlWfqQpVpuaruapQFXi/eee8w94hr9Yr9yZ7g70cL9vL8qJexE25Xe4Nt8O94v7qnnSTbqN7zF3gzn/0p57m34k84/wNE8mwK+PxB0/4oP8hfwHBLOlZAAAAAAAAAf//AAJ4nIS8CZglR3UmmhGRGZH7vtx9y7vVdqvqbllbV3VXVatbUnerVy2tbu1Sa0FCaAEBEjRCQiAhgYxsgxFGGA+CwRixDugZkMY8Gy8s7zGPh8fYyOPdz988bDMGP9vVcyLvrVZ3w3zvVt28mZGZkZERJ875/xMnQsCCcOYV9BJ6TrCEZUFA3TBwfBpXa82B0x/2pGFCGf824xqNmi0a+CUEv4EfRrRVQj0a11phr7uKBn30Xr9Q8Lee41s065meF8h+6BXKbXZkoMimbJulyLRpLajPKKyTLF45gZ47e8N1fuHDpi9jI9LFYK4q7bRcNXApklGmLhHsZwuotHR0RhKgkGfLXD9b4ik06CXxoL+MBlBUExVRHPSCePwao6K9a0nb3S4X8sWJzNrau9Knjp///r2zzR1SOF1K9r5/VBZ4jCCeUze+UBAGP1s/Xm8QB8PusN+sUR/qoIOhnlgMib0BnO6WcBGh5wzPM7ZO8+0ptOFUoqgSop3UrmaiKkM7N+xItyWMntu+CMF26/T3vvdPUTmKylv/fH+mVrR8s/i927Ml1bf0W6Fsyjllu1y4WrhRuE24W3iD8JDw6M8pJW8e3oK82ULYHZio1kGtZmuu1e9BUjJMOmTQT5rJMCyjYTdaxVHIwsA3MWwLKPCbtNkbsn5cC/xet0lbzWHUGjYZjcLWsAW/YRN+KKS1ajzxXFn4y+6O63fvPrna1RGmjmkSpjHZVpwKll0/q9mKSiNF9qd8UctSVXb0nO9qRxgioi7Cx8BExERBUEOYMMw/IiUYEywijBEi+Hwp2jrtXJFsnjy5mVzhYBVVZLhEVTyJEWQXLYthySyFoeNnsSLBBzMVZwI3CEumhJXAnEDqTiQhiRBMJQR7GFH+MA1BCpKU9MkMUhHCY1n8ERbQe4U5OEhrbNQjkloz/engHSiMmlC5vOOkQhGNOxX6A9S++L6LrrxYMy9eigeqqphmphmG2Vmr9bqdeMdUp1wv67VSKURtURncdsVwFs1MlBGRSlNZbKDKQiE7v0R0fWq1ytxGIBoVKI985g/QT9GXhJIgNHzKfl636IA4DLsh+ukDV53bJa564OlvPf3SiSfMT73aHT5lPnHi1NNPCzK853fRjyBfJpjQG24W7hTuB2l7RBASP6aDfm9IhyAztJV0Ydv0uiWQGgp7gxV4WmtVBLHjokIt1KyxDgYp4cqERJSZqNnqoFlUi0qojEq4u4Z8qEnaSstJRtnCzaPf6Lzj5sckKtEqkXhbtaHdJLRn876Nk5fKihNm6p6pw59aM/TyrpLkNhRLj0y3lg0MogYVlXoguT4ziSj6mZAxpMj7rnlyGhPeykSBLwiPWMMiSKAoKoR/pJ4I0oFEGSNIZhSDijq98+7NI2/PYpmiNb8C2Zlhu+BlrHKDGLKiKKJmkUY5Wy20Q5AyPRRF3dEMhCzRZbJuiwjpc4jKOPv2I7e+e+v58fNVkHgQNlyFZxP4OkQSMVZSmftG2haXgAT6XAUP1xAo4+7wnG6erKIE6juVOC6XCJRhsopBR6H0kpIYQN3TaCQM6EdPn2rGGWrTipdcfOWufVcUQsbFHxF3R6+zFNQDLxSxTqmlejmQffjLQvfZc8XT30Ktbz2ttbPLun3
{"title":"$:/plugins/TheDiveO/FontAwesome/styles/extlinks/randomthoughts","created":"20210514004614277","list-after":"$:/plugins/TheDiveO/FontAwesome/styles/extlinks","modified":"20210514005019052","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\n\n\u003C$set name=\"cfg\" value=\u003C\u003Cfa5-cfgpath \"decorate-wk-extlinks\">> >\n\u003C$list filter=\u003C\u003Cfa5-cfgfilterexpr>> >\n\na[href^=\"https://\"][href*=\"randomthoughts.sorenbjornstad.com\"]:before {\n font-size: 90%;\n content: '\\f249\\202f';\n}\n\n\u003C/$list>\n\u003C/$set>"},
{"title":"$:/plugins/tiddlywiki/codemirror","name":"CodeMirror","description":"CodeMirror editor","list":"readme usage keyboard license","version":"5.2.0","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/config/EditorTypeMappings/application/javascript\":{\"title\":\"$:/config/EditorTypeMappings/application/javascript\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/application/json\":{\"title\":\"$:/config/EditorTypeMappings/application/json\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/application/x-tiddler-dictionary\":{\"title\":\"$:/config/EditorTypeMappings/application/x-tiddler-dictionary\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/text/css\":{\"title\":\"$:/config/EditorTypeMappings/text/css\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/text/html\":{\"title\":\"$:/config/EditorTypeMappings/text/html\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/text/plain\":{\"title\":\"$:/config/EditorTypeMappings/text/plain\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/text/vnd.tiddlywiki\":{\"title\":\"$:/config/EditorTypeMappings/text/vnd.tiddlywiki\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/text/x-markdown\":{\"title\":\"$:/config/EditorTypeMappings/text/x-markdown\",\"text\":\"codemirror\"},\"$:/config/EditorTypeMappings/text/x-tiddlywiki\":{\"title\":\"$:/config/EditorTypeMappings/text/x-tiddlywiki\",\"text\":\"codemirror\"},\"$:/config/codemirror/cursorBlinkRate\":{\"title\":\"$:/config/codemirror/cursorBlinkRate\",\"type\":\"integer\",\"text\":\"530\"},\"$:/config/codemirror/extraKeysTW\":{\"title\":\"$:/config/codemirror/extraKeysTW\",\"extend\":\"extraKeys\",\"type\":\"json\",\"text\":\"{\\n\\t\\\"Ctrl-Esc\\\": \\\"singleSelection\\\",\\n\\t\\\"Esc\\\": \\\"\\\",\\n\\t\\\"Ctrl-S\\\": \\\"\\\",\\n\\t\\\"Ctrl-U\\\": \\\"\\\",\\n\\t\\\"Ctrl-T\\\": \\\"\\\",\\n\\t\\\"Alt-T\\\": \\\"transposeChars\\\",\\n\\t\\\"Alt-U\\\": \\\"undoSelection\\\",\\n\\t\\\"Shift-Alt-U\\\": \\\"redoSelection\\\",\\n\\t\\\"Cmd-U\\\": \\\"\\\",\\n\\t\\\"Tab\\\": \\\"indentAuto()\\\",\\n\\t\\\"Enter\\\": \\\"newLineAndIndent()\\\"\\n}\\n\"},\"$:/config/codemirror/indentUnit\":{\"title\":\"$:/config/codemirror/indentUnit\",\"type\":\"integer\",\"text\":\"2\"},\"$:/config/codemirror/indentWithTabs\":{\"title\":\"$:/config/codemirror/indentWithTabs\",\"type\":\"bool\",\"text\":\"true\"},\"$:/config/codemirror/inputStyle\":{\"title\":\"$:/config/codemirror/inputStyle\",\"type\":\"string\",\"text\":\"textarea\"},\"$:/config/codemirror/keyMap\":{\"title\":\"$:/config/codemirror/keyMap\",\"type\":\"string\",\"text\":\"default\"},\"$:/config/codemirror/lineNumbers\":{\"title\":\"$:/config/codemirror/lineNumbers\",\"type\":\"bool\",\"text\":\"false\"},\"$:/config/codemirror/lineWrapping\":{\"title\":\"$:/config/codemirror/lineWrapping\",\"type\":\"bool\",\"text\":\"true\"},\"$:/config/codemirror/showCursorWhenSelecting\":{\"title\":\"$:/config/codemirror/showCursorWhenSelecting\",\"type\":\"bool\",\"text\":\"true\"},\"$:/config/codemirror/smartIndent\":{\"title\":\"$:/config/codemirror/smartIndent\",\"type\":\"bool\",\"text\":\"true\"},\"$:/config/codemirror/styleActiveLine\":{\"title\":\"$:/config/codemirror/styleActiveLine\",\"type\":\"bool\",\"text\":\"false\"},\"$:/config/codemirror/tabSize\":{\"title\":\"$:/config/codemirror/tabSize\",\"type\":\"integer\",\"text\":\"2\"},\"$:/config/codemirror/theme\":{\"title\":\"$:/config/codemirror/theme\",\"type\":\"string\",\"text\":\"tiddlywiki\"},\"$:/language/codemirror/homeUrl\":{\"title\":\"$:/language/codemirror/homeUrl\",\"text\":\"http://codemirror.net\"},\"$:/language/codemirror/addOnUrl\":{\"title\":\"$:/language/codemirror/addOnUrl\",\"text\":\"http://codemirror.net/doc/manual.html#addons\"},\"$:/language/codemirror/configUrl\":{\"title\":\"$:/language/codemirror/configUrl\",\"text\":\"http://codemirror.net/doc/manual.html#config\"},\"$:/language/codemirror/controlPanel/hint\":{\"title\":\"$:/language/codemirror/controlPanel/hint\",\"text\":\"These settings let you customis
{"title":"$:/plugins/tiddlywiki/codemirror-autocomplete","name":"CodeMirror Autocomplete","description":"Autocompletion for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-mode-css","list":"readme","version":"5.2.0","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/config/codemirror/autocomplete\":{\"title\":\"$:/config/codemirror/autocomplete\",\"extend\":\"extraKeys\",\"type\":\"json\",\"text\":\"{\\n\\t\\\"Ctrl-Space\\\": \\\"autocomplete\\\"\\n}\"},\"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(y){\\\"use strict\\\";var b=/[\\\\w$]+/;y.registerHelper(\\\"hint\\\",\\\"anyword\\\",function(e,r){for(var t=r&&r.word||b,o=r&&r.range||500,i=e.getCursor(),n=e.getLine(i.line),f=i.ch,s=f;s&&t.test(n.charAt(s-1));)--s;for(var a=s!=f&&n.slice(s,f),c=r&&r.list||[],l={},d=new RegExp(t.source,\\\"g\\\"),u=-1;u\u003C=1;u+=2)for(var p=i.line,g=Math.min(Math.max(p+u*o,e.firstLine()),e.lastLine())+u;p!=g;p+=u)for(var h,m=e.getLine(p);h=d.exec(m);)p==i.line&&h[0]===a||a&&0!=h[0].lastIndexOf(a,0)||Object.prototype.hasOwnProperty.call(l,h[0])||(l[h[0]]=!0,c.push(h[0]));return{list:c,from:y.Pos(i.line,s),to:y.Pos(i.line,f)}})});\\n\",\"type\":\"application/javascript\",\"title\":\"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\",\"module-type\":\"codemirror\"},\"$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"../../mode/css/css\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../../mode/css/css\\\"],e):e(CodeMirror)}(function(f){\\\"use strict\\\";var p={active:1,after:1,before:1,checked:1,default:1,disabled:1,empty:1,enabled:1,\\\"first-child\\\":1,\\\"first-letter\\\":1,\\\"first-line\\\":1,\\\"first-of-type\\\":1,focus:1,hover:1,\\\"in-range\\\":1,indeterminate:1,invalid:1,lang:1,\\\"last-child\\\":1,\\\"last-of-type\\\":1,link:1,not:1,\\\"nth-child\\\":1,\\\"nth-last-child\\\":1,\\\"nth-last-of-type\\\":1,\\\"nth-of-type\\\":1,\\\"only-of-type\\\":1,\\\"only-child\\\":1,optional:1,\\\"out-of-range\\\":1,placeholder:1,\\\"read-only\\\":1,\\\"read-write\\\":1,required:1,root:1,selection:1,target:1,valid:1,visited:1};f.registerHelper(\\\"hint\\\",\\\"css\\\",function(e){var t=e.getCursor(),r=e.getTokenAt(t),o=f.innerMode(e.getMode(),r.state);if(\\\"css\\\"==o.mode.name){if(\\\"keyword\\\"==r.type&&0==\\\"!important\\\".indexOf(r.string))return{list:[\\\"!important\\\"],from:f.Pos(t.line,r.start),to:f.Pos(t.line,r.end)};var i=r.start,s=t.ch,n=r.string.slice(0,s-i);/[^\\\\w$_-]/.test(n)&&(n=\\\"\\\",i=s=t.ch);var a=f.resolveMode(\\\"text/css\\\"),d=[],l=o.state.state;return\\\"pseudo\\\"==l||\\\"variable-3\\\"==r.type?c(p):\\\"block\\\"==l||\\\"maybeprop\\\"==l?c(a.propertyKeywords):\\\"prop\\\"==l||\\\"parens\\\"==l||\\\"at\\\"==l||\\\"params\\\"==l?(c(a.valueKeywords),c(a.colorKeywords)):\\\"media\\\"!=l&&\\\"media_parens\\\"!=l||(c(a.mediaTypes),c(a.mediaFeatures)),d.length?{list:d,from:f.Pos(t.line,i),to:f.Pos(t.line,s)}:void 0}function c(e){for(var t in e)n&&0!=t.lastIndexOf(n,0)||d.push(t)}})});\\n\",\"type\":\"application/javascript\",\"title\":\"$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\",\"module-type\":\"codemirror\"},\"$:/plugins/tiddlywiki/codemirror/addon/hint/html-hint.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n
{"title":"$:/plugins/tiddlywiki/codemirror-closebrackets","name":"CodeMirror Close Brackets","description":"Close brackets for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.2.0","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/config/codemirror/autoCloseBrackets\":{\"title\":\"$:/config/codemirror/autoCloseBrackets\",\"type\":\"bool\",\"text\":\"true\"},\"$:/config/codemirror/matchBrackets\":{\"title\":\"$:/config/codemirror/matchBrackets\",\"type\":\"bool\",\"text\":\"true\\n\"},\"$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(C){var r={pairs:\\\"()[]{}''\\\\\\\"\\\\\\\"\\\",closeBefore:\\\")]}'\\\\\\\":;>\\\",triples:\\\"\\\",explode:\\\"[]{}\\\"},x=C.Pos;function P(e,t){return\\\"pairs\\\"==t&&\\\"string\\\"==typeof e?e:\\\"object\\\"==typeof e&&null!=e[t]?e[t]:r[t]}C.defineOption(\\\"autoCloseBrackets\\\",!1,function(e,t,r){r&&r!=C.Init&&(e.removeKeyMap(i),e.state.closeBrackets=null),t&&(n(P(t,\\\"pairs\\\")),e.state.closeBrackets=t,e.addKeyMap(i))});var i={Backspace:function(e){var t=k(e);if(!t||e.getOption(\\\"disableInput\\\"))return C.Pass;for(var r=P(t,\\\"pairs\\\"),n=e.listSelections(),i=0;i\u003Cn.length;i++){if(!n[i].empty())return C.Pass;var a=s(e,n[i].head);if(!a||r.indexOf(a)%2!=0)return C.Pass}for(i=n.length-1;0\u003C=i;i--){var o=n[i].head;e.replaceRange(\\\"\\\",x(o.line,o.ch-1),x(o.line,o.ch+1),\\\"+delete\\\")}},Enter:function(n){var e=k(n),t=e&&P(e,\\\"explode\\\");if(!t||n.getOption(\\\"disableInput\\\"))return C.Pass;for(var i=n.listSelections(),r=0;r\u003Ci.length;r++){if(!i[r].empty())return C.Pass;var a=s(n,i[r].head);if(!a||t.indexOf(a)%2!=0)return C.Pass}n.operation(function(){var e=n.lineSeparator()||\\\"\\\\n\\\";n.replaceSelection(e+e,null),n.execCommand(\\\"goCharLeft\\\"),i=n.listSelections();for(var t=0;t\u003Ci.length;t++){var r=i[t].head.line;n.indentLine(r,null,!0),n.indentLine(r+1,null,!0)}})}};function n(e){for(var t=0;t\u003Ce.length;t++){var r=e.charAt(t),n=\\\"'\\\"+r+\\\"'\\\";i[n]||(i[n]=function(t){return function(e){return function(i,e){var t=k(i);if(!t||i.getOption(\\\"disableInput\\\"))return C.Pass;var r=P(t,\\\"pairs\\\"),n=r.indexOf(e);if(-1==n)return C.Pass;for(var a,o=P(t,\\\"closeBefore\\\"),s=P(t,\\\"triples\\\"),l=r.charAt(n+1)==e,c=i.listSelections(),f=n%2==0,h=0;h\u003Cc.length;h++){var u,d=c[h],p=d.head,g=i.getRange(p,x(p.line,p.ch+1));if(f&&!d.empty())u=\\\"surround\\\";else if(!l&&f||g!=e)if(l&&1\u003Cp.ch&&0\u003C=s.indexOf(e)&&i.getRange(x(p.line,p.ch-2),p)==e+e){if(2\u003Cp.ch&&/\\\\bstring/.test(i.getTokenTypeAt(x(p.line,p.ch-2))))return C.Pass;u=\\\"addFour\\\"}else if(l){var v=0==p.ch?\\\" \\\":i.getRange(x(p.line,p.ch-1),p);if(C.isWordChar(g)||v==e||C.isWordChar(v))return C.Pass;u=\\\"both\\\"}else{if(!f||!(0===g.length||/\\\\s/.test(g)||-1\u003Co.indexOf(g)))return C.Pass;u=\\\"both\\\"}else u=l&&function(e,t){var r=e.getTokenAt(x(t.line,t.ch+1));return/\\\\bstring/.test(r.type)&&r.start==t.ch&&(0==t.ch||!/\\\\bstring/.test(e.getTokenTypeAt(t)))}(i,p)?\\\"both\\\":0\u003C=s.indexOf(e)&&i.getRange(p,x(p.line,p.ch+3))==e+e+e?\\\"skipThree\\\":\\\"skip\\\";if(a){if(a!=u)return C.Pass}else a=u}var m=n%2?r.charAt(n-1):e,b=n%2?e:r.charAt(n+1);i.operation(function(){if(\\\"skip\\\"==a)i.execCommand(\\\"goCharRight\\\");else if(\\\"skipThree\\\"==a)for(var e=0;e\u003C3;e++)i.execCommand(\\\"goCharRight\\\");else if(\\\"surround\\\"==a){for(var t=i.getSelections(),e=0;e\u003Ct.length;e++)t[e]=m+t[e]+b;i.replaceSelections(t,\\\"around\\\"),t=i.listSelections().slice();for(e=0;e\u003Ct.length;e++)t[e]=(r=t[e],n=0\u003CC.cmpPos(r.anchor,r.head),{anchor:new x(r.anchor.line,r.anchor.ch+(n?-1:1)),hea
{"title":"$:/plugins/tiddlywiki/codemirror-keymap-vim","name":"CodeMirror Keymap Vim","description":"Keymap compatible with Vim for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-search-replace $:/plugins/tiddlywiki/codemirror-closebrackets","list":"readme","version":"5.2.0","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/codemirror/keymaps/vim\":{\"title\":\"$:/plugins/tiddlywiki/codemirror/keymaps/vim\",\"module-type\":\"codemirror-keymap\",\"text\":\"vim\\n\"},\"$:/plugins/tiddlywiki/codemirror/keymap/vim.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../lib/codemirror\\\"),require(\\\"../addon/search/searchcursor\\\"),require(\\\"../addon/dialog/dialog\\\"),require(\\\"../addon/edit/matchbrackets.js\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../lib/codemirror\\\",\\\"../addon/search/searchcursor\\\",\\\"../addon/dialog/dialog\\\",\\\"../addon/edit/matchbrackets\\\"],e):e(CodeMirror)}(function(Ze){\\\"use strict\\\";var Ge=[{keys:\\\"\u003CLeft>\\\",type:\\\"keyToKey\\\",toKeys:\\\"h\\\"},{keys:\\\"\u003CRight>\\\",type:\\\"keyToKey\\\",toKeys:\\\"l\\\"},{keys:\\\"\u003CUp>\\\",type:\\\"keyToKey\\\",toKeys:\\\"k\\\"},{keys:\\\"\u003CDown>\\\",type:\\\"keyToKey\\\",toKeys:\\\"j\\\"},{keys:\\\"\u003CSpace>\\\",type:\\\"keyToKey\\\",toKeys:\\\"l\\\"},{keys:\\\"\u003CBS>\\\",type:\\\"keyToKey\\\",toKeys:\\\"h\\\",context:\\\"normal\\\"},{keys:\\\"\u003CDel>\\\",type:\\\"keyToKey\\\",toKeys:\\\"x\\\",context:\\\"normal\\\"},{keys:\\\"\u003CC-Space>\\\",type:\\\"keyToKey\\\",toKeys:\\\"W\\\"},{keys:\\\"\u003CC-BS>\\\",type:\\\"keyToKey\\\",toKeys:\\\"B\\\",context:\\\"normal\\\"},{keys:\\\"\u003CS-Space>\\\",type:\\\"keyToKey\\\",toKeys:\\\"w\\\"},{keys:\\\"\u003CS-BS>\\\",type:\\\"keyToKey\\\",toKeys:\\\"b\\\",context:\\\"normal\\\"},{keys:\\\"\u003CC-n>\\\",type:\\\"keyToKey\\\",toKeys:\\\"j\\\"},{keys:\\\"\u003CC-p>\\\",type:\\\"keyToKey\\\",toKeys:\\\"k\\\"},{keys:\\\"\u003CC-[>\\\",type:\\\"keyToKey\\\",toKeys:\\\"\u003CEsc>\\\"},{keys:\\\"\u003CC-c>\\\",type:\\\"keyToKey\\\",toKeys:\\\"\u003CEsc>\\\"},{keys:\\\"\u003CC-[>\\\",type:\\\"keyToKey\\\",toKeys:\\\"\u003CEsc>\\\",context:\\\"insert\\\"},{keys:\\\"\u003CC-c>\\\",type:\\\"keyToKey\\\",toKeys:\\\"\u003CEsc>\\\",context:\\\"insert\\\"},{keys:\\\"s\\\",type:\\\"keyToKey\\\",toKeys:\\\"cl\\\",context:\\\"normal\\\"},{keys:\\\"s\\\",type:\\\"keyToKey\\\",toKeys:\\\"c\\\",context:\\\"visual\\\"},{keys:\\\"S\\\",type:\\\"keyToKey\\\",toKeys:\\\"cc\\\",context:\\\"normal\\\"},{keys:\\\"S\\\",type:\\\"keyToKey\\\",toKeys:\\\"VdO\\\",context:\\\"visual\\\"},{keys:\\\"\u003CHome>\\\",type:\\\"keyToKey\\\",toKeys:\\\"0\\\"},{keys:\\\"\u003CEnd>\\\",type:\\\"keyToKey\\\",toKeys:\\\"$\\\"},{keys:\\\"\u003CPageUp>\\\",type:\\\"keyToKey\\\",toKeys:\\\"\u003CC-b>\\\"},{keys:\\\"\u003CPageDown>\\\",type:\\\"keyToKey\\\",toKeys:\\\"\u003CC-f>\\\"},{keys:\\\"\u003CCR>\\\",type:\\\"keyToKey\\\",toKeys:\\\"j^\\\",context:\\\"normal\\\"},{keys:\\\"\u003CIns>\\\",type:\\\"action\\\",action:\\\"toggleOverwrite\\\",context:\\\"insert\\\"},{keys:\\\"H\\\",type:\\\"motion\\\",motion:\\\"moveToTopLine\\\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\"M\\\",type:\\\"motion\\\",motion:\\\"moveToMiddleLine\\\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\"L\\\",type:\\\"motion\\\",motion:\\\"moveToBottomLine\\\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\"h\\\",type:\\\"motion\\\",motion:\\\"moveByCharacters\\\",motionArgs:{forward:!1}},{keys:\\\"l\\\",type:\\\"motion\\\",motion:\\\"moveByCharacters\\\",motionArgs:{forward:!0}},{keys:\\\"j\\\",type:\\\"motion\\\",motion:\\\"moveByLines\\\",motionArgs:{forward:!0,linewise:!0}},{keys:\\\"k\\\",type:\\\"motion\\\",motion:\\\"moveByLines\\\",motionArgs:{forward:!1,linewise:!0}},{keys:\\\"gj\\\",type:\\\"motion\\\",m
{"title":"$:/plugins/tiddlywiki/codemirror-search-replace","name":"CodeMirror Search and Replace","description":"Search and replace for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.2.0","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/codemirror/addon/search/search.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"./searchcursor\\\"),require(\\\"../dialog/dialog\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"./searchcursor\\\",\\\"../dialog/dialog\\\"],e):e(CodeMirror)}(function(d){\\\"use strict\\\";function o(){this.posFrom=this.posTo=this.lastQuery=this.query=null,this.overlay=null}function m(e){return e.state.search||(e.state.search=new o)}function a(e){return\\\"string\\\"==typeof e&&e==e.toLowerCase()}function y(e,o,n){return e.getSearchCursor(o,n,{caseFold:a(o),multiline:!0})}function h(e,o,n,r,t){e.openDialog?e.openDialog(o,t,{value:r,selectValueOnOpen:!0,bottom:e.options.search.bottom}):t(prompt(n,r))}function r(e){return e.replace(/\\\\\\\\([nrt\\\\\\\\])/g,function(e,o){return\\\"n\\\"==o?\\\"\\\\n\\\":\\\"r\\\"==o?\\\"\\\\r\\\":\\\"t\\\"==o?\\\"\\\\t\\\":\\\"\\\\\\\\\\\"==o?\\\"\\\\\\\\\\\":e})}function s(e){var o=e.match(/^\\\\/(.*)\\\\/([a-z]*)$/);if(o)try{e=new RegExp(o[1],-1==o[2].indexOf(\\\"i\\\")?\\\"\\\":\\\"i\\\")}catch(e){}else e=r(e);return(\\\"string\\\"==typeof e?\\\"\\\"==e:e.test(\\\"\\\"))&&(e=/x^/),e}function g(e,o,n){var r,t;o.queryText=n,o.query=s(n),e.removeOverlay(o.overlay,a(o.query)),o.overlay=(r=o.query,t=a(o.query),\\\"string\\\"==typeof r?r=new RegExp(r.replace(/[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\\\^\\\\$\\\\|]/g,\\\"\\\\\\\\$&\\\"),t?\\\"gi\\\":\\\"g\\\"):r.global||(r=new RegExp(r.source,r.ignoreCase?\\\"gi\\\":\\\"g\\\")),{token:function(e){r.lastIndex=e.pos;var o=r.exec(e.string);if(o&&o.index==e.pos)return e.pos+=o[0].length||1,\\\"searching\\\";o?e.pos=o.index:e.skipToEnd()}}),e.addOverlay(o.overlay),e.showMatchesOnScrollbar&&(o.annotate&&(o.annotate.clear(),o.annotate=null),o.annotate=e.showMatchesOnScrollbar(o.query,a(o.query)))}function n(a,o,e,n){var r=m(a);if(r.query)return x(a,o);var t,s,i,c,l,u,p,f=a.getSelection()||r.lastQuery;f instanceof RegExp&&\\\"x^\\\"==f.source&&(f=null),e&&a.openDialog?(t=null,s=function(e,o){d.e_stop(o),e&&(e!=r.queryText&&(g(a,r,e),r.posFrom=r.posTo=a.getCursor()),t&&(t.style.opacity=1),x(a,o.shiftKey,function(e,o){var n;o.line\u003C3&&document.querySelector&&(n=a.display.wrapper.querySelector(\\\".CodeMirror-dialog\\\"))&&n.getBoundingClientRect().bottom-4>a.cursorCoords(o,\\\"window\\\").top&&((t=n).style.opacity=.4)}))},c=b(i=a),l=f,u=s,p=function(e,o){var n=d.keyName(e),r=a.getOption(\\\"extraKeys\\\"),t=r&&r[n]||d.keyMap[a.getOption(\\\"keyMap\\\")][n];\\\"findNext\\\"==t||\\\"findPrev\\\"==t||\\\"findPersistentNext\\\"==t||\\\"findPersistentPrev\\\"==t?(d.e_stop(e),g(a,m(a),o),a.execCommand(t)):\\\"find\\\"!=t&&\\\"findPersistent\\\"!=t||(d.e_stop(e),s(o,e))},i.openDialog(c,u,{value:l,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){v(i)},onKeyDown:p,bottom:i.options.search.bottom}),n&&f&&(g(a,r,f),x(a,o))):h(a,b(a),\\\"Search for:\\\",f,function(e){e&&!r.query&&a.operation(function(){g(a,r,e),r.posFrom=r.posTo=a.getCursor(),x(a,o)})})}function x(n,r,t){n.operation(function(){var e=m(n),o=y(n,e.query,r?e.posFrom:e.posTo);(o.find(r)||(o=y(n,e.query,r?d.Pos(n.lastLine()):d.Pos(n.firstLine(),0))).find(r))&&(n.setSelection(o.from(),o.to()),n.scrollIntoView({from:o.from(),to:o.to()},20),e.posFrom=o.from(),e.posTo=o.to(),t&&t(o.from(),o.to()))})}function v(o){o.operation(function(){var e=m(o);e.lastQuery=e.query,e.query&&(e.query=e.queryText=null,o.removeOverlay(e.overlay),e.annotate&&(e.annotate.clear(),e.annotate=null))})}func
{"title":"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js2","text":"// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\nCodeMirror.registerHelper('hint', 'anyword', function(editor) {\n var cur = editor.getCursor();\n var curLine = editor.getLine(cur.line);\n var start = cur.ch;\n var end = start;\n var tiddlers = $tw.wiki.filterTiddlers(\"[all[tiddlers]!is[system]]\");\n while (end \u003C curLine.length && /[\\w$]/.test(curLine.charAt(end))) ++end;\n while (start && /[\\w$]/.test(curLine.charAt(start - 1))) --start;\n var curWord = start !== end && curLine.slice(start, end);\n var regex = new RegExp('^' + curWord, 'i');\n return {\n list: (!curWord ? [] : tiddlers.filter(function(item) {\n return item.match(regex);\n })).sort(),\n from: CodeMirror.Pos(cur.line, start),\n to: CodeMirror.Pos(cur.line, end)\n }\n})\n});","created":"20200504175204795","creator":"soren","modified":"20210827213549101","modifier":"soren","module-type":"codemirrorDISABLED","tags":"$:/tags/DisabledPlugin","type":"application/javascript"},
{"title":"$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css","created":"20200815103937889","modified":"20210329230405134","module-type":"codemirror-theme","name":"cmplus","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"```\n/*\nTiddlywiki Metadata\n----\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css\n\nAdditional Fields - \nmodule-type: codemirror-theme\nname: cmplus\n*/\n```\n\n.cm-s-cmplus{\n line-height: 1.5em;\n background: \u003C\u003Ccolour tiddler-editor-background>> !important;\n color: \u003C\u003Ccolour foreground>> !important;\n}\n\n.cm-s-cmplus .CodeMirror-lines {\n padding: 8px 0;\n}\n\n.cm-s-cmplus .CodeMirror-linenumber {\n color: \u003C\u003Ccmcolour linenumber>>;\n}\n\n.cm-s-cmplus .CodeMirror-gutters {\n background-color: \u003C\u003Ccolour page-background>>;\n padding-right: 10px;\n z-index: 3;\n border: none;\n}\n\n.cm-s-cmplus div.CodeMirror-cursor {\n border-left: 3px solid \u003C\u003Ccolour foreground>>;\n}\n\n.cm-s-cmplus .CodeMirror-activeline-background {\n background: \u003C\u003Ccolour tiddler-editor-fields-even>>;\n}\n\n.cm-s-cmplus .CodeMirror-selected {\n background: \u003C\u003Ccmcolour selected>> !important;\n}\n\n.cm-s-cmplus .cm-comment {\n font-style: italic;\n color: \u003C\u003Ccolour muted-foreground>>;\n}\n\n.cm-s-cmplus .CodeMirror-matchingbracket {\n text-decoration: underline;\n color: \u003C\u003Ccmcolour matching-bracket>> !important;\n}\n\n.cm-s-cmplus .cm-strikethrough {\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>; \n}\n\n.cm-s-cmplus .cm-underlined {\n text-decoration-line: underline;\n text-decoration-style: solid;\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>;\n}\n\n.cm-s-cmplus .cm-superscript {\n vertical-align: super;\n font-size: 0.7em;\n line-height: 0.1em;\n}\n\n.cm-s-cmplus .cm-subscript {\n font-size: 0.7em;\n line-height: 0.5;\n}\n\n.cm-s-cmplus .cm-macro {\n color: \u003C\u003Ccmcolour macro>>;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-cmplus .cm-keyword {\n color: \u003C\u003Ccmcolour keyword>>;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n font-weight: 600;\n}\n\n.cm-s-cmplus .cm-quote {\n font-style: italic;\n padding-left: 0.6em;\n border-left: \u003C\u003Ccmcolour quote>> solid 0.2em;\n}\n\n.cm-s-cmplus .cm-hr {\n color: \u003C\u003Ccmcolour hr>>;\n}\n\n.cm-s-cmplus .cm-h1 {\n color: \u003C\u003Ccmcolour h1>>;\n font-weight: 700;\n font-size: 1.383em;\n line-height: 1.802em;\n}\n\n.cm-s-cmplus .cm-h2 {\n color: \u003C\u003Ccmcolour h2>>;\n font-weight: 600;\n font-size: 1.296em;\n line-height: 1.602em;\n}\n\n.cm-s-cmplus .cm-h3 {\n color: \u003C\u003Ccmcolour h3>>;\n font-weight: 500;\n font-size: 1.215em;\n line-height: 1.424em;\n}\n\n.cm-s-cmplus .cm-h4 {\n color: \u003C\u003Ccmcolour h4>>;\n font-weight: 400;\n font-size: 1.138em;\n line-height: 1.266em;\n}\n\n.cm-s-cmplus .cm-h5 {\n color: \u003C\u003Ccmcolour h5>>;\n font-weight: 400;\n font-size: 1.067em;\n line-height: 1.125em;\n}\n\n.cm-s-cmplus .cm-h6 {\n color: \u003C\u003Ccmcolour h6>>;\n font-weight: 400;\n}\n\n.cm-s-cmplus .cm-link {\n color: \u003C\u003Ccmcolour link>>;\n text-decoration: none;\n font-weight: 600;\n}\n\n.cm-s-cmplus .cm-internallink {\n color: \u003C\u003Ccmcolour internallink>>;\n font-weight:600;\n}\n\n.cm-s-cmplus .cm-externallink {\n color: \u003C\u003Ccmcolour externallink>>;\n text-decoration: underline;\n}\n\n.cm-s-cmplus .cm-transclude {\n color: \u003C\u003Ccmcolour transclude>>;\n}\n\n.cm-s-cmplus .cm-pre {\n color: \u003C\u003Ccmcolour pre>>;\t\t\n font-family: {{$:/plugins/adithyab/cmplus/settings##monospace-font}};\n}\n\n.cm-s-cmplus .cm-monospace {\n color: \u003C\u003Ccmcolour monospace>>;\n font-family: {{$:/plugins/adithyab/cmplus/settings##monospace-font}};\n}\n\n.cm-s-cmplus .cm-list1 {\n color: \u003C\u003Ccm
{"title":"$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css2","created":"20200815103937889","creator":"soren","modified":"20210827213558174","modifier":"soren","module-type":"codemirror-theme","name":"tw5plus","tags":"$:/tags/DisabledPlugin","type":"text/vnd.tiddlywiki","text":"```\n/*\nTiddlywiki Metadata\n----\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css\n\nAdditional Fields - \nmodule-type: codemirror-theme\nname: tw5plus\n*/\n```\n\n.cm-s-tw5plus {\n line-height: 1.5em;\n background: \u003C\u003Ccolour tiddler-editor-background>>;\n color: \u003C\u003Ccolour foreground>>;\n}\n\n.cm-s-tw5plus .CodeMirror-lines {\n padding: 8px 0;\n}\n\n.cm-s-tw5plus .CodeMirror-linenumber {\n color: #586E75;\n}\n\n.cm-s-tw5plus .CodeMirror-gutters {\n background-color: \u003C\u003Ccolour page-background>>;\n padding-right: 10px;\n z-index: 3;\n border: none;\n}\n\n.cm-s-tw5plus div.CodeMirror-cursor {\n border-left: 3px solid \u003C\u003Ccolour foreground>>;\n}\n\n.cm-s-tw5plus .CodeMirror-activeline-background {\n background: \u003C\u003Ccolour tiddler-editor-fields-odd>>;\n}\n\n.cm-s-tw5plus .CodeMirror-selected {\n background: \u003C\u003Ccolour very-muted-foreground>>;\n}\n\n.cm-s-tw5plus .cm-comment {\n font-style: italic;\n color: \u003C\u003Ccolour muted-foreground>>;\n}\n\n.cm-s-tw5plus .CodeMirror-matchingbracket {\n text-decoration: underline;\n color: #d33682 !important;\n}\n\n.cm-s-tw5plus .cm-strikethrough {\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>; \n}\n\n.cm-s-tw5plus .cm-underlined {\n text-decoration-line: underline;\n text-decoration-style: solid;\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>;\n}\n\n.cm-s-tw5plus .cm-superscript {\n vertical-align: super;\n font-size: 0.7em;\n line-height: 0.1em;\n}\n\n.cm-s-tw5plus .cm-subscript {\n font-size: 0.7em;\n line-height: 0.5;\n}\n\n.cm-s-tw5plus .cm-string {\n color: #586E75;\n}\n\n.cm-s-tw5plus .cm-number {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-macro {\n color: #cb4b16;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-keyword {\n color: #859900;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n font-weight: 600;\n}\n\n.cm-s-tw5plus .cm-variable {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-variable-2 {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-property {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-atom {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-operator {\n color: #859900;\n}\n\n.cm-s-tw5plus .cm-quote {\n font-style: italic;\n padding-left: 0.6em;\n border-left: #d33682 solid 0.2em;\n}\n\n.cm-s-tw5plus .cm-hr {\n color: #268bd2;\n}\n\n.cm-s-tw5plus .cm-h1 {\n color: #d33682;\n font-weight: 700;\n font-size: 1.383em;\n line-height: 1.802em;\n}\n\n.cm-s-tw5plus .cm-h2 {\n color: #d33682;\n font-weight: 600;\n font-size: 1.296em;\n line-height: 1.602em;\n}\n\n.cm-s-tw5plus .cm-h3 {\n color: #d33682;\n font-weight: 500;\n font-size: 1.215em;\n line-height: 1.424em;\n}\n\n.cm-s-tw5plus .cm-h4 {\n color: #d33682;\n font-weight: 400;\n font-size: 1.138em;\n line-height: 1.266em;\n}\n\n.cm-s-tw5plus .cm-h5 {\n color: #d33682;\n font-weight: 400;\n font-size: 1.067em;\n line-height: 1.125em;\n}\n\n.cm-s-tw5plus .cm-h6 {\n color: #d33682;\n font-weight: 400;\n}\n\n.cm-s-tw5plus .cm-link {\n color: #2aa198;\n text-decoration: none;\n}\n\n.cm-s-tw5plus .cm-internallink {\n color: #268bd2;\n font-weight:600;\n}\n\n.cm-s-tw5plus .cm-externallink {\n color: #d33682;\n text-decoration: underline;\n}\n\n.cm-s-tw5plus .cm-transclude {\n color: #dc322f;\n}\n\n.cm-s-tw5plus .cm-pre {\n color: #268BD2;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-monospace {\n color: #cb4b16;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-list1 {\n col
{"title":"$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js2","text":"// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/***\n\n|''Name''|tw5.js|\n|''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror|\n|''Original Contributor''|PMario|\n|''Author''|[[adithya-badidey|https://github.com/adithya-badidey]]|\n|''Version''|0.1.8|\n|''Status''|''stable''|\n|''Source''|[[GitHub|https://github.com/adithya-badidey/TW5-codemirror-plus]]|\n|''Documentation''|https://codemirror.tiddlyspace.com/|\n|''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]|\n|''Requires''|codemirror.js|\n|''Keywords''|syntax highlighting color code mirror codemirror|\n\n!! Tiddlywiki Metadata\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js\nType: application/javascript\nAdditional Field:\nmodule-type: codemirror\n \nInfo: CoreVersion parameter is needed for TiddlyWiki only!\n\n***/\n\n(function (mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"tiddlywiki5\", function () {\n // Tokenizer\n var textwords = {};\n\n var keywords = {\n \"changecount\": true, \"colour\": true,\n \"colour-picker\": true, \"contrastcolour\": true,\n \"copy-to-clipboard\": true, \"csvtiddlers\": true,\n \"datauri\": true, \"dumpvariables\": true,\n \"image-picker\": true, \"jsontiddler\": true,\n \"jsontiddlers\": true, \"lingo\": true,\n \"list-links\": true, \"list-links-draggable\": true,\n \"list-tagged-draggable\": true, \"list-thumbnails\": true,\n \"makedatauri\": true, \"now\": true,\n \"qualify\": true, \"resolvepath\": true,\n \"box-shadow\": true, \"filter\": true,\n \"transition\": true, \"background-linear-gradient\": true,\n \"transform-origin\": true, \"toc\": true,\n \"toc-expandable\": true, \"toc-selective-expandable\": true,\n \"toc-tabbed-internal-nav\": true, \"toc-tabbed-external-nav\": true,\n \"tabs\": true, \"tag\": true,\n \"tag-picker\": true, \"tag-pill\": true,\n \"thumbnail\": true, \"timeline\": true,\n \"tree\": true, \"unusedtitle\": true,\n \"version\": true\n };\n\n var isSpaceName = /[\\w_\\-]/i,\n reHR = /^\\-\\-\\-\\-+$/, // \u003Chr>\n reBlockQuote = /^\u003C\u003C\u003C/,\n rePreStart = /^```$/;\n\n function chain(stream, state, f) {\n state.tokenize = f;\n return f(stream, state);\n }\n\n function tokenBase(stream, state) {\n var sol = stream.sol(), // sol() -> Returns true only if the stream is at the start of the line.\n ch = stream.peek(); // Returns the next character in the stream without advancing it. Will return a null at the end of the line.\n\n // check start of blocks\n if (sol && /[\u003C\\/\\*{}\\-`]/.test(ch)) { //is at the start of a line and the next char is not\n if (stream.match(reBlockQuote)) {\n return chain(stream, state, twTokenQuote);\n }\n \n if (stream.match(reHR))\n return 'hr';\n\n if (stream.match(rePreStart))\n return chain(stream, state, twTokenPre);\n }\n\n stream.next();\n if (sol && /[\\/\\*!#;:>|]/.test(ch)) {\n if (ch == \"!\") { // tw header\n var count = 1;\n while (stream.eat('!'))\n count++;\n
{"title":"$:/plugins/tiddlywiki/highlight","name":"Highlight","description":"Highlight.js syntax highlighting","author":"Joao Bolila","list":"readme usage howto license","version":"5.2.0","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/config/HighlightPlugin/TypeMappings/application/javascript\":{\"title\":\"$:/config/HighlightPlugin/TypeMappings/application/javascript\",\"text\":\"javascript\"},\"$:/config/HighlightPlugin/TypeMappings/application/json\":{\"title\":\"$:/config/HighlightPlugin/TypeMappings/application/json\",\"text\":\"json\"},\"$:/config/HighlightPlugin/TypeMappings/text/css\":{\"title\":\"$:/config/HighlightPlugin/TypeMappings/text/css\",\"text\":\"css\"},\"$:/config/HighlightPlugin/TypeMappings/text/html\":{\"title\":\"$:/config/HighlightPlugin/TypeMappings/text/html\",\"text\":\"html\"},\"$:/config/HighlightPlugin/TypeMappings/image/svg+xml\":{\"title\":\"$:/config/HighlightPlugin/TypeMappings/image/svg+xml\",\"text\":\"xml\"},\"$:/config/HighlightPlugin/TypeMappings/text/x-markdown\":{\"title\":\"$:/config/HighlightPlugin/TypeMappings/text/x-markdown\",\"text\":\"markdown\"},\"$:/plugins/tiddlywiki/highlight/highlight.js\":{\"text\":\"var hljs = require(\\\"$:/plugins/tiddlywiki/highlight/highlight.js\\\");\\n/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */\\n!function(e){var n=\\\"object\\\"==typeof window&&window||\\\"object\\\"==typeof self&&self;\\\"undefined\\\"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),\\\"function\\\"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],i=Object.keys,_={},c={},C=!0,n=/^(no-?highlight|plain|text)$/i,l=/\\\\blang(?:uage)?-([\\\\w-]+)\\\\b/i,t=/((^(\u003C[^>]+>|\\\\t|)+|(?:\\\\n)))/gm,r={case_insensitive:\\\"cI\\\",lexemes:\\\"l\\\",contains:\\\"c\\\",keywords:\\\"k\\\",subLanguage:\\\"sL\\\",className:\\\"cN\\\",begin:\\\"b\\\",beginKeywords:\\\"bK\\\",end:\\\"e\\\",endsWithParent:\\\"eW\\\",illegal:\\\"i\\\",excludeBegin:\\\"eB\\\",excludeEnd:\\\"eE\\\",returnBegin:\\\"rB\\\",returnEnd:\\\"rE\\\",variants:\\\"v\\\",IDENT_RE:\\\"IR\\\",UNDERSCORE_IDENT_RE:\\\"UIR\\\",NUMBER_RE:\\\"NR\\\",C_NUMBER_RE:\\\"CNR\\\",BINARY_NUMBER_RE:\\\"BNR\\\",RE_STARTERS_RE:\\\"RSR\\\",BACKSLASH_ESCAPE:\\\"BE\\\",APOS_STRING_MODE:\\\"ASM\\\",QUOTE_STRING_MODE:\\\"QSM\\\",PHRASAL_WORDS_MODE:\\\"PWM\\\",C_LINE_COMMENT_MODE:\\\"CLCM\\\",C_BLOCK_COMMENT_MODE:\\\"CBCM\\\",HASH_COMMENT_MODE:\\\"HCM\\\",NUMBER_MODE:\\\"NM\\\",C_NUMBER_MODE:\\\"CNM\\\",BINARY_NUMBER_MODE:\\\"BNM\\\",CSS_NUMBER_MODE:\\\"CSSNM\\\",REGEXP_MODE:\\\"RM\\\",TITLE_MODE:\\\"TM\\\",UNDERSCORE_TITLE_MODE:\\\"UTM\\\",COMMENT:\\\"C\\\",beginRe:\\\"bR\\\",endRe:\\\"eR\\\",illegalRe:\\\"iR\\\",lexemesRe:\\\"lR\\\",terminators:\\\"t\\\",terminator_end:\\\"tE\\\"},m=\\\"\u003C/span>\\\",O=\\\"Could not find the language '{}', did you forget to load/include a language module?\\\",B={classPrefix:\\\"hljs-\\\",tabReplace:null,useBR:!1,languages:void 0},o=\\\"of and for in not or if then\\\".split(\\\" \\\");function x(e){return e.replace(/&/g,\\\"&amp;\\\").replace(/\u003C/g,\\\"&lt;\\\").replace(/>/g,\\\"&gt;\\\")}function g(e){return e.nodeName.toLowerCase()}function u(e){return n.test(e)}function s(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 E(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:\\\"start\\\",offset:t,node:r}),t=e(r,t),g(r).match(/br|hr|img|input/)||a.push({event:\\\"stop\\\",offset:t,node:r}));return t}(e,0),a}function d(e,n,t){var r=0,a=\\\"\\\",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset\u003Cn[0].offset?e:n:\\\"start\\\"===n[0].event?e:n:e.length?e:n}function c(e){a+=\\\"\u003C\\\"+g(e)+f.map.call(e.attributes,function(e){return\\\" \\\"+e.nodeName+'=\\\"'+x(e.value).replace(/\\\"/g,\\\"&quot;\\\")+'\\\"'}).join(\\\"\\\")+\\\">\\\"}function l(e){a+=\\\"\u003C/\\\"+g(
{"title":"$:/plugins/tiddlywiki/katex","name":"KaTeX","description":"KaTeX library for mathematical typography","list":"readme usage config","library-version":"v0.13.18","version":"5.2.0","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/katex/config\":{\"title\":\"$:/plugins/tiddlywiki/katex/config\",\"text\":\"\u003Cdiv class=\\\"tc-control-panel\\\">\\n\\n\u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/KaTeX/Config]!has[draft.of]]\\\">\\n\\n\u003Cdiv>\\n\\n!! \u003C$link>\u003C$transclude field=\\\"caption\\\"/>\u003C/$link>\\n\\n\u003C$transclude>\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003C/div>\\n\"},\"$:/plugins/tiddlywiki/katex/katex.min.css\":{\"text\":\".katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\\\"0.13.18\\\"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1
{"title":"$:/sib/Buttons/CopyPublicZettelkastenLink","caption":"copy public link","created":"20201120172611922","creator":"soren","description":"Copy a link to this tiddler in the public Zettelkasten","list-after":"$:/core/ui/Buttons/info","modified":"20210922125543768","modifier":"soren","tags":"$:/tags/ViewToolbar","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\\define copier()\n https://zettelkasten.sorenbjornstad.com/#$(tidTitle)$\n\\end\n\n\u003C$set name=\"tidTitle\" value={{!!title}}>\n\u003C$button message=\"tm-copy-to-clipboard\" param=\u003C\u003Ccopier>> tooltip={{$:/sib/Buttons/CopyPublicZettelkastenLink!!caption}} class=\u003C\u003Ctv-config-toolbar-class>>>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-icons>match[yes]]\">\n {{$:/core/images/permalink-button}}\n\t\u003C/$list>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-text>match[yes]]\">\n\t\u003Cspan class=\"tc-btn-text\">\n\t\u003C$text text=\" \"/>\n\t\u003C$text text={{$:/sib/Buttons/CopyPublicZettelkastenLink!!caption}}/>\n\t\u003C/span>\n\t\u003C/$list>\n\u003C/$button>\n\u003C/$set>"},
{"title":"$:/sib/Buttons/CopyTitleReference","caption":"copy tiddler title","created":"20200419143537510","creator":"soren","description":"Copy the name of this tiddler to the clipboard","list-after":"$:/core/ui/Buttons/info","modified":"20210922125723154","modifier":"soren","tags":"$:/tags/ViewToolbar","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\u003C$button message=\"tm-copy-to-clipboard\" param={{!!title}} tooltip={{$:/sib/Buttons/CopyTitleReference!!caption}} class=\u003C\u003Ctv-config-toolbar-class>>>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-icons>match[yes]]\">\n\t\t\u003Ci class=\"far fa-copy\" style=\"font-size:160%; position:relative; bottom:-4px; left:-1px;\"/>\n\t\u003C/$list>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-text>match[yes]]\">\n\t\u003Cspan class=\"tc-btn-text\">\n\t\u003C$text text=\" \"/>\n\t\u003C$text text={{$:/sib/Buttons/CopyTitleReference!!caption}}/>\n\t\u003C/span>\n\t\u003C/$list>\n\u003C/$button>"},
{"title":"$:/sib/Buttons/excise-private-chunk","caption":"Excise private chunk","condition":"[\u003CtargetTiddler>type[]] [\u003CtargetTiddler>type[text/vnd.tiddlywiki]] +[first[]]","created":"20210522034413324","creator":"soren","description":"Create a new private chunk from the selection","icon":"$:/core/images/locked-padlock","modified":"20210928031136154","modifier":"soren","shortcuts":"((excise-private-chunk))","tags":"$:/tags/EditorToolbar","type":"text/vnd.tiddlywiki","text":"\u003C$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excisePrivateChunk\"\n/>"},
{"title":"$:/sib/Buttons/NewSource","caption":"new source","created":"20200822190145295","description":"Create a new source tiddler","list-after":"$:/core/ui/Buttons/new-tiddler","modified":"20210522014032330","tags":"$:/tags/PageControls","type":"text/vnd.tiddlywiki","text":"\u003C$button class=\u003C\u003Ctv-config-toolbar-class>> selectedClass=\"tc-selected\" tooltip={{!!caption}}>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-icons>match[yes]]\">\n\t{{$:/core/images/quote}}\n\t\u003C/$list>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-text>match[yes]]\">\n\t\u003Cspan class=\"tc-btn-text\">\u003C$text text={{$:/sib/Buttons/NewSource!!caption}}/>\u003C/span>\n\t\u003C/$list>\n\t\n \u003C$action-sendmessage\n $message=\"tm-new-tiddler\"\n title=\"New Source\"\n tags=\"Source\"\n\t\tcaption=\"\"\n\t\tmedium=\"\"\n\t\turl=\"\"\n\t\treadstatus=\"unread\"\n\t\tauthor=\"\"\n\t\tcompleted=\"\"\n\t\tyear=\"2021\"\n />\n\u003C/$button>"},
{"title":"$:/sib/Buttons/ReadingInbox","created":"20210307212922834","modified":"20210825122822234","modifier":"soren","tags":"$:/tags/PageControls","type":"text/vnd.tiddlywiki","text":"\u003C$button to=\"$:/sib/Tools/ReadingInbox\" class=\u003C\u003Ctv-config-toolbar-class>> selectedClass=\"tc-selected\">\u003Ci class=\"fa fa-inbox\" style=\"font-size:140%; position:relative; bottom:-3px; left:-1px;\"/>\u003C/$button>"},
{"title":"$:/sib/Buttons/Tools","caption":"tools","created":"20210825121643555","creator":"soren","description":"Open the Zettelkasten tools","list-after":"$:/core/ui/Buttons/control-panel","modified":"20210825121844661","modifier":"soren","tags":"$:/tags/PageControls","type":"text/vnd.tiddlywiki","text":"\u003C$button class=\u003C\u003Ctv-config-toolbar-class>> selectedClass=\"tc-selected\" tooltip={{!!caption}}>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-icons>match[yes]]\">\n\t\t{{$:/core/images/theme-button}}\n\t\u003C/$list>\n\t\u003C$list filter=\"[\u003Ctv-config-toolbar-text>match[yes]]\">\n\t\u003Cspan class=\"tc-btn-text\">\u003C$text text={{$:/sib/Buttons/Tools!!caption}}/>\u003C/span>\n\t\u003C/$list>\n\t\n\t\u003C$action-navigate $to=\"$:/sib/Tools\"/>\n\u003C/$button>"},
{"title":"$:/sib/Documentation","created":"20210523144533696","modified":"20210523144359908","tags":"","type":"text/vnd.tiddlywiki","text":"\u003C\u003Ctabs \"[prefix[$:/sib/Documentation/]]\" default:\"$:/sib/Documentation/Macros\">>"},
{"title":"$:/sib/Documentation/Macros","caption":"Macros","created":"20210523143205876","modified":"20210523144411256","tags":"","type":"text/vnd.tiddlywiki","text":"Click into a macro to see an example of its usage and its definition.\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth style=\"width: 10em;\">Name\u003C/th>\n\t\t\u003Cth>Description\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter=\"[prefix[$:/sib/Macros/]tag[$:/tags/Macro]]\">\n\t\u003Ctr>\n\t\t\u003Ctd>\u003C$link to=\u003C\u003CcurrentTiddler>>>\u003C$text text={{{ [all[current]removeprefix[$:/sib/Macros/]] }}}/>\u003C/$link>\u003C/td>\n\t\t\u003Ctd>{{!!description}}\u003C/td>\n\t\u003C/tr>\n\t\u003C/$list>\n\u003C/table>"},
{"title":"$:/sib/Documentation/ViewTemplates","caption":"View templates","created":"20210523143729032","modified":"20210523144417979","tags":"","type":"text/vnd.tiddlywiki","text":"\\define lastbit() [{!!caption}!is[blank]] ~[split[/]last[]]\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth style=\"width: 15em;\">Name\u003C/th>\n\t\t\u003Cth>Purpose\u003C/th>\n\t\t\u003Cth>Transcluded in\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter=\"[prefix[$:/sib/]tag[$:/tags/ViewTemplate]sortsub\u003Clastbit>]\">\n\t\u003Ctr>\n\t\t\u003Ctd>\u003C$link to=\u003C\u003CcurrentTiddler>>>\u003C$text text={{{ [{!!caption}!is[blank]] ~[all[current]subfilter\u003Clastbit>] }}}/>\u003C/$link>\u003C/td>\n\t\t\u003Ctd>{{!!description}}\u003C/td>\n\t\t\u003Ctd>{{!!transcludedin}}\u003C/td>\n\t\u003C/tr>\n\t\u003C/$list>\n\u003C/table>"},
{"title":"$:/sib/EpistemicStatus/confident","caption":"confident","color":"green","created":"20210508225005508","modified":"20210818135736812","section":"main","stackorder":"10","tags":"","type":"text/vnd.tiddlywiki","text":"I would vouch for this idea without qualification in a public blog post or speech. That said, [[I could still be wrong|IntellectualHumility]], and I'm willing to hear why I'm wrong and [[change my mind|ChangeYourMind]] if warranted."},
{"title":"$:/sib/EpistemicStatus/Display","created":"20210508223048629","creator":"soren","description":"Show the [[epistemic status|EpistemicStatuses]] of the current tiddler, if any. The status is editable in the private edition.","modified":"20210920193540286","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All [[idea tiddlers|ZettelkastenCardType]]: those that are not tagged with a red type tag and are not system tiddlers, except that index tiddlers are included.","type":"text/vnd.tiddlywiki","text":"\\define color-style() color: $(itemColor)$;\n\n\u003C$list filter=\u003C\u003Cff EpistemicStatus>> variable=_>\n\u003C$list filter=\"[all[current]!is[system]]\">\n\u003C$list filter=\"[all[current]tag[Idea]] [all[current]tag[Index]]\" variable=_>\n\n\u003Cdiv style=\"float: right; vertical-align: center;\">\n\u003C$list filter=\"[[$:/config/sib/IsPublicEdition]text[true]]\" variable=_>\n\t\u003C$link to=\"EpistemicStatuses\">\u003Cspan style={{{ [prefix[$:/sib/EpistemicStatus]caption{!!es}get[color]addprefix[color: ]addsuffix[;]] }}}>epistemic status\u003C/span>\u003C/$link>:\n\t\u003C$select field=\"es\" default=\"\">\n\t\t\u003C$list filter=\"[prefix[$:/sib/EpistemicStatus]has[caption]nsort[stackorder]]\">\n\t\t\t\u003C$set name=\"itemColor\" value={{!!color}}>\n\t\t\t\t\u003Coption style=\u003C\u003Ccolor-style>> value={{!!caption}}>{{!!caption}}\u003C/option>\n\t\t\t\u003C/$set>\n\t\t\u003C/$list>\n\t\u003C/$select>\n\u003C/$list>\n\u003C$list filter=\"[[$:/config/sib/IsPublicEdition]!text[true]]\" variable=_>\n\u003C$list filter=\"[all[current]has[es]]\">\n\t[[epistemic status|EpistemicStatuses]]: \u003Cspan style={{{ [prefix[$:/sib/EpistemicStatus]caption{!!es}get[color]addprefix[color: ]addsuffix[;]] }}}>{{!!es}}\u003C/span>\n\u003C/$list>\n\u003C/$list>\n\u003C/div>\n\n\u003C/$list>\n\u003C/$list>\n\u003C/$list>"},
{"title":"$:/sib/EpistemicStatus/likely","caption":"likely","color":"lightgreen","created":"20210508225031010","modified":"20210509004556699","section":"main","stackorder":"20","tags":"","type":"text/vnd.tiddlywiki","text":"I believe this idea is more likely than not to be true, but perhaps with some qualifications. I may be suspicious that the effect size is smaller than claimed, or that it may be true only in a more specific case; or I may just not have finished thinking through enough implications or doing enough research to be fully confident about it."},
{"title":"$:/sib/EpistemicStatus/mythological","caption":"mythological","color":"white","created":"20210508225357539","modified":"20210508233248388","section":"auxiliary","stackorder":"120","tags":"","type":"text/vnd.tiddlywiki","text":"Judging the tiddler's correctness is a nonsensical operation or misses the point. Includes jokes, fiction, aphorisms, [[stories whose main purpose is not to tell what happened|SoWhat]], and so on."},
{"title":"$:/sib/EpistemicStatus/personal","caption":"personal","color":"gray","created":"20210508225329258","modified":"20210508230857314","section":"auxiliary","stackorder":"110","tags":"","type":"text/vnd.tiddlywiki","text":"The tiddler describes me on a subjective level, so it is difficult or impossible to get an objective assessment. I am probably the best expert on myself [[but still not very good|PeopleDontKnowWhatTheyWant]]."},
{"title":"$:/sib/EpistemicStatus/possible","caption":"possible","color":"lightblue","created":"20210508225155649","creator":"soren","modified":"20211229142954562","modifier":"soren","section":"main","stackorder":"30","tags":"","type":"text/vnd.tiddlywiki","text":"I [[withhold judgment|NoOpinion]] on the idea; I am merely reporting it."},
{"title":"$:/sib/EpistemicStatus/probably-wrong","caption":"probably wrong","color":"orange","created":"20210508225317301","modified":"20210508233223543","section":"main","stackorder":"50","tags":"","type":"text/vnd.tiddlywiki","text":"I would bet against this idea, or think it is so wild that I would be embarrassed to bring it up in a more formal context, but I think it's worth recording anyway."},
{"title":"$:/sib/EpistemicStatus/unlikely","caption":"unlikely","color":"yellow","created":"20210508225252519","modified":"20210522030711474","section":"main","stackorder":"40","tags":"","type":"text/vnd.tiddlywiki","text":"I find this idea interesting or worth recording, but suspect it is flawed or incorrect."},
{"title":"$:/sib/Fonts/SourceSansPro","text":"/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on March 20, 2021.\n\n+------------+--------------------------+-------------+------------+\n|to get: | font-family | font-weight | font-style |\n+------------+--------------------------+-------------+------------+\n|regular | Source Sans Pro | normal | normal |\n|italic | Source Sans Pro | normal | italic |\n|bold | Source Sans Pro | bold | normal |\n|bold italic | Source Sans Pro | bold | italic |\n|semibold | Source Sans Pro Semibold | normal | normal |\n+------------+--------------------------+-------------+------------+\n\nTW font embed instructions: https://groups.google.com/g/tiddlywiki/c/7HPSS67j4uU\n\nCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL\n\n-----------------------------------------------------------\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n-----------------------------------------------------------\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the copyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as distributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to
{"title":"$:/sib/GettingStarted","created":"20210523150144006","creator":"soren","description":"Guided wizard that walks you through basic settings and the most important things to know about this edition.","list":"$:/sib/GettingStarted/Warning $:/sib/GettingStarted/Title $:/sib/GettingStarted/Copyright $:/sib/GettingStarted/ZettelkastenCardTypes $:/sib/GettingStarted/ReferenceExplorer $:/sib/GettingStarted/ThingsToDo $:/sib/GettingStarted/NextSteps","modified":"20210922011910182","modifier":"soren","tags":"Meta Tool","tooltype":"configuration","type":"text/vnd.tiddlywiki","text":"\\define go-back() \u003C$action-setfield $tiddler=\"$:/config/zettelkasten/GettingStartedWizardCurr\" text={{{ [enlist{$:/sib/GettingStarted!!list}before{$:/config/zettelkasten/GettingStartedWizardCurr}] }}}/>\n\\define go-forward() \u003C$action-setfield $tiddler=\"$:/config/zettelkasten/GettingStartedWizardCurr\" text={{{ [enlist{$:/sib/GettingStarted!!list}after{$:/config/zettelkasten/GettingStartedWizardCurr}] }}}/>\n\\define wizard-navbar()\n\u003Cdiv style=\"margin: auto; text-align: center;\">\n\t\u003Ch2 style=\"margin-bottom: 5px;\">{{!!caption}}\u003C/h2>\n\n\t\u003C$list filter=\"[enlist{$:/sib/GettingStarted!!list}before{$:/config/zettelkasten/GettingStartedWizardCurr}!is[blank]]\" variable=_>\n\t\t\u003C$button actions=\u003C\u003Cgo-back>>>\n\t\t\t← Back\n\t\t\u003C/$button>\n\t\u003C/$list>\n\t\n\t\u003C$list filter=\"[enlist{$:/sib/GettingStarted!!list}after{$:/config/zettelkasten/GettingStartedWizardCurr}!is[blank]]\" variable=_>\n\t\t\u003C$button actions=\u003C\u003Cgo-forward>>>\n\t\t\tNext →\n\t\t\u003C/$button>\n\t\u003C/$list>\n\u003C/div>\n\\end\n\nWelcome to ~TiddlyZettelKasten, usually known as ''tzk'' (pronounced /tə'ziːk/, tuh-ZEEK). tzk is an occasionally updated version of [[Soren's Zettelkasten|https://zettelkasten.sorenbjornstad.com]] in a format that you can use as a launching point for your own Zettelkasten or similar wiki.\n\nYou are expected and encouraged to make tzk your own by changing its conventions, tools, tags, and so on as you learn more about the Zettelkasten approach to note-taking. Rather than a full-service application, tzk is a framework you can use to build your own system (although it works out of the box if you happen to like Soren's highly opinionated approach).\n\nIt's recommended that you have a basic understanding of TiddlyWiki before getting started with tzk. [[Grok TiddlyWiki|https://groktiddlywiki.com]] is a free online textbook you can use to learn TiddlyWiki; completing at least chapters 1 and 2 is recommended before getting too serious with tzk. (Jumping in first is totally fine, but if you find yourself with lots of questions about how things work, check //Grok ~TiddlyWiki// before getting frustrated).\n\nIf you're viewing this page on the web, you have two options for installation:\n\n\u003C$details summary=\"As a single file\">\n\nYou can start out by downloading the wiki as a single HTML file and working with it directly in your browser:\n\n{{$:/snippets/download-wiki-button}}\n\nYou will need a way of saving changes to this file as you work. You can [[view the full list of options at tiddlywiki.com|https://tiddlywiki.com/#Saving]]; if you've never used TiddlyWiki before and aren't sure what to pick, [[I recommend TiddlyDesktop|https://groktiddlywiki.com/read/#Installing%20TiddlyWiki]].\n\nYou can always convert your single-file wiki to Node.js later using the `tzk convert` command.\n\n\u003C/$details>\n\u003C$details summary=\"Through Node.js (full-service)\">\n\ntzk is primarily designed for use with Node.js and has an associated helper command-line interface. Using tzk this way is more involved and technical but offers the following features you can't get in the single-file version:\n\n* Instant setup of your wiki on Node.js.\n* Highly configurable builds, allowing you to publish different versions of your wiki -- a common use case is publishing some of your content on the web and keeping some of it private.\n* Space-efficient backups and version history with Git.\n\nF
{"title":"$:/sib/GettingStarted/Copyright","caption":"Copyright","created":"20210523153031971","creator":"soren","modified":"20210920170823196","modifier":"soren","tags":"Meta","type":"text/vnd.tiddlywiki","text":"If you're sure you will never share any part of your Zettelkasten with others, you can skip this step. Otherwise, take a moment now to decide under what terms you will share your content.\n\nThe built-in licensing model for this edition involves two different licenses: one on the //content// (your actual notes) and a second on the //system tiddlers// (the custom logic that sits behind the wiki).\n\n\n\u003C$details summary=\"Easy mode: Keep the existing terms\">\n\nIf you take this option, here's what you're letting other people do:\n\n* Your ''notes'' will be all-rights-reserved: people who have access to the notes can read them and use them under [[fair use|https://en.wikipedia.org/wiki/Fair_use]] in your jurisdiction, but can't do anything else with them.\n* Your changes to ''system tiddlers'' will be licensed under the [[MIT license|https://en.wikipedia.org/wiki/MIT_License]] (others can freely copy and reuse them in their own wikis).\n\nAssuming you are comfortable with that, this method is recommended if you are unfamiliar with open-source licensing or copyright law; simply filling in the copyright notice below will automatically ensure your stake in your content is recognized and meet your legal obligations under the MIT license of this edition.\n\nWhat should your copyright notice look like? This will normally be something like `Copyright © 1995 Your Name Here.` If you want the copyright date to automatically update, use `\u003C\u003Cnow YYYY>>` in place of the year.\n\n//Your copyright notice//: \u003C$edit-text tiddler=\"$:/config/zettelkasten/copyright/UserNotice\" tag=\"input\" class=\"sib-copyright-input\"/>\n\n\u003C/$details>\n\u003C$details summary=\"Or alter the notices yourself\">\n\nIf you don't like the built-in model, you can freely change the license used for your notes by editing the tiddler [[$:/config/zettelkasten/copyright/Content]]. For instance, maybe you'd like to make your notes available under a [[Creative Commons|https://creativecommons.org/]] license.\n\nIt's possible to use a different license than the MIT license for your modifications to system tiddlers, including forbidding anyone else from using them at all, by editing the [[$:/config/zettelkasten/copyright/System]] tiddler, but you ''must do so in a way that is compatible with the MIT license and preserves the original copyright notice''. Doing this correctly requires background knowledge and some attention to detail, so if you are not familiar with open-source licensing, you are probably better off sticking with the defaults and adding a copyright notice using the text box above, or having a quick chat with someone who is more familiar.\n\nYou can change the copyright notice that appears in the footer of the public edition in [[$:/sib/Templates/Automatic/StoryRiverFooter]].\n\n\u003C/$details>\n\n!! Preview\n\nVisit [[CopyrightNotice]] to see what the notice will look like.\n\n\n\u003Cstyle>\ninput.sib-copyright-input {\n\twidth: 100%;\n}\n\u003C/style>"},
{"title":"$:/sib/GettingStarted/NextSteps","caption":"Next steps","created":"20210828133924602","creator":"soren","modified":"20210922163144199","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"Where do you go from here?\n\nI recommend starting by ''adding some notes''! Add a couple of tiddlers for the ideas rolling around in your head. Read a book, add a source tiddler for it, and link to it in some idea tiddlers.\n\nOnce you've gotten a few notes into the system, you will be in a good place to ''decide what elements of this edition you like and what things you'll want to change''. If you want to get into customizing the wiki and you don't have much experience with TiddlyWiki, check out [[Grok TiddlyWiki|https://groktiddlywiki.com/read]], a complete textbook and reference designed for learning how this stuff works from the ground up.\n\nAt any time, you can watch [[an hour-long walkthrough video|https://www.youtube.com/watch?v=9X_T-DVie8o]] showing the most important features of tzk.\n\nAt any time, you can click the ''tools button {{$:/core/images/theme-button}}'' on the page toolbar (upper-right corner of the wiki, right under the title) to access a wide variety of tools, settings, and documentation related to the Zettelkasten edition.\n\nIf you have questions, comments, or suggestions, please feel free to get in touch at `zettelkasten@sorenbjornstad.com`."},
{"title":"$:/sib/GettingStarted/ReferenceExplorer","caption":"Finding related content","created":"20210920161148251","creator":"soren","modified":"20210920161326799","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"{{ReferenceExplorer}}"},
{"title":"$:/sib/GettingStarted/ThingsToDo","caption":"Keeping track of things to do","created":"20210828132735971","creator":"soren","modified":"20210828133749250","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"A Zettelkasten is never complete and always full of new things you could work on and existing things you can improve. As such, tzk has a variety of tools for keeping track of what you might want to work on next, so you'll always be ready to do something useful whenever you have time to work.\n\nThese tools are gathered together on the ''Write'' tab of the sidebar.\n\n; Stubs\n: Tag a tiddler \u003C\u003Ctag Stub>> to indicate that you've decided this topic deserves a tiddler, but haven't had time to write much of significance about it yet. If I have an idea but no time to write about it, I commonly add a tiddler with just a title, or a title and a sentence or two explaining what would go in it, then tag it as a stub and save it.\n\n; Missing\n: All tiddlers that you've linked to but not created appear here. Just because you linked to a tiddler doesn't mean you //have// to create it -- often it's sufficient just to gather a list of things that link to that person, place, or idea, which works just fine without ever creating the tiddler -- but this list often contains things that could be promoted to stubs or full-blown tiddlers, so it's good to skim through it from time to time.\n\n; Needing attention\n: If you have a tiddler that obviously needs some work -- for instance, it no longer represents your opinion, it's full of errors, half of it consists of text you copied and pasted from somewhere else, and so on -- tag it \u003C\u003Ctag NeedsAttention>> to add it to this list.\n\n; Needing excision\n: The \u003C\u003Ctag NeedsExcision>> tag is a more specific version of //Needing attention// which indicates the tiddler is too long and should be [[broken out into atomic units|https://groktiddlywiki.com/read/#Slicing%20Up%20Content]]. For instance, if you took a bunch of notes on a book but left them sitting in the tiddler about the book rather than splitting them up into separate tiddlers for each idea, you might add this tag to the book tiddler as a reminder to come back and think more clearly about the boundaries between ideas.\n\n; To-do items\n: If you need to be more specific about what needs to be done in a tiddler than the on-or-off NeedsAttention tag allows, in the text field of that tiddler, link to `[[TODO]]` and follow the link with a sentence ending in a period. For instance, ``[[TODO]]: Find a reference for this claim.`` A link to the tiddler containing the todo and the text of the todo item will then appear in this tab.\n\n; Open questions\n: Similar to to-do items, tiddlers containing a link to `[[OpenQuestion]]` appear here. Open questions are ones that you don't know how to answer, but think are important and hope that with more study or life experience you might be able to understand better.\n\n; Tray\n: If you have some tiddlers you want to keep “front of mind,” but you don't want to keep them open in the story river, you can drag and drop them into this tab, where they'll stay until you manually remove them."},
{"title":"$:/sib/GettingStarted/Title","caption":"Title","created":"20210825150825394","creator":"soren","modified":"20210920133523652","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"\\define set-favicon-actions()\n\u003C$action-sendmessage $message=\"tm-rename-tiddler\" from={{{[[$:/Import]links[]first[]]}}} to=\"$:/favicon.ico\"/>\n\\end\n\n\\define favicon-cell()\n[img width=24 [$:/favicon.ico]]\n\u003C$navigator>\n\t\u003C$browse accept=\"ico,png,gif\"/>\n\u003C/$navigator>\n\u003C$list filter=\"[[$:/Import]plugin-type[import]]\">\n\t\u003C$button actions=\u003C\u003Cset-favicon-actions>>>\n\t\tchange favicon\n\t\t\u003C$action-sendmessage $message=\"tm-perform-import\" $param=\"$:/Import\"/>\n\t\u003C/$button>\n\u003C/$list>\n\\end\n\n\u003C!-- Thanks to Saq for helping figure out how to import/replace the favicon:\n https://talk.tiddlywiki.org/t/importing-a-tiddler-with-a-specific-name/680 -->\n\t\t \n\nLet's start with some basic information.\n\nWhat do you want to call your Zettelkasten? The title and subtitle will appear at the top of the sidebar and in your web browser's title bar.\n\n\u003C$set name=\"tv-auto-open-on-import\" value=\"no\">\n\u003C$navigator>\n\n|!Title |\u003C$edit-text tiddler=\"$:/SiteTitle\" tag=\"input\"/>|\n|!Subtitle |\u003C$edit-text tiddler=\"$:/SiteSubtitle\" tag=\"input\"/>|\n\nThe favicon appears next to the title in tabs, bookmarks, and other places throughout your web browser's interface. You can upload a new favicon in ICO, PNG, or GIF format.\n\n|!Favicon |\u003C\u003Cfavicon-cell>>|\n\n\n\u003C/$navigator>\n\u003C/$set>"},
{"title":"$:/sib/GettingStarted/Warning","caption":"WARNING and DISCLAIMER","created":"20210828134445553","creator":"soren","modified":"20210920133400209","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"''tzk should be considered alpha software.'' The underlying platform, TiddlyWiki, is extremely stable, and it is highly unlikely you will lose any data as a result of using tzk, nor will the system become obsolete or unusable in the near future. However, there may not be an obvious upgrade path to newer versions, I cannot guarantee support if you encounter problems, and the edition remains primarily focused on my specific needs.\n\nIn other words, it's //safe// to use tzk for your production Zettelkasten, but you should expect to have to dive into some system tiddlers to make the edition work the way you want, and you may have to do some manual merging and copy-pasting of tiddlers if you want to backport features that I add to tzk in the future to your wiki. Think of the current version of tzk as a piece of hardware that you bought: you get it as-is, and if you want changes or upgrades to it, you have to make them yourself. If you're not willing to take on that responsibility, please do not use tzk for real work.\n\n!! Why?\n\nAs I am still trying to figure out how to get the most value out of TiddlyWiki and my Zettelkasten, I need to preserve my ability to rapidly make changes to my tooling. Worrying about backwards compatibility, upgrades, supportability, and changing things so they work well for other users and not just me would require a significant portion of my development time and motivation, and I don't have that time to give at the moment. If I tried to supply these things, I wouldn't be able to publish this at all. (Ordinarily I would just keep the tools to myself until they were a bit more mature, but I have gotten so many curious people casting jealous looks at my [[public Zettelkasten|https://zettelkasten.sorenbjornstad.com]] that I'm making an exception.)"},
{"title":"$:/sib/GettingStarted/ZettelkastenCardTypes","caption":"Card types","created":"20210827233526864","creator":"soren","modified":"20210827233548929","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"{{ZettelkastenCardType}}"},
{"title":"$:/sib/gis/AddInfo","created":"20201129183646538","modified":"20201129184104788","tags":"","type":"text/vnd.tiddlywiki","text":"\u003Ctable>\n\u003Ctr>\n\t\u003Cth>Latitude, Longitude\u003C/th>\u003Ctd>\u003C$edit-text tag=input default=\"\" tiddler=\"$:/temp/AddValues\" field=\"latlong\"/>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n \u003Cth>Zoom\u003C/th>\u003Ctd>\u003C$edit-text tag=input default=\"\" tiddler=\"$:/temp/AddValues\" field=\"gis-zoom\"/>\u003C/td>\n\u003C/tr>\n\u003C/table>\n\n\u003C$vars\n lat={{{ [[$:/temp/AddValues]get[latlong]split[,]first[]trim[]] }}}\n\tlong={{{ [[$:/temp/AddValues]get[latlong]split[,]last[]trim[]] }}}>\n\u003C$button>\n\t\u003C$action-setfield $field=\"gis-lat\" $value=\u003C\u003Clat>>/>\n\t\u003C$action-setfield $field=\"gis-long\" $value=\u003C\u003Clong>>/>\n\t\u003C$action-setfield $field=\"gis-zoom\" $value={{$:/temp/AddValues!!gis-zoom}}/>\n\t\u003C$action-deletetiddler $tiddler=\"$:/temp/AddValues\"/>\n\tAdd\n\u003C/$button>\n\u003C/$vars>"},
{"title":"$:/sib/gis/DrivingDirections","caption":"Directions","created":"20201129175445792","creator":"soren","modified":"20210910154651732","modifier":"soren","tags":"$:/sib/gis/MappingTools","type":"text/vnd.tiddlywiki","text":"\\define dirUrl(lat, long) https://www.google.com/maps/embed/v1/directions?key=$(gmapsApiKey)$&origin=$(sourceLoc)$&destination=$(lat)$%2C$(long)$\n\n\u003C$list filter=\"[all[current]has[gis-lat]]\" variable=_>\n\u003Cdiv style=\"margin-bottom:1ex;\">\n\tDirections from \u003C$link to=\"PrivateMetadata\">home\u003C/$link> or: \u003C$edit-text tiddler=\"$:/temp/CurrentDirectionsSource\" tag=input default=\"\" size=56 />\n\u003C/div>\n\n\u003C$set name=\"directionsSource\" value={{{ [{$:/temp/CurrentDirectionsSource}!is[blank]encodeuri[]] ~[{PrivateMetadata##Address}encodeuri[]] }}}>\n\u003C$list filter=\"[\u003CdirectionsSource>!is[blank]]\" variable=_ emptyMessage=\"Please enter an address to start from, or set the `Address` index of the `PrivateMetadata` data tiddler to a default address.\">\n\u003C$vars\n gmapsApiKey={{$:/config/zettelkasten/gis/GMapsApiKey}}\n\tlat={{!!gis-lat}}\n\tlong={{!!gis-long}}\n\tsourceLoc=\u003C\u003CdirectionsSource>>>\n \u003Ciframe\n width=\"600\"\n height=\"450\"\n frameborder=\"0\"\n style=\"border:0\"\n src=\u003C\u003CdirUrl>>\n allowfullscreen>\u003C/iframe>\n\u003C/$vars>\n\u003C/$list>\n\u003C/$set>\n\n\u003C/$list>"},
{"title":"$:/sib/gis/Info","caption":"Info","created":"20201129181525887","modified":"20201129182049518","tags":"$:/sib/gis/MappingTools","type":"text/vnd.tiddlywiki","text":"|!Address|{{!!gis-address}}|\n|!Latitude|{{!!gis-lat}}|\n|!Longitude|{{!!gis-long}}|\n|!GMaps zoom level|{{!!gis-zoom}}|"},
{"title":"$:/sib/gis/MappingTools","created":"20201129175820541","creator":"soren","description":"Show the mapping tools available for place tiddlers with location information, or prompt the user to add such information.","list":"$:/sib/gis/SatelliteMap $:/sib/gis/DrivingDirections $:/sib/gis/Info","modified":"20210910154242175","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers tagged \u003C\u003Ctag Place>>.","type":"text/vnd.tiddlywiki","text":"\\define no-gis-info()\nThere is no GIS information available for this place, but you can add it (try from [[Google Maps|https://www.google.com/maps]]):\n\n{{||$:/sib/gis/AddInfo}}\n\\end\n\n\\define no-api-key()\nTo use the mapping tools on Place tiddlers, you must configure a Maps Embed API key in Google Cloud Platform (GCP), then set the text field of the $:/config/zettelkasten/gis/GMapsApiKey tiddler to this API key. The Maps Embed API is free to use. Documentation on the API may be [[found here|https://developers.google.com/maps/documentation/embed/get-started]].\n\nIf you don't want to see this message again, disable the //GIS// [[feature flag|$:/sib/Tools/FeatureFlags]].\n\\end\n\n\u003C$list filter=\"[all[current]tag[Place]]\" variable=_>\n\u003C$list filter=\u003C\u003Cff GisTools>> variable=_>\n\u003C$list filter=\"[all[current]has[gis-lat]]\" emptyMessage=\u003C\u003Cno-gis-info>> variable=_>\n\u003C$list filter=\"[{$:/config/zettelkasten/gis/GMapsApiKey}!is[blank]]\" emptyMessage=\u003C\u003Cno-api-key>> variable=\"gmapsApiKey\">\n\n\u003C\u003Ctabs \n\ttabsList:\"[list[$:/sib/gis/MappingTools]]\"\n\tdefault:\"$:/sib/gis/SatelliteMap\"\n\tretain:yes\n>>\n\n\u003C/$list>\n\u003C/$list>\n\u003C/$list>\n\u003C/$list>"},
{"title":"$:/sib/gis/SatelliteMap","caption":"Satellite","created":"20201129174511282","creator":"soren","modified":"20210910152248350","modifier":"soren","tags":"$:/sib/gis/MappingTools","type":"text/vnd.tiddlywiki","text":"\\define mapUrl() https://www.google.com/maps/embed/v1/view?key=$(gmapsApiKey)$&zoom=$(zoom)$&center=$(lat)$%2C$(long)$&maptype=satellite\n\n\\define changebutton(operation, faClass)\n\t\u003C$button class=\"tc-btn-invisible tc-tiddlylink\">\n\t\t\u003C$action-setfield $field=\"gis-zoom\" $value={{{ [{!!gis-zoom}$operation$[1]] }}}/>\n\t\t\u003Ci class=\"fa $faClass$\"/>\n\t\u003C/$button>\n\\end\n\n\u003C$list filter=\"[all[current]has[gis-lat]]\" variable=_>\n\u003C$vars\n\tlat={{!!gis-lat}}\n\tlong={{!!gis-long}}\n\tzoom={{!!gis-zoom}}>\n\t\n \u003Ciframe\n width=\"600\"\n height=\"450\"\n frameborder=\"0\"\n style=\"border:0\"\n src=\u003C\u003CmapUrl>>\n allowfullscreen>\n\t\t\u003C/iframe>\n\u003C/$vars>\nEdit map zoom: \u003C\u003Cchangebutton add fa-search-plus>> \u003C\u003Cchangebutton subtract fa-search-minus>>\n\u003C/$list>\n\n\u003C!--\n\u003C$list filter=\"[all[current]!has[gis-lat]]\" variable=_>\n Please add `gis-lat`, `gis-long`, and `gis-zoom` fields to this tiddler to display a map.\n\u003C/$list>\n-->"},
{"title":"$:/sib/gui/KillPhrases","created":"20210731165017938","creator":"soren","description":"Configure phrases that should cause public builds to fail.","modified":"20210920155725847","modifier":"soren","tags":"Tool","tooltype":"configuration","type":"text/vnd.tiddlywiki","text":"//Kill phrases// are an extra measure of security to ensure you don't accidentally publish something that was supposed to be private. After building the public wiki, if the source of any tiddler therein contains any of the words or phrases below in any field, the build will fail and point out the location where a kill phrase ended up in the output.\n\nEnter kill phrases below, one per line.\n\n\u003Cdiv class=\"kill-phrase-entry\">\n\u003C$edit-text\n tiddler=\"$:/config/zettelkasten/Build/KillPhrases\"\n\tdefault=\"\"\n\t/>\n\u003C/div>\n\nEach line is treated as a Python-dialect regular expression ([[documentation|https://docs.python.org/3/library/re.html#regular-expression-syntax]] of this dialect).\n\nKill phrases are ''case-sensitive''. If you want to kill the build on multiple cases of a word, use a //character class// (`[sS]ecret` to allow both `secret` and `Secret`), or begin the phrase with `(?i)` to make the entire regular expression case-insensitive.}\n\nKill phrases ''match substrings'': that is, “kill” will also match “skillet” and “killdeer”. If you want to match only a whole word, use `\\b` (a //word boundary// marker) before and after the word, like `\\bkill\\b`. (This still ignores punctuation, so it will find `kill,` -- but that's probably what you want.)\n\nYour list of kill phrases will not be published so long as you do not alter the build filter (if you do, watch out -- system tiddlers, including the one which stores your kill phrases, are published by default).\n\n\u003Cstyle>\ndiv.kill-phrase-entry textarea {\n\twidth: 100%;\n}\n\u003C/style>"},
{"title":"$:/sib/gui/SidebarTabSelector","created":"20210731162946420","creator":"soren","description":"Choose which top-level tabs you want to show in the sidebar in your public and private editions.","modified":"20210920155630850","modifier":"soren","tags":"Tool","tooltype":"configuration","type":"text/vnd.tiddlywiki","text":"{{!!description}}\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth style=\"min-width: 6em;\">Tab\u003C/th>\n\t\t\u003Cth>Private\u003C/th>\n\t\t\u003Cth>Public\u003C/th>\n\t\t\u003Cth>Description\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n\t\t\u003C$list filter=\"[all[current]addprefix[$:/config/zettelkasten/SideBar/Visibility/]]\" variable=\"vizTiddler\">\n\t\t\t\u003Ctr>\n\t\t\t\t\u003Ctd>\u003C$link to=\u003C\u003CcurrentTiddler>>>{{!!caption}}\u003C/$link>\u003C/td>\n\t\t\t\t\u003Ctd>\u003C$checkbox tiddler=\u003C\u003CvizTiddler>> field=\"private\" checked=\"yes\" unchecked=\"no\"/>\u003C/td>\n\t\t\t\t\u003Ctd>\u003C$checkbox tiddler=\u003C\u003CvizTiddler>> field=\"public\" checked=\"yes\" unchecked=\"no\"/>\u003C/td>\n\t\t\t\t\u003Ctd>\u003C$transclude field=\"description\">(//built-in tab//)\u003C/$transclude>\u003C/td>\n\t\t\t\u003C/tr>\n\t\t\u003C/$list>\n\t\u003C/$list>\n\u003C/table>"},
{"title":"$:/sib/indite/ChildListItemTemplate","created":"20210415020141514","modified":"20210421012848006","tags":"","type":"text/vnd.tiddlywiki","text":"\u003C$link to=\u003C\u003CcurrentTiddler>>/> ({{!!indite-class}})"},
{"title":"$:/sib/indite/InditeChildren","created":"20210410004529968","creator":"soren","modified":"20210924153927403","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"\\define copy-me() \u003C$button message=\"tm-copy-to-clipboard\" param={{!!text}} class=\"tc-btn-invisible tc-tiddlylink\">wikitext\u003C/$button>\n\n\\define copy-rendered()\n\u003C$set name=\"hideNotes\" value=\"yes\">\n\u003C$wikify name=\"copyText\" text=\"{{!!text}}\" output=\"html\" mode=\"block\">\n\t\t\u003C$button message=\"tm-copy-to-clipboard\" param=\u003C\u003CcopyText>> class=\"tc-btn-invisible tc-tiddlylink\">html\u003C/$button>\n\u003C/$wikify>\n\u003C/$set>\n\\end\n\n\\define copies()\ncopy \u003C\u003Ccopy-me>> · \u003C\u003Ccopy-rendered>>\n\\end\n\n\\define editmode()\n\u003C$radio field=\"editmode\" value=\"view\">view\u003C/$radio>&nbsp;\n\u003C$radio field=\"editmode\" value=\"edit\">edit\u003C/$radio>&nbsp;\n\u003C$radio field=\"editmode\" value=\"both\">side-by-side\u003C/$radio>\n\\end\n\n\\define remove-action() \u003C$action-listops $tiddler=\u003C\u003ClistingTiddler>> $filter=\"[\u003ClistingTiddler>get[list]enlist-input[]remove\u003CcurrentTiddler>]\"/>\n\n\\define remove() \u003C$button class=\"tc-btn-invisible tc-tiddlylink\" actions=\u003C\u003Cremove-action>>>remove\u003C/$button>\n\n\\define move-up-action() \u003C$action-listops $tiddler=\u003C\u003ClistingTiddler>> $filter=\"[\u003ClistingTiddler>get[list]enlist-input[]]\"\n\\define move-down-action() \u003C$action-listops $tiddler=\u003C\u003ClistingTiddler>> $filter=\"[\u003ClistingTiddler>get[list]enlist-input[]]\"\n\n\\define moves() \u003C$button class=\"tc-btn-invisible tc-tiddlylink\" actions=\u003C\u003Cmove-up-action>>>up\u003C/$button> · \u003C$button class=\"tc-btn-invisible tc-tiddlylink\" actions=\u003C\u003Cmove-down-action>>>down\u003C/$button>\n\n\\define tidblock(typeName, viewBlock:\"\"\"\u003C$transclude mode=\"block\"/>\"\"\")\n\t\u003C$set name=\"thewidth\" value={{{ [all[current]editmode[both]then[indite-halfwidth]else[indite-fullwidth]] }}}>\n\t\t\u003C$list filter=\"[\u003ChideNotes>match[yes]then[]else[yes]!is[blank]]\" variable=_>\n\t\t\t\u003Ctitle-block>\n\t\t\t\t\u003C\u003C__typeName__>>: \u003C$link />\u003Cbr>\n\t\t\t\t\u003C\u003Cremove>> · \u003C\u003Cmoves>>\u003Cbr>\n\t\t\t\t\u003C\u003Ccopies>>\u003Cbr>\n\t\t\t\t\u003C\u003Ceditmode>>\n\t\t\t\u003C/title-block>\n\t\t\u003C/$list>\n\t\t\u003C$list filter=\"[all[current]editmode[view]] [all[current]editmode[both]] [all[current]!has[editmode]]\">\n\t\t\t\u003Cdiv class={{{ [[indite-sbs-viewer]addsuffix[ ]addsuffix\u003Cthewidth>] }}}>\n\t\t\t\t$viewBlock$\n\t\t\t\u003C/div>\n\t\t\u003C/$list>\n\t\t\n\t\t\u003C$list filter=\"[\u003Ctr-rendering>!match[yes]]\" variable=_>\n\t\t\u003C$list filter=\"[all[current]editmode[edit]] [all[current]editmode[both]]\">\n\t\t\t\u003Cdiv class={{{ [[indite-sbs-editor]addsuffix[ ]addsuffix\u003Cthewidth>] }}}>\n\t\t\t\t\u003C$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\"/>\n\t\t\t\u003C/div>\n\t\t\u003C/$list>\n\t\t\u003C/$list>\n\t\u003C/$set>\n\\end\n\n\\define add-here-action() \u003C$action-listops $subfilter=\"[enlist{!!list}insertbefore:childTiddler\u003CactionTiddler>]\"/>\n\n\u003C$set name=\"listingTiddler\" value=\u003C\u003CcurrentTiddler>>>\n\u003C$list filter={{!!list}} variable=\"childTiddler\">\n\t\u003Ctitle-block>\n\t\u003C$droppable actions=\u003C\u003Cadd-here-action>>>(//drop to insert tiddler here//)\u003C/$droppable>\n\t\u003C/title-block>\n\t\n\t\u003C$list filter=\"[\u003CchildTiddler>indite-class[chapter]]\">\n\t\t\u003C\u003Ctidblock \"Chapter\">>\n\t\u003C/$list>\n\t\n\t\u003C$list filter=\"[\u003CchildTiddler>indite-class[epigraph]]\">\n\t\t\u003C\u003Ctidblock \"Epigraph\" \"\"\"\u003Cblockquote>\u003C$transclude mode=\"block\"/>\u003C/blockquote>\"\"\">>\n\t\u003C/$list>\n\t\n\t\u003C$list filter=\"[\u003CchildTiddler>indite-class[scene]]\">\n\t\t\u003C\u003Ctidblock \"Scene\">>\n\t\u003C/$list>\n\t\n\t\u003C$list filter=\"[\u003CchildTiddler>!has[indite-class]]\">\n\t\t\u003C\u003Ctidblo
{"title":"$:/sib/indite/macros","created":"20210410020513999","modified":"20210410031557381","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define indite-note(txt)\n\t\u003C$list filter=\"[\u003ChideNotes>match[yes]then[]else[yes]!is[blank]]\" variable=_>\n\t\t\u003Caside>$txt$\u003C/aside>\n\t\u003C/$list>\n\\end"},
{"title":"$:/sib/indite/Sidebar","created":"20210410005234756","modified":"20210410005104788","tags":"","type":"text/vnd.tiddlywiki","text":"This is the sidebar."},
{"title":"$:/sib/indite/Stylesheet","created":"20210410003437115","modified":"20210415015805553","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"div[data-tags*=\"Indite\"] div.tc-tiddler-body {\n\tdisplay: none;\n}\n\ndiv.indite-text {\n\tfont-family: \"Bitstream Charter\", Garamond, Georgia, serif;\n\tfont-size: 16px;\n\tmax-width: 80rem;\n\twidth: 80%;\n\t/*margin-left: 30%;*/\n\tmargin-left: 20%;\n}\n\ndiv.indite-text > p > div.indite-halfwidth {\n\twidth: 49%;\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\ndiv.indite-text > p > div.indite-fullwidth {\n\twidth: 100%;\n}\n\ndiv.indite-text > p > div.indite-fullwidth.indite-sbs-viewer {\n\tmax-width: 40em;\n\tmargin-left: 2em;\n\tmargin-right: auto;\n}\n\ndiv.indite-text div p:first-child {\n\tmargin-top: 0;\n\tpadding-top: 0;\n}\n\ndiv.indite-text div.indite-sbs-editor div {\n\tfont-size: 12px;\n}\n\n.hide-notes title-block, .hide-notes aside {\n\tdisplay: none;\n}\n\ntitle-block, aside {\n\tfont-size: 12px;\n\tfont-family: \"Bitstream Vera Sans\", \"Bitstream Sans\", Arial, sans-serif;\n\tvertical-align: top;\n\tdisplay: block;\n\tfloat: left;\n\t/*position: absolute;*/\n\tpadding-left: 2rem;\n\tpadding-right: 1rem;\n\tmargin-left: -50%;\n\t/*left: 0;*/\n\twidth: 50%;\n\ttext-align: right;\n\tlist-style-type: none;\n\tclear: both;\n\tmargin-bottom: 1rem;\n}\n"},
{"title":"$:/sib/indite/ViewTemplate","caption":"Indite view template","created":"20210410004824597","creator":"soren","description":"Tiddlers that are part of the Indite writing system (under development) hide the normal view template via CSS and use this one instead.","modified":"20210924153731019","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers tagged \u003C\u003Ctag Indite>>.","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[all[current]tag[Indite]]\" variable=_>\n\n\u003C$reveal tag=\"div\" class=\"indite-body\" type=\"nomatch\" stateTitle=\u003C\u003Cfolded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n\u003Cdiv style=\"border: 1px solid;\">\n\u003C$count filter=\"[all[current]list[]]\"/> children (drag and drop to add or reorder):\n\n\u003C$macrocall $name=\"list-links-draggable\" tiddler=\u003C\u003CcurrentTiddler>> itemTemplate=\"$:/sib/indite/ChildListItemTemplate\"/>\n\n\u003C/div>\n\n\u003Cdiv class=\"indite-text\">\n\n\u003C$transclude mode=\"block\"/>\n\n\u003C/div>\n\n\u003C/$reveal>\n\n\u003C/$list>"},
{"title":"$:/sib/js/excise-private-chunk.js","text":"/*\\\ntitle: $:/sib/js/excise-private-chunk.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new private-chunk tiddler.\n\nSIB 2021-05-21: Copied from the standard excise operation and modified as needed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excisePrivateChunk\"] = 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 = this.wiki.generateNewTitle(editTiddlerTitle + \"/p\");\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: \"PrivateChunk\"\n\t\t}\n\t));\n\toperation.replacement = \"{{\" + excisionTitle + \"||PrivateChunk}}\";\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})();","type":"application/javascript","module-type":"texteditoroperation","created":"20210522033305614","modified":"20210522034730351","tags":""},
{"title":"$:/sib/js/ListSubscriptionsWidget","text":"/*\\\ntitle: action-refreshsubscriptions\ntype: application/javascript\nmodule-type: widget\nPull details on all subscriptions for a given user into the TiddlyWiki.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nlet ENDPOINT = \"https://0tkdn6wpl9.execute-api.us-east-1.amazonaws.com/default/SubscribeToZettelkastenTiddler\";\n\nfunction gfv(id) {\n\t\treturn document.getElementById(id).value\n}\n\nfunction sendRequest(widget, url, params, callback) {\n\t\tlet xhr = new XMLHttpRequest();\n\t\txhr.open('POST', url, true);\n\t\txhr.responseType = 'json';\n\t\txhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\n\t\txhr.onload = () => {\n\t\t\t\tlet status = xhr.status;\n\t\t\t\tif (status == 200) {\n\t\t\t\t\t\tconsole.log(xhr.response);\n\t\t\t\t\t\tif (xhr.response[\"status\"] == \"success\") {\n\t\t\t\t\t\t\t\tcallback(null, xhr.response, widget);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcallback(status, xhr.response, widget);\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\tcallback(status, xhr.response);\n\t\t\t\t}\n\t\t};\n\n\t\t// Turn the data object into an array of URL-encoded key/value pairs.\n\t\t// https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest\n\t\tlet urlEncodedDataPairs = [], name;\n\t\tfor (name in params) {\n\t\t\t\turlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(params[name]));\n\t\t}\n\t\txhr.send(urlEncodedDataPairs.join('&'))\n};\n\nfunction getSubscriptions(widget, user, token) {\n\t\tvar params = new Object();\n\t\tparams.user = user;\n\t\tparams.token = token;\n\t\tparams.operation = \"list\";\n\n\t\tsendRequest(widget, ENDPOINT, params, (err, data, widget) => {\n\t\t\t\tif (err != null) {\n\t\t\t\t\t\tif (data['reason'] === \"Invalid token\") {\n\t\t\t\t\t\t\talert(\"Your access code is invalid or missing. Please choose 'send a new one' and try the new access code you are emailed.\")\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(\"Unknown error viewing subscriptions. Please contact zettelkasten@sorenbjornstad.com for assistance.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\t\tvar subs = data['subscribed_tiddlers'];\n\t\t\t\t\t\tvar tiddlerList = \"[[\" + subs.join(\"]] [[\") + \"]]\";\n\t\t\t\t\t\twidget.wiki.setText(\"$:/temp/Subscriptions\", \"list\", undefined, tiddlerList);\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t});\n}\n\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FeedbackWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFeedbackWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFeedbackWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nFeedbackWidget.prototype.execute = function() {\n\tthis.user = this.getAttribute(\"user\");\n\tthis.token = this.getAttribute(\"token\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nFeedbackWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"name\"]) {\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*/\nFeedbackWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this, options = {};\n\treturn getSubscriptions(self, this.user, this.token);\n};\n\nexports[\"action-refreshsubscriptions\"] = FeedbackWidget;\n\n})();","type":"application/javascript","module-type":"widget","created":"20210612152514906","modified":"20210612171809654","tags":""},
{"title":"$:/sib/js/SendFeedbackWidget","text":"/*\\\ntitle: action-sendfeedback\ntype: application/javascript\nmodule-type: widget\nAction widget to call an API.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nlet ENDPOINT = \"https://351uof5dxh.execute-api.us-east-1.amazonaws.com/default/startZettelkastenConversation\";\n\nfunction gfv(id) {\n\t\treturn document.getElementById(id).value\n}\n\nfunction sendRequest(url, params, callback) {\n\t\tlet xhr = new XMLHttpRequest();\n\t\txhr.open('POST', url, true);\n\t\txhr.responseType = 'json';\n\t\txhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\n\t\txhr.onload = () => {\n\t\t\t\tlet status = xhr.status;\n\t\t\t\tif (status == 200) {\n\t\t\t\t\t\tconsole.log(xhr.response);\n\t\t\t\t\t\tif (xhr.response[\"status\"] == \"success\") {\n\t\t\t\t\t\t\t\tcallback(null, xhr.response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcallback(status, xhr.response);\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\tcallback(status, xhr.response);\n\t\t\t\t}\n\t\t};\n\n\t\t// Turn the data object into an array of URL-encoded key/value pairs.\n\t\t// https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest\n\t\tlet urlEncodedDataPairs = [], name;\n\t\tfor (name in params) {\n\t\t\t\turlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(params[name]));\n\t\t}\n\t\txhr.send(urlEncodedDataPairs.join('&'))\n};\n\nfunction submitFeedback(tiddler, email, comment) {\n\t\tvar params = new Object();\n\t\tparams.tiddler = tiddler\n\t\tparams.email = email\n\t\tparams.comment = comment\n\n\t\tsendRequest(ENDPOINT, params, (err, data) => {\n\t\t\t\tif (err != null) {\n\t\t\t\t\t\talert(\"Error sending mail: \" + data.reason);\n\t\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\t\talert(\"Thanks for getting in touch! You'll receive a copy of your message and I will write back to you when I am able.\");\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t});\n}\n\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FeedbackWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFeedbackWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFeedbackWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nFeedbackWidget.prototype.execute = function() {\n\tthis.tiddlerName = this.getAttribute(\"tiddler\");\n\tthis.email = this.getAttribute(\"email\");\n\tthis.comment = this.getAttribute(\"comment\");\n\tthis.debuginfo = this.getAttribute(\"debuginfo\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nFeedbackWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"name\"]) {\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*/\nFeedbackWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\treturn submitFeedback(this.tiddlerName, this.email, this.comment);\n};\n\nexports[\"action-sendfeedback\"] = FeedbackWidget;\n\n})();","type":"application/javascript","module-type":"widget","created":"20210102234204312","modified":"20210608025558775","tags":""},
{"title":"$:/sib/js/SubscriptionManagementWidget","text":"/*\\\ntitle: action-managesubscription\ntype: application/javascript\nmodule-type: widget\nAction widget to call an API.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nlet ENDPOINT = \"https://0tkdn6wpl9.execute-api.us-east-1.amazonaws.com/default/SubscribeToZettelkastenTiddler\";\n\nfunction gfv(id) {\n\t\treturn document.getElementById(id).value\n}\n\nfunction sendRequest(url, params, callback) {\n\t\tlet xhr = new XMLHttpRequest();\n\t\txhr.open('POST', url, true);\n\t\txhr.responseType = 'json';\n\t\txhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\n\t\txhr.onload = () => {\n\t\t\t\tlet status = xhr.status;\n\t\t\t\tif (status == 200) {\n\t\t\t\t\t\tconsole.log(xhr.response);\n\t\t\t\t\t\tif (xhr.response[\"status\"] == \"success\") {\n\t\t\t\t\t\t\t\tcallback(null, xhr.response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcallback(status, xhr.response);\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\tcallback(status, xhr.response);\n\t\t\t\t}\n\t\t};\n\n\t\t// Turn the data object into an array of URL-encoded key/value pairs.\n\t\t// https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest\n\t\tlet urlEncodedDataPairs = [], name;\n\t\tfor (name in params) {\n\t\t\t\turlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(params[name]));\n\t\t}\n\t\txhr.send(urlEncodedDataPairs.join('&'))\n};\n\nfunction subscribe(tiddler, user, token, operation) {\n\t\tvar params = new Object();\n\t\tparams.tiddler = tiddler;\n\t\tparams.user = user;\n\t\tparams.token = token;\n\t\tparams.operation = operation;\n\n\t\tsendRequest(ENDPOINT, params, (err, data) => {\n\t\t\t\tif (err != null) {\n\t\t\t\t\tif (data['reason'] == \"Invalid token\") {\n\t\t\t\t\t\talert(\"Your access code is invalid or missing. Please choose 'send a new one' and try the new access code you are emailed.\")\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(\"Unknown error managing subscriptions. Please contact zettelkasten@sorenbjornstad.com for assistance.\");\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log(\"Subscription operation returned success.\");\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t});\n}\n\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FeedbackWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFeedbackWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFeedbackWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nFeedbackWidget.prototype.execute = function() {\n\tthis.tiddlerName = this.getAttribute(\"tiddler\");\n\tthis.user = this.getAttribute(\"user\");\n\tthis.token = this.getAttribute(\"token\");\n\tthis.operation = this.getAttribute(\"operation\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nFeedbackWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"name\"]) {\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*/\nFeedbackWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\treturn subscribe(this.tiddlerName, this.user, this.token, this.operation);\n};\n\nexports[\"action-managesubscription\"] = FeedbackWidget;\n\n})();","type":"application/javascript","module-type":"widget","created":"20210612035906052","modified":"20210612171757426","tags":""},
{"title":"$:/sib/js/thirdparty/TiddlyTools/Time/action-timeout.js","text":"/*\\\ntitle: action-timeout.js\ntype: application/javascript\nmodule-type: widget\nauthor: Eric Shulman elsdesign@gmail.com\nrevision: 1.4\n\n$action-timeout invokes actions once after a specified delay, or repeatedly at a specified interval\n\n\\*/\n\n(function(){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar TimeoutWidget= function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\nTimeoutWidget.prototype = new Widget();\nTimeoutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\nTimeoutWidget.prototype.execute = function() {\n\tthis.delay = this.getAttribute(\"delay\", \"1000\");\n\tthis.interval = this.getAttribute(\"interval\",\"1000\");\n\tthis.actions = this.getAttribute(\"actions\", \"\");\n};\nTimeoutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length > 0) { this.refreshSelf(); return true; }\n\treturn this.refreshChildren(changedTiddlers);\n};\nTimeoutWidget.prototype.allowActionPropagation = function() { return false; };\nTimeoutWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self=this;\n\tif (self.delay) setTimeout( function() { self.invokeActionString(self.actions,self,event); }, self.delay);\n\tif (self.interval) setInterval(function() { self.invokeActionString(self.actions,self,event); }, self.interval);\n\treturn true; // Action was invoked\n};\nexports[\"action-timeout\"] = TimeoutWidget;\n})();","type":"application/javascript","module-type":"widget","author":"Eric Shulman elsdesign@gmail.com","revision":"1.4","created":"20150728060155235","modified":"20210627164432078","tags":""},
{"title":"$:/sib/Macros/cb","created":"20210807150635941","description":"Create a reference to an entry in Chrono Book, linking to the ChronoBook page and showing the UOF (Unified Occurrence Format) afterwards.","example":"\u003C\u003Ccb \"10.15\">>","modified":"20210807150453524","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define cb(uof) [[CB|ChronoBook]] $uof$"},
{"title":"$:/sib/Macros/check-item","created":"20210626162736737","description":"Create a single item on a persistent checklist. State for the checklist in a given tiddler is stored in a data tiddler called $:/checkify/TiddlerName.","example":"\u003Cdiv class=\"checklist\">\u003C\u003Ccheck-item One>>\u003C\u003Ccheck-item Two>>\u003C\u003Ccheck-item Three id:3>>\u003C/div>","modified":"20210626164153871","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\n\\define check-item(text, id:\"\")\n\u003C$set name=\"checkbox-index\" value={{{ [\u003C__id__>!is[blank]] ~[\u003C__text__>] }}}>\n\u003C$set name=\"tiddler-key\" value={{{ [all[current]!is[draft]] ~[all[current]get[draft.of]] }}}>\n\t\u003C$checkbox tiddler={{{ [[$:/checkify/]addsuffix\u003Ctiddler-key>] }}} index=\u003C\u003Ccheckbox-index>> checked=\"yes\" unchecked=\"no\" default=\"no\">\n\t\t\u003C\u003C__text__>>\n\t\u003C/$checkbox>\n\u003C/$set>\n\u003C/$set>\n\\end"},
{"title":"$:/sib/Macros/clarify","created":"20210522021311753","description":"Insert an empty div that clears any floats. Useful after large images, or to separate blockquotes using the `>` syntax.","example":"\u003C\u003Cfloat-image \"freezer-example.jpg\">>Text wrapping beside the float \u003C\u003Cclarify>>Text forced after the float by clarification.","modified":"20210622002720372","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define clarify() \u003Cdiv class=\"clarify\"/>"},
{"title":"$:/sib/Macros/colorsplotch","created":"20210522022802823","description":"Display a small box of color, the color being any CSS color. This macro usually only works properly at the beginning of a line.","example":"\u003C\u003Ccolorsplotch \"#ffffff\">> White","modified":"20210523135019901","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define colorsplotch(col) \u003Cdiv class=\"color-splotch\" style=\"background: $col$;\">"},
{"title":"$:/sib/Macros/ff","created":"20210622002240940","description":"Transclude a filter expression that returns `yes` if the specified [[feature flag|$:/sib/Tools/FeatureFlags]] is enabled for the current edition, and nothing otherwise.","example":"\u003C$list filter=\u003C\u003Cff ViewerPublicLine>> variable=_ emptyMessage=\"The viewer public line is off in this edition.\">The viewer public line is on in this edition. Transclude it here.\u003C/$list>","modified":"20210825145522659","modifier":"soren","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define ff(tid) [[$:/config/zettelkasten/FeatureFlags/$tid$]get{$:/config/sib/CurrentEditionPublicity}] -[[no]]"},
{"title":"$:/sib/Macros/float-image","created":"20210510222933926","description":"Show an image floated to the side of the text of a tiddler. This macro is often used with the `clarify` macro, which forces further content to come after the float.","example":"\u003C\u003Cfloat-image \"freezer-example.jpg\" width:200 side:left>> Text next to the float. \u003C\u003Cclarify>>","modified":"20210523135143792","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define float-image(tiddler, width:\"400\", side:\"right\")\n\t[img width=$width$ class=\"$side$-float\" [$tiddler$]]\n\\end"},
{"title":"$:/sib/Macros/fnote","created":"20210719234454927","description":"Create a footnote at the current location. Based on Refnotes (https://kookma.github.io/TW-Refnotes/), but doesn't use the plugin.","example":"This is my body text.\u003C\u003Cfnote \"This is my footnote.\">>","modified":"20210731165949531","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define fnote(note)\n\u003Cdiv class=\"refnotes-tooltip refnotes-footnote\">\u003Cdiv class=\"refnotes-tooltiptext\">$note$\u003C/div>\u003C/div>\n\\end"},
{"title":"$:/sib/Macros/privateperson","created":"20210522022034880","creator":"soren","description":"Show the provided string of initials, linking to the `PrivatePerson` tiddler. Ordinarily not used in the private Zettelkasten; names of people whose tiddlers are not public may be automatically replaced with calls to this macro by the build process for the public wiki.","example":"\u003C\u003Cprivateperson \"R.A.B.\">>","modified":"20210828135531817","modifier":"soren","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define privateperson(initials) //[[$initials$|PrivatePerson]]//"},
{"title":"$:/sib/Macros/rt","created":"20210522020717636","description":"Create a web link to an item in [[RandomThoughts]], with the link text \"RT #whatever\".","example":"\u003C\u003Crt 12345>>","modified":"20210523134724295","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define rt(refnum)\n[[RT|RandomThoughts]] [[$refnum$|https://randomthoughts.sorenbjornstad.com/#$refnum$]]\n\\end"},
{"title":"$:/sib/Macros/speaker","created":"20210522025359296","description":"Create a line of dialogue. To be used inside a div with the `dialogue` class.","example":"\u003Cdiv class=\"dialogue\">\u003C\u003Cspeaker \"Mother\" \"Did you look for cars before you ran across?\">>\u003C\u003Cspeaker Girl \"Nope. I just ran!\">>\u003C/div>","modified":"20210523135210957","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define speaker(name, txt) ''$name$:''&ensp;$txt$\u003Cbr>"},
{"title":"$:/sib/Macros/star-rating","created":"20210817143607812","description":"Show a rating out of 5 stars, with filled stars up until the argument and empty stars to fill out the total of 5.","example":"\u003C\u003Cstar-rating 4>>","modified":"20210817143846288","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define open-star() \u003Ci class=\"far fa-star\"/>\n\\define filled-star() \u003Ci class=\"fa fa-star\"/>\n\n\\define star-rating(stars) \u003C$list filter=\"[range\u003C__stars__>]\" variable=_>\u003C\u003Cfilled-star>>\u003C/$list>\u003C$set name=\"remainder\" value={{{ [[5]subtract\u003C__stars__>] }}}>\u003C$list filter=\"[range\u003Cremainder>]\" variable=_>\u003C\u003Copen-star>>\u003C/$list>\u003C/$set>\n"},
{"title":"$:/sib/Macros/subreddit","created":"20210522021038565","description":"Create a web link to a named subreddit, with the link text \"/r/yoursubreddit\".","example":"\u003C\u003Csubreddit TiddlyWiki5>>","modified":"20210523135249615","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define subreddit(name) [[/r/$name$|https://www.reddit.com/r/$name$/]]"},
{"title":"$:/sib/MediaRating/average","caption":"average","color":"yellow","created":"20210606220650099","modified":"20210606221147494","section":"main","stackorder":"30","tags":"","type":"text/vnd.tiddlywiki","text":"The work is entertaining or useful in some way and is worth working through quickly if the subject matter / summary interests you (or maybe slowly if it's primarily for entertainment purposes and this is more entertaining). It is not difficult to understand, unless perhaps you are unfamiliar with the subject, and there is little reason to come back to it again."},
{"title":"$:/sib/MediaRating/classic","caption":"classic","color":"gray","created":"20210606230345519","modified":"20210606230507495","section":"auxiliary","stackorder":"3","tags":"","type":"text/vnd.tiddlywiki","text":"I cannot, on my own subjective judgment at this time, countenance giving this work a rating of “good” or above, but because the work has stuck around for so long and is so well-known, I assume there must be something to it, so I compromise by assigning this status. I may come back to it later and see if I like it better."},
{"title":"$:/sib/MediaRating/Display","created":"20210606221940244","creator":"soren","description":"Show the [[rating|MediaRating]] of the current source tiddler, if any. The status is editable in the private edition.","modified":"20210920193209324","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All non-system tiddlers tagged `Source`. (Unlike the source details box, this doesn't go on sinks because I don't claim to be capable of rating my own work!)","type":"text/vnd.tiddlywiki","text":"\\define color-style() color: $(itemColor)$;\n\n\u003C$list filter=\u003C\u003Cff MediaRating>> variable=_>\n\u003C$list filter=\"[all[current]!is[system]]\">\n\u003C$list filter=\"[all[current]tag[Source]]\" variable=_>\n\n\u003Cdiv style=\"float: right; vertical-align: center;\">\n\u003C$list filter=\"[[$:/config/sib/IsPublicEdition]text[true]]\" variable=_>\n\t\u003C$link to=\"MediaRating\">\u003Cspan style={{{ [prefix[$:/sib/MediaRating/]caption{!!rating}get[color]addprefix[color: ]addsuffix[;]] }}}>rating\u003C/span>\u003C/$link>:\n\t\u003C$select field=\"rating\" default=\"\">\n\t\t\u003C$list filter=\"[prefix[$:/sib/MediaRating]has[caption]!nsort[stackorder]]\">\n\t\t\t\u003C$set name=\"itemColor\" value={{!!color}}>\n\t\t\t\t\u003Coption style=\u003C\u003Ccolor-style>> value={{!!caption}}>{{!!caption}}\u003C/option>\n\t\t\t\u003C/$set>\n\t\t\u003C/$list>\n\t\u003C/$select>\n\u003C/$list>\n\u003C$list filter=\"[[$:/config/sib/IsPublicEdition]!text[true]]\" variable=_>\n\u003C$list filter=\"[all[current]has[rating]]\">\n\t[[rating|MediaRating]]: \u003Cspan style={{{ [prefix[$:/sib/MediaRating/]caption{!!rating}get[color]addprefix[color: ]addsuffix[;]] }}}>{{!!rating}}\u003C/span>\n\u003C/$list>\n\u003C/$list>\n\u003C/div>\n\n\u003C/$list>\n\u003C/$list>\n\u003C/$list>"},
{"title":"$:/sib/MediaRating/distinguished","caption":"distinguished","color":"lightgreen","created":"20210606223811463","modified":"20210606224757982","section":"main","stackorder":"35","tags":"","type":"text/vnd.tiddlywiki","text":"These works are “average plus”: they may not quite rise to the level of providing significant insights on subjects of enduring interest needed to obtain a //good// rating, but they are of noticeably higher quality than their peers and are worth calling out as such. They may be somewhat more work to read or watch, have a particularly fine prose style or visual effect, have particularly enjoyable or beautiful subject matter, have a particularly high concentration of useful information, or some combination of these. They most often fall out of the “good” bracket by dint of having insufficient lasting importance (for instance, they talk about current issues in a way that will not be relevant in thirty years), or by covering an insufficient amount of insight-bearing territory. To a greater degree than other ratings, the distinction between //average// and //distinguished// is subjective."},
{"title":"$:/sib/MediaRating/good","caption":"good","color":"green","created":"20210606220541565","modified":"20210606225711134","section":"main","stackorder":"40","tags":"","type":"text/vnd.tiddlywiki","text":"These works “convey to the reader significant insights about subjects of enduring interest to human beings.” They are somewhat challenging to process, and might be worth revisiting if you don't feel you picked everything up the first time, but you may be disappointed on returning to them. This is an Adler and van Doren term, and one must be careful about applying it: //good// is such a nondescript word that it is easy to accidentally apply it to works that should rather be termed //distinguished// in this model. Since it may be difficult to judge “enduring interest” for current topics, a work should in most cases not be labeled //good// if it was published in the last ten years; indeed, this may be overly liberal. (It can plainly be //distinguished// the day after publication, though.)"},
{"title":"$:/sib/MediaRating/great","caption":"great","color":"dodgerblue","created":"20210606201123409","modified":"20210606224548456","section":"main","stackorder":"50","tags":"","type":"text/vnd.tiddlywiki","text":"These works do everything that good ones do, and additionally they “grow with you”: they will always be worth revisiting, and every time you do so you will find new insights. When you put a great work back on the physical or virtual shelf, no matter how carefully you studied it, you have a sneaking suspicion that it has more to give you haven't fully understood it because it's above your level and probably always will be, not because you didn't read or watch it closely enough. There are probably fewer than a thousand of these in the whole world (Adler and van Doren claim there are fewer than a hundred, but the definition seems too fuzzy and subjective for me to be that confident)."},
{"title":"$:/sib/MediaRating/irrational","caption":"irrationally enjoyed","color":"white","created":"20210606220802580","modified":"20210606225447217","section":"auxiliary","stackorder":"5","tags":"","type":"text/vnd.tiddlywiki","text":"The work isn't //great// or //good// or maybe even //distinguished// by a traditional definition, but nevertheless I (and sometimes others) find it unexpectedly pleasurable and come back to it over and over again, with a tenacity and enjoyment that seems difficult to justify on the work's merits."},
{"title":"$:/sib/MediaRating/poor","caption":"poor","color":"orangered","created":"20210606220736962","modified":"20210606221128242","section":"main","stackorder":"10","tags":"","type":"text/vnd.tiddlywiki","text":"The work has insufficient merits to be worth your time unless you have somehow run out of other options."},
{"title":"$:/sib/MediaRating/skimmable","caption":"skimmable","color":"orange","created":"20210606220706034","modified":"20210606220546683","section":"main","stackorder":"20","tags":"","type":"text/vnd.tiddlywiki","text":"The work contains some interesting ideas, but as a whole is not particularly worthwhile. You will want to skim over most of it or watch it on high speed, and you might prefer to read someone else's summary or select a different work that touches on the same ideas."},
{"title":"$:/sib/Overrides/CodeMirrorPopupFix","text":"/* Fix CodeMirror hints appearing behind the story river.\n https://groups.google.com/g/tiddlywiki/c/wznyIhGJd9U */\n\n.CodeMirror-hints {\n\tz-index: 1000;\n}","created":"20210205231937423","modified":"20210522013616001","tags":"$:/tags/Stylesheet","type":"text/css"},
{"title":"$:/sib/Overrides/details-background-color","created":"20210920202013745","creator":"soren","modified":"20210920202606337","modifier":"soren","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define details-background-color() \u003C\u003Ccolour dropdown-background>>"},
{"title":"$:/sib/RawMarkup/ClockTicker","created":"20210627133302793","modified":"20210627195152860","tags":"$:/tags/StartupAction/Browser","type":"text/vnd.tiddlywiki","text":"\\define clock-ticker()\n\t\u003C$action-setfield $tiddler=\"$:/temp/time/ticker\" text=\u003C\u003Cnow [UTC]0hh0mm0ss>> />\n\t\u003C$action-setfield $tiddler=\"$:/temp/time/pomodoro-remaining\" text={{{ [[$:/temp/time/pomodoro-remaining]get[text]subtract[5]] }}}/>\n\\end\n\u003C$action-timeout interval=5000 actions=\u003C\u003Cclock-ticker>> />"},
{"title":"$:/sib/RawMarkup/SimpleAnalytics","text":"\u003C!--\nThis snippet sends pageviews to Simple Analytics, a privacy-friendly analytics service.\nIt records only aggregate statistics and cannot identify you.\n-->\n\u003Cscript>window.sa_event=window.sa_event||function(){a=[].slice.call(arguments);sa_event.q?sa_event.q.push(a):sa_event.q=[a]};\u003C/script>\n\u003Cscript async defer src=\"https://scripts.simpleanalyticscdn.com/latest.js\">\u003C/script>\n\u003Cnoscript>\u003Cimg src=\"https://queue.simpleanalyticscdn.com/noscript.gif\" alt=\"\"\n/>\u003C/noscript>","type":"text/html","created":"20200913152403709","modified":"20210522015229611","tags":"$:/tags/RawMarkup"},
{"title":"$:/sib/RawMarkup/SplashScreen","created":"20200605141146097","creator":"soren","modified":"20210910163321618","modifier":"soren","tags":"$:/tags/RawMarkupWikified/TopBody","type":"text/vnd.tiddlywiki","text":"\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\rules only filteredtranscludeinline transcludeinline macrocallinline\n\n\u003C!-- Spinner mechanism shamelessly stolen from https://tiddlywiki.org. -->\n\n\u003Cdiv class=\"tc-remove-when-wiki-loaded\">\n\u003Cstyle scoped>\n\n.tc-splash-text {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 16px;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n\tmargin: 20px auto 0;\n\twidth: 200px;\n\ttext-align: center;\n\tcolor: \u003C\u003Ccolour foreground>>;\n\tfill: \u003C\u003Ccolour foreground>>;\n}\n\n.tc-splash-text img {\n\twidth: 150px;\n\t\u003C\u003Cbox-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\nhtml body.tc-body {\n\tbackground: \u003C\u003Ccolour page-background>>;\n}\n\n/*\nSpinner from https://github.com/tobiasahlin/SpinKit/ by Tobias Ahlin\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Tobias Ahlin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n.tc-splash-spinner {\n\tmargin: 20px auto 0;\n\twidth: 70px;\n\ttext-align: center;\n}\n\n.tc-splash-spinner > div {\n\twidth: 18px;\n\theight: 18px;\n\tborder-radius: 100%;\n\tdisplay: inline-block;\n\t-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;\n\tanimation: sk-bouncedelay 1.4s infinite ease-in-out both;\n\tbackground-color: #f88;\n}\n\n.tc-splash-spinner .tc-splash-bounce-1 {\n\t-webkit-animation-delay: -0.32s;\n\tanimation-delay: -0.32s;\n\tbackground-color: #8f8;\n}\n\n.tc-splash-spinner .tc-splash-bounce-2 {\n\t-webkit-animation-delay: -0.16s;\n\tanimation-delay: -0.16s;\n\tbackground-color: #88f;\n}\n\n@-webkit-keyframes sk-bouncedelay {\n\t0%, 80%, 100% { -webkit-transform: scale(0) }\n\t40% { -webkit-transform: scale(1.0) }\n}\n\n@keyframes sk-bouncedelay {\n\t0%, 80%, 100% { \n\t-webkit-transform: scale(0);\n\ttransform: scale(0);\n\t} 40% { \n\t-webkit-transform: scale(1.0);\n\ttransform: scale(1.0);\n\t}\n}\n\u003C/style>\n\n\u003Cdiv class=\"tc-splash-spinner\">\n \u003Cdiv class=\"tc-splash-bounce-1\">\u003C/div>\n \u003Cdiv class=\"tc-splash-bounce-2\">\u003C/div>\n \u003Cdiv class=\"tc-splash-bounce-3\">\u003C/div>\n\u003C/div>\n\n\u003Cdiv class=\"tc-splash-text\">\n\t{{$:/config/zettelkasten/SplashScreenMessage}}\n\u003C/div>\n\u003C/div>"},
{"title":"$:/sib/refexplorer/All","caption":"All","condition":"[\u003CstoryTiddler>backlinks[]] [\u003CstoryTiddler>links[]] [\u003CstoryTiddler>tagging[]] +[!title\u003CstoryTiddler>sort[]]","created":"20200329160001633","creator":"soren","modified":"20210825191857536","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003Ctable class=\"ideas-table\">\n\t\u003Ccaption class=\"ideas-table-caption\">Reference Explorer (all types)\u003C/caption>\n\t\u003Cthead>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003Cth style=\"width: 8rem;\">Modified\u003C/th>\n\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter={{$:/sib/refexplorer/All!!condition}}>\n\t\t\u003C$vars currentRecord=\u003C\u003CcurrentTiddler>> thisTooltip={{{ [all[current]get[description]!is[blank]] ~[all[current]get[text]split[ ]first[100]join[ ]addsuffix[...]] }}}>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to={{!!title}} tooltip=\u003C\u003CthisTooltip>> style=\"color: white;\"/>\u003C/td>\n\t\t\t{{$:/sib/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter=\"[all[current]tags[]sort[]]\">\u003C$macrocall $name=\"tag-pill\" tag=\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field=\"modified\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0ss\"/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>"},
{"title":"$:/sib/refexplorer/Footnotes","caption":"Footnotes","condition":"[search[fnote]]","created":"20210719234943395","modified":"20210825191857601","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\\define find(text, begin, end, output:\"simple\", mode:\"all\")\n\u003C$vars \n fulltext=\u003C\u003C__text__>>\n start=\u003C\u003C__begin__>>\n stop=\u003C\u003C__end__>>\n output-macro=\u003C\u003C__output__>>\n>\n\u003C$list variable=\"p1\" filter=\"[\u003Cfulltext>splitbefore\u003Cstart>]\">\n\u003C$list variable=\"p2\" filter=\"[\u003Cfulltext>removeprefix\u003Cp1>]\">\n\u003C$list variable=\"p3\" filter=\"[\u003Cp2>splitbefore\u003Cstop>removesuffix\u003Cstop>]\">\n\u003C$macrocall $name=\u003C\u003Coutput-macro>> p=\u003C\u003Cp3>> />\n\u003C$reveal type=\"match\" text=\"all\" default=\u003C\u003C__mode__>> >\n\u003C$macrocall $name=\"find\"\n text={{{[\u003Cp2>removeprefix\u003Cp3>removeprefix\u003Cstop>]}}}\n begin=\u003C\u003Cstart>>\n end=\u003C\u003Cstop>>\n output=\u003C\u003Coutput-macro>>\n/>\n\u003C/$reveal>\n\u003C/$list>\n\u003C/$list>\n\u003C/$list>\n\u003C/$vars>\n\\end\n\n\\define simple(p)\n\u003C$text text=\u003C\u003C__p__>> />\n\\end\n\n\\define simple-list(p)\n\u003Cli>\u003C$text text=\u003C\u003C__p__>>/>\u003C/li>\n\\end\n\n\\define showfnotes(filter:\"[\u003CcurrentTiddler>]\", title:\"Empty\" class:\"fnote-list\", emptyMessage:\"\")\n\u003C$vars leftDelimiter=\"\u003C\u003Cfnote \">\n\u003C$list filter=\"[subfilter\u003C__filter__>search:text:literal\u003CleftDelimiter>limit[1]]\" variable=null emptyMessage=\u003C\u003C__emptyMessage__>> >\u003C!-- check to see if there is any footnote -->\n\u003C$reveal tag=\"div\" type=\"nomatch\" default=\"Empty\" text=\u003C\u003C__title__>> >\n\u003Ch2>$title$\u003C/h2>\n\u003C/$reveal>\n\u003Col class=\"$class$\">\n\u003C$list filter=\u003C\u003C__filter__>> >\n\u003C$macrocall $name=\"find\" \n text={{!!text}}\n begin=\"\u003C\u003Cfnote \"\n end=\">>\"\n output=\"output-fnote\"\n/>\n\u003C/$list>\n\u003C/ol>\n\u003C/$list>\n\u003C/$vars>\n\\end\n\n\\define output-fnote(p)\n\u003C$vars output=$p$>\n\u003Cli>\u003C\u003Coutput>>\u003C/li>\n\u003C/$vars>\n\\end\n\n\u003C$tiddler tiddler=\u003C\u003CstoryTiddler>>>\n\u003C\u003Cshowfnotes emptyMessage:\"There are no footnotes in this tiddler. (Use the `fnote` macro to create a footnote.)\">>\n\u003C/$tiddler>\n\n\u003C!--\nBased on https://kookma.github.io/TW-Refnotes/.\nCopyright (c) 2019--2021 Mohammad Rahmani.\nCopyright (c) 2021 Soren Bjornstad.\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-->"},
{"title":"$:/sib/refexplorer/Ideas","caption":"Ideas","condition":"[\u003CstoryTiddler>backlinks[]] [\u003CstoryTiddler>links[]] [\u003CstoryTiddler>tagging[]] +[tag[Idea]!title\u003CstoryTiddler>sort[]]","created":"20200321225433677","creator":"soren","modified":"20210825191857613","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003Ctable class=\"ideas-table\">\n\t\u003Ccaption class=\"ideas-table-caption\">Idea Explorer\u003C/caption>\n\t\u003Cthead>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003Cth style=\"width: 8rem;\">Modified\u003C/th>\n\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter={{$:/sib/refexplorer/Ideas!!condition}}>\n\t\t\u003C$vars currentRecord=\u003C\u003CcurrentTiddler>> thisTooltip={{{ [all[current]get[description]!is[blank]] ~[all[current]get[text]split[ ]first[100]join[ ]addsuffix[...]] }}}>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to={{!!title}} tooltip=\u003C\u003CthisTooltip>> style=\"color: white;\"/>\u003C/td>\n\t\t\t{{$:/sib/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter=\"[all[current]tags[]sort[]]\">\u003C$macrocall $name=\"tag-pill\" tag=\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field=\"modified\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0ss\"/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>"},
{"title":"$:/sib/refexplorer/LinkGraph","caption":"Link graph","condition":"[links[]]","created":"20210301193644181","modified":"20210825191857621","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003C!--\nDepth:&ensp;\u003C$range tiddler=\"$:/temp/OutboundLinkDepth\" index=\u003C\u003CcurrentTiddler>> min=1 max=4/>&ensp;\u003C$text text={{{ [[$:/temp/OutboundLinkDepth]getindex\u003CcurrentTiddler>!is[blank]else[2]] }}}/>\n\n\u003C$tidgraph start=\u003C\u003CcurrentTiddler>> mode=\"linking\" maxdepth={{{ [[$:/temp/OutboundLinkDepth]getindex\u003CcurrentTiddler>] }}}/>\n-->\n\n\u003C$tidgraph start=\u003C\u003CcurrentTiddler>> mode=\"linking\" maxdepth=3 />"},
{"title":"$:/sib/refexplorer/LinkTypeTemplate","created":"20200322005021864","creator":"soren","modified":"20210825190353974","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"\u003Ctd>\n\t\u003C!-- The list filter operator does not seem to offer any way to use a dynamic tiddler parameter other than the current tiddler, so we set the current tiddler to the story tiddler (it'll be overridden again by the list widget itself). We use storyTiddler where possible for clarity. -->\n\t\n\t\u003C$set name=\"currentTiddler\" value=\u003C\u003CstoryTiddler>> >\n\t\t\u003C$list filter=\"\n\t\t\t[\u003CcurrentRecord>]\n\t\t\t-[\u003CstoryTiddler>tagging[]] +[else[Tagged]]\n\t\t\t-[\u003CstoryTiddler>links[]] +[else[Link]]\n\t\t\t-[\u003CstoryTiddler>backlinks[]] +[else[Backlink]]\n\t\t\t-[\u003CcurrentRecord>] +[else[Subtiddler]]\n\t\t\">\n\t\t\t\u003C\u003CcurrentTiddler>>\n\t\t\u003C/$list>\n\t\u003C/$set>\n\u003C/td>"},
{"title":"$:/sib/refexplorer/PAO","caption":"People","condition":"[\u003CstoryTiddler>backlinks[]] [\u003CstoryTiddler>links[]] [\u003CstoryTiddler>tagging[]] +[tag[PAO]sort[]]","created":"20200321230153705","creator":"soren","modified":"20210825191857631","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003Ctable class=\"ideas-table\">\n\t\u003Ccaption class=\"ideas-table-caption\">Person/Animal/Organization Explorer\u003C/caption>\n\t\u003Cthead>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003Cth style=\"width: 8rem;\">Modified\u003C/th>\n\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter={{$:/sib/refexplorer/PAO!!condition}}>\n\t\t\u003C$vars currentRecord=\u003C\u003CcurrentTiddler>> thisTooltip={{{ [all[current]get[description]!is[blank]] ~[all[current]get[text]split[ ]first[100]join[ ]addsuffix[...]] }}}>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to={{!!title}} tooltip=\u003C\u003CthisTooltip>> style=\"color: white;\"/>\u003C/td>\n\t\t\t{{$:/sib/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter=\"[all[current]tags[]sort[]]\">\u003C$macrocall $name=\"tag-pill\" tag=\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field=\"modified\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0ss\"/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>"},
{"title":"$:/sib/refexplorer/Places","caption":"Places","condition":"[\u003CstoryTiddler>backlinks[]] [\u003CstoryTiddler>links[]] [\u003CstoryTiddler>tagging[]] +[tag[Place]sort[]]","created":"20200329145138606","creator":"soren","modified":"20210825191857644","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003Ctable class=\"ideas-table\">\n\t\u003Ccaption class=\"ideas-table-caption\">Place Explorer\u003C/caption>\n\t\u003Cthead>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003Cth style=\"width: 8rem;\">Modified\u003C/th>\n\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter={{$:/sib/refexplorer/Places!!condition}}>\n\t\t\u003C$vars currentRecord=\u003C\u003CcurrentTiddler>> thisTooltip={{{ [all[current]get[description]!is[blank]] ~[all[current]get[text]split[ ]first[100]join[ ]addsuffix[...]] }}}>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to={{!!title}} tooltip=\u003C\u003CthisTooltip>> style=\"color: white;\"/>\u003C/td>\n\t\t\t{{$:/sib/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter=\"[all[current]tags[]sort[]]\">\u003C$macrocall $name=\"tag-pill\" tag=\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field=\"modified\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0ss\"/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>"},
{"title":"$:/sib/refexplorer/ReferenceExplorer","created":"20200321225156394","creator":"soren","description":"Display the Reference Explorer, a table that shows related topics, for the current tiddler.","modified":"20210920193434935","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All non-system tiddlers.","type":"text/vnd.tiddlywiki","text":"\\define ref-explorer()\n\t\u003C$set name=\"tabList\" value={{{ [tag[$:/tags/ReferenceExplorerTab]] :reduce[\u003CstoryTiddler>subfilter{!!condition}then\u003CcurrentTiddler>addprefix[ ]addprefix\u003Caccumulator>] }}}>\n\t\u003C$set name=\"myDefaultTab\" value={{{ [\u003CstoryTiddler>has[refexplorer-starttab]get[refexplorer-starttab]addprefix[$:/sib/refexplorer/]] ~[enlist\u003CtabList>first[]] }}}>\n\t\u003C$list filter=\"[\u003CtabList>!is[blank]]\" variable=_>\n\t\t\u003C$macrocall $name=\"tabs\" tabsList=\u003C\u003CtabList>> default=\u003C\u003CmyDefaultTab>> class=\"sib-reference-explorer\"/>\n\t\u003C/$list>\n\t\u003C/$set>\n\t\u003C/$set>\n\\end\n\n\u003C!-- If this is a system tiddler, don't do anything. -->\n\u003C$list filter=\"[all[current]!is[system]]\" variable=_>\n\n\u003C!-- If the refexplorer-hide field is not set, just render the explorer. -->\n\u003C$reveal stateTitle=\u003C\u003CcurrentTiddler>>\n\t\t\t stateField=\"refexplorer-hide\"\n\t\t\t type=\"match\"\n\t\t\t text=\"\"\n\t\t\t default=\"\" >\n\t\u003C\u003Cref-explorer>>\n\u003C/$reveal>\n\n\u003C!-- Otherwise... -->\n\u003C$reveal stateTitle=\u003C\u003CcurrentTiddler>>\n\t\t\t stateField=\"refexplorer-hide\"\n\t\t\t type=\"nomatch\"\n\t\t\t text=\"\"\n\t\t\t default=\"\" >\n\t\t\t\t \n\t\u003C!-- If collapsed: -->\n\t\u003C$reveal stateTitle=\"$:/temp/sibrefexplorer-shows\"\n\t\t\t stateIndex=\u003C\u003CcurrentTiddler>>\n\t\t\t\t\t type=\"nomatch\"\n\t\t\t\t\t text=\"show\"\n\t\t\t\t\t default=\"hide\">\n\t\t\u003C\u003Cclarify>>\n\t\t\u003Chr>\n\t\t\u003Cdiv>\n\t\t\t\u003Cspan style=\"font-size: 50%;\">\n\t\t\t\t\u003C\u003Cfa-lbox fa-info>>\n\t\t\t\u003C/span>\n\t\t\tThis tiddler does not display its references automatically, likely because there are a large number of them which could slow the wiki down.\n\t\t\u003C/div>\n\t\t\u003C$button setTitle=\"$:/temp/sibrefexplorer-shows\"\n\t\t\t\t\t\t setIndex=\u003C\u003CcurrentTiddler>>\n\t\t\t\t\t\t setTo=\"show\">\n\t\t\tShow Reference Explorer\n\t\t\u003C/$button>\n\t\u003C/$reveal>\n\t\n\t\u003C!-- If expanded: -->\n\t\u003C$reveal stateTitle=\"$:/temp/sibrefexplorer-shows\"\n\t\t\t stateIndex=\u003C\u003CcurrentTiddler>>\n\t\t\t\t\t type=\"match\"\n\t\t\t\t\t text=\"show\"\n\t\t\t\t\t default=\"hide\">\n\t\t\u003C\u003Cclarify>>\n\t\t\u003Chr>\n\t\t\u003Cdiv>\n\t\t\t\u003Cspan style=\"font-size: 50%;\">\n\t\t\t\t\u003C\u003Cfa-lbox fa-info>>\n\t\t\t\u003C/span>\n\t\t\tExperiencing poor performance? Try hiding the reference explorer on this tiddler.\n\t\t\u003C/div>\n\t\t\u003C$button setTitle=\"$:/temp/sibrefexplorer-shows\"\n\t\t\t\t\t\t setIndex=\u003C\u003CcurrentTiddler>>\n\t\t\t\t\t\t setTo=\"hide\">\n\t\t\tHide Reference Explorer\n\t\t\u003C/$button>\n\t\t\u003C\u003Cref-explorer>>\n\t\u003C/$reveal>\n\u003C/$reveal>\n\n\u003C/$list>"},
{"title":"$:/sib/refexplorer/Sinks","caption":"Sinks","condition":"[\u003CstoryTiddler>backlinks[]] [\u003CstoryTiddler>links[]] [\u003CstoryTiddler>tagging[]] +[tag[Sink]sort[]]","created":"20200329154311717","creator":"soren","modified":"20210825191857667","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003Ctable class=\"ideas-table\">\n\t\u003Ccaption class=\"ideas-table-caption\">Sink Explorer\u003C/caption>\n\t\u003Cthead>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003Cth style=\"width: 8rem;\">Modified\u003C/th>\n\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter={{$:/sib/refexplorer/Sinks!!condition}}>\n\t\t\u003C$vars currentRecord=\u003C\u003CcurrentTiddler>> thisTooltip={{{ [all[current]get[description]!is[blank]] ~[all[current]get[text]split[ ]first[100]join[ ]addsuffix[...]] }}}>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to={{!!title}} tooltip=\u003C\u003CthisTooltip>> style=\"color: white;\"/>\u003C/td>\n\t\t\t{{$:/sib/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter=\"[all[current]tags[]sort[]]\">\u003C$macrocall $name=\"tag-pill\" tag=\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field=\"modified\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0ss\"/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>"},
{"title":"$:/sib/refexplorer/Sources","caption":"Sources","condition":"[\u003CstoryTiddler>backlinks[]] [\u003CstoryTiddler>links[]] [\u003CstoryTiddler>tagging[]] +[regexp:tags[Class|Publication|Source]sort[]]","created":"20200321225758173","creator":"soren","modified":"20210825191857675","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003Ctable class=\"ideas-table\">\n\t\u003Ccaption class=\"ideas-table-caption\">Source Explorer\u003C/caption>\n\t\u003Cthead>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003Cth style=\"width: 8rem;\">Modified\u003C/th>\n\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter={{$:/sib/refexplorer/Sources!!condition}}>\n\t\t\u003C$vars currentRecord=\u003C\u003CcurrentTiddler>> thisTooltip={{{ [all[current]get[description]!is[blank]] ~[all[current]get[text]split[ ]first[100]join[ ]addsuffix[...]] }}}>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to={{!!title}} tooltip=\u003C\u003CthisTooltip>> style=\"color: white;\"/>\u003C/td>\n\t\t\t{{$:/sib/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter=\"[all[current]tags[]sort[]]\">\u003C$macrocall $name=\"tag-pill\" tag=\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field=\"modified\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0ss\"/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>"},
{"title":"$:/sib/refexplorer/Subtiddlers","caption":"Subtiddlers","condition":"[all[tiddlers]prefix\u003CstoryTiddler>!field:title\u003CstoryTiddler>sort[]]","created":"20201206210345097","creator":"soren","modified":"20211227155615108","modifier":"soren","tags":"$:/tags/ReferenceExplorerTab","type":"text/vnd.tiddlywiki","text":"\u003Ctable class=\"ideas-table\">\n\t\u003Ccaption class=\"ideas-table-caption\">Subtiddler Explorer\u003C/caption>\n\t\u003Cthead>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003Cth style=\"width: 8rem;\">Modified\u003C/th>\n\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter={{$:/sib/refexplorer/Subtiddlers!!condition}}>\n\t\t\u003C$vars currentRecord=\u003C\u003CcurrentTiddler>> thisTooltip={{{ [all[current]get[description]!is[blank]] ~[all[current]get[text]split[ ]first[100]join[ ]addsuffix[...]] }}}>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to={{!!title}} tooltip=\u003C\u003CthisTooltip>> style=\"color: white;\"/>\u003C/td>\n\t\t\t{{$:/sib/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter=\"[all[current]tags[]sort[]]\">\u003C$macrocall $name=\"tag-pill\" tag=\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field=\"modified\" format=\"date\" template=\"YYYY-0MM-0DD 0hh:0ss\"/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>"},
{"title":"$:/sib/Reviewer/Dateops","created":"20201229225912046","modified":"20210119030132561","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\whitespace trim\n\n\\define g(y,m,d,offset:\"0\")\n\u003C$set name=m value={{{ [\u003C__m__>add[9]remainder[12]] }}}>\n\u003C$set name=y value={{{ [\u003Cm>divide[10]floor[]negate[]add\u003C__y__>] }}} >\n\u003C$set name=y4 value={{{ [\u003Cy>divide[4]floor[]] }}}>\n\u003C$set name=y100 value={{{ [\u003Cy>divide[100]floor[]] }}}>\n\u003C$set name=y400 value={{{ [\u003Cy>divide[400]floor[]] }}}>\n\u003C$set name=m306 value={{{ [\u003Cm>multiply[306]add[5]divide[10]floor[]] }}}>\n\u003C$set name=result value={{{ [[365]multiply\u003Cy>add\u003Cy4>subtract\u003Cy100>add\u003Cy400>add\u003Cm306>add[$d$]add[$offset$]subtract[1]] }}} >\n\u003C\u003Cresult>>\n\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\n\\end\n\n\n\\define d(g)\n\u003C$set name=daysperyear value=\"365.2425\">\n\u003C!-- y = (10000*g + 14780)/3652425 -->\n\u003C$set name=y value={{{ [[10000]multiply\u003C__g__>add[14780]divide[3652425]floor[]] }}}>\n\u003C!-- ddd = g - (365*y + y/4 - y/100 + y/400) -->\n\u003C$set name=y4 value={{{ [\u003Cy>divide[4]floor[]] }}}>\n\u003C$set name=y100 value={{{ [\u003Cy>divide[100]floor[]] }}}>\n\u003C$set name=y400 value={{{ [\u003Cy>divide[400]floor[]] }}}>\n\u003C$set name=dddtest value={{{ [[365]multiply\u003Cy>add\u003Cy4>subtract\u003Cy100>add\u003Cy400>negate[]add\u003C__g__>] }}} >\n\u003C$set name=prioryear value={{{ [\u003Cy>subtract[1]] }}} >\n\u003C$set name=y value={{{ [\u003Cdddtest>prefix[-]then\u003Cprioryear>] [\u003Cdddtest>!prefix[-]then\u003Cy>] }}} >\n\u003C$set name=ddd value={{{ [[365]multiply\u003Cy>add\u003Cy4>subtract\u003Cy100>add\u003Cy400>negate[]add\u003C__g__>] }}} >\n\u003C!-- mi = (100*ddd + 52)/3060 -->\n\u003C$set name=mi value={{{ [[100]multiply\u003Cddd>add[52]divide[3060]floor[]] }}} >\n\u003C!-- mm = (mi + 2)%12 + 1 -->\n\u003C$set name=mm value={{{ [\u003Cmi>add[2]remainder[12]add[1]] }}} >\n\u003C!-- y = y + (mi + 2)/12 -->\n\u003C$set name=y value={{{ [\u003Cmi>add[2]divide[12]floor[]add\u003Cy>] }}} >\n\u003C!-- dd= ddd - (mi*306 + 5)/10 + 1 -->\n\u003C$set name=dd value={{{ [\u003Cmi>multiply[306]add[5]divide[10]floor[]negate[]add\u003Cddd>add[1]] }}} >\n\u003C\u003Cy>>, \u003C\u003Cmm>>, \u003C\u003Cdd>> \u003Cbr/>\n\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\n\\end\n\n\\define daysfrom(y,m,d,o)\n\u003C$wikify name=future text=\"\u003C\u003Cg $y$ $m$ $d$ $o$>>\">\n\u003C$macrocall $name=\"d\" g=\u003C\u003Cfuture>>/>\n\u003C/$wikify>\n\\end\n\n\\define datestampFromOffset(y, m, d, o)\n\u003C$wikify name=result text=\"\u003C\u003Cdaysfrom $y$ $m$ $d$ $o$>>\">\n\t\u003C$vars\n\t\tyear={{{ [\u003Cresult>split[,]nth[1]trim[]] }}}\n\t\tmonth={{{ [\u003Cresult>split[,]nth[2]trim[]] }}}\n\t\tday={{{ [\u003Cresult>split[,]nth[3]trim[]] }}}>\n\t\u003C$vars\n\t\tpaddedmonth={{{ [\u003Cmonth>addprefix[0]] }}}\n\t\tpaddedday={{{ [\u003Cday>addprefix[0]] }}}>\n\t\t\u003C\u003Cyear>>\u003C$text text={{{ [\u003Cmonth>minlength[2]else\u003Cpaddedmonth>] }}}/>\u003C$text text={{{ [\u003Cday>minlength[2]else\u003Cpaddedday>] }}}/>1200\n\t\u003C/$vars>\n\t\u003C/$vars>\n\t\n\u003C/$wikify>\n\\end\n\n\\define daysFromDatestamp(datestamp, offset)\n\t\u003C$vars\n\t year={{{ [\u003C__datestamp__>split[]first[4]join[]] }}}\n\t month={{{ [\u003C__datestamp__>split[]first[6]last[2]join[]] }}}\n\t day={{{ [\u003C__datestamp__>split[]first[8]last[2]join[]] }}}>\n\t\t\u003C$macrocall $name=datestampFromOffset\n\t\t\ty=\u003C\u003Cyear>> m=\u003C\u003Cmonth>> d=\u003C\u003Cday>> o=\u003C\u003C__offset__>> />\n \u003C/$vars>\n\\end\n\n\n\u003C!-- First 4 macros are from here: https://groups.google.com/g/tiddlywiki/c/y_GjM302u60/m/H0eGNUQCCgAJ -->\n"},
{"title":"$:/sib/Reviewer/SchedulableTemplate","created":"20210119015940853","description":"Show buttons that exponentially postpone a tiddler from the reading inbox to a later date.","modified":"20210523142535687","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers tagged \u003C\u003Ctag Source>> that are marked unread or partially read.","type":"text/vnd.tiddlywiki","text":"\\define rescheduleme()\n\t\u003C$macrocall $name=inbox-postpone ivlExpr={{$:/temp/NextReviewTime}}/>\n\\end\n\n\u003C$list filter=\"[all[current]tag[Source]readstatus[unread]] [all[current]tag[Source]readstatus[partial]]\">\n\u003Cdiv class=\"schedule-next\">\n\n!!! ExpoPostpone\n\n\u003C$list filter=\"[{!!due}!is[blank]first[]]\" emptyMessage=\"Not scheduled for review.\" variable=_>\n\tThis item has been postponed until \u003C$view field=\"due\" format=\"date\" template=\"YYYY-0MM-0DD\"/>.\n\u003C/$list>\u003Cbr>\nBump to:\n\u003Cdiv>\n\u003C$button>\n\t\u003C$action-setfield due=\"\" ivl=\"\"/>\n\tnow\n\u003C/$button>\n\u003C$button>\n\t\u003C$macrocall $name=inbox-postpone ivlExpr=\"1\"/>\n\ttomorrow\n\u003C/$button>\n\u003C$button>\n\t\u003C$macrocall $name=inbox-postpone ivlExpr=\"5\"/>\n\tin 5 days\n\u003C/$button>\n\u003C$button>\n\t\u003C$macrocall $name=inbox-postpone ivlExpr={{{ [all[current]get[ivl]else[5]multiply[2]] }}}/>\n\tlater\n\u003C/$button>\n\u003C$button>\n\t\u003C$macrocall $name=inbox-postpone ivlExpr={{{ [all[current]get[ivl]else[5]multiply[3]] }}}/>\n\teven later\n\u003C/$button>\n\u003C/div>\n\u003C/div>\n\n\u003C/$list>\n\n\u003Cstyle>\n.schedule-next {\n\tpadding: 5px;\n\tborder: 2px solid \u003C\u003Ccolor \"tag-background\">>;\n\tmax-width: 500px;\n\ttext-align: center;\n}\n\n.schedule-next h3 {\n\tmargin-top: 0.5em;\n}\n\u003C/style>"},
{"title":"$:/sib/Reviewer/SchedulerMacros","created":"20210119014145169","modified":"20210331005114060","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define inbox-setdue(newIvl, newDueDate)\n\t\u003C$action-setfield\n\t\tivl=\u003C\u003C__newIvl__>>\n\t\tdue={{{ [\u003C__newDueDate__>trim[]] }}}/>\n\\end\n\n\\define getNextDueDate() \u003C$macrocall $name=daysFromDatestamp datestamp=\u003C\u003Cnow YYYY0MM0DD>> offset=\u003C\u003CnextInterval>>/>\n\n\\define daysFromToday(days) \u003C$macrocall $name=daysFromDatestamp datestamp=\u003C\u003Cnow YYYY0MM0DD>> offset=\u003C\u003C__days__>>/>\n\n\\define inbox-postpone(ivlExpr)\n\t\u003C$set name=nextInterval value=$ivlExpr$>\n\t\u003C$wikify name=nextDueDate text=\"\u003C\u003CgetNextDueDate>>\" mode=\"inline\">\n\t\t\u003C$macrocall $name=inbox-setdue\n\t\t\tnewIvl=\u003C\u003CnextInterval>>\n\t\t\tnewDueDate=\u003C\u003CnextDueDate>> />\n\t\u003C/$wikify>\n\t\u003C/$set>\n\\end\n\n\\define read-status-selector()\n\t\u003C$select field=\"readstatus\" default=\"\">\n\t\t\u003Coption value=\"unread\">unread\u003C/option>\n\t\t\u003Coption value=\"partial\">partial\u003C/option>\n\t\t\u003Coption value=\"read\">read\u003C/option>\n\t\t\u003Coption value=\"reread\">reread\u003C/option>\n\t\u003C/$select>\n\\end"},
{"title":"$:/sib/Reviewer/Tiddlers due for review","created":"20210119013649056","list-before":"$:/core/ui/PageTemplate/sidebar","modified":"20210522022533184","type":"text/vnd.tiddlywiki","text":"\\define hasReviewsFilter(frag:\"\") [!days:due[-1]] [days:due[0]] +[tag[SpacedRepetition]has[due]$frag$]\n\n''Please retag this $:/tags/PageTemplate to use''\n\n\u003C$list filter=\"[all[current]!is[blank]]\">\nTiddlers due for review:\n\n\u003Cul>\n\t\u003C$list filter=\u003C\u003ChasReviewsFilter \"sort[due]\">> emptyMessage=\"Congratulations! You're all caught up.\">\n\t\t\u003Cli>\u003C$link to=\u003C\u003CcurrentTiddler>>/> (due \u003C$view format=\"date\" template=\"YYYY-0MM-0DD\" field=\"due\"/>)\u003C/li>\n\t\u003C/$list>\n\u003C/ul>\n\u003C/$list>\n\n\u003C$list filter=\"[all[current]then[]else[dummy]!is[blank]]\">\n\u003Cdiv class=\"review-notification\">\n\u003C$list filter=\u003C\u003ChasReviewsFilter \"first[]\">>>\n\tYou have tiddlers due for review.\n\t\u003C$link to=\"$:/sib/Reviewer/Tiddlers due for review\">Click here\u003C/$link> to see them.\n\u003C/$list>\n\u003C/div>\n\n\u003Cstyle>\n.review-notification {\n\ttext-align: center;\n\tbackground-color: \u003C\u003Ccolor message-background>>;\n\twidth: 50%;\n\tmargin: auto;\n}\n\u003C/style>\n\u003C/$list>"},
{"title":"$:/sib/Search/Locator","caption":"Locator","created":"20200404140917333","creator":"soren","modified":"20210522015055747","modifier":"soren","tags":"$:/tags/SearchResults","type":"text/vnd.tiddlywiki","text":"\u003C\u003Clocator-search>>"},
{"title":"$:/sib/Search/LocatorFields","caption":"Fields","created":"20200404141432994","creator":"soren","modified":"20210522015101940","modifier":"soren","tags":"$:/tags/SearchResults","type":"text/vnd.tiddlywiki","text":"\u003C\u003Clocator-fields>>"},
{"title":"$:/sib/SideBar/Explore","caption":"Explore","created":"20200913180105683","description":"Curated public navigation menu for those less familiar with TiddlyWiki.","extras":"$:/core/ui/MoreSideBar/Tags $:/core/ui/MoreSideBar/Recent $:/sib/SideBar/Explore/Bibliographies $:/core/ui/MoreSideBar/All $:/core/ui/MoreSideBar/Explorer","modified":"20210731163510974","tags":"$:/tags/SideBar","type":"text/vnd.tiddlywiki","text":"//To learn about navigation options, visit the [[PublicHomepage]].//\n\n\u003Cdiv class=\"tc-more-sidebar\">\n\u003C$macrocall $name=\"tabs\" tabsList=\"[enlist{$:/sib/SideBar/Explore!!extras}]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" />\n\u003C/div>"},
{"title":"$:/sib/SideBar/Explore/Bibliographies","caption":"Bibliographies","created":"20200913180810431","modified":"20210610114217425","tags":"$:/tags/MoreSideBar","type":"text/vnd.tiddlywiki","text":"\u003Cdiv class=\"sib-tab-description\">\n\n\u003C/div>\n\n[[Recently Read|RecentlyRead]]\u003Cbr>\n\u003C$list filter=\"[tag[Bibliography]!has[draft.of]]\">\n\t\u003C$link to={{!!title}}>{{!!bibliography}}\u003C/$link>\u003Cbr>\n\u003C/$list>\n\n\u003Cstyle>\n.sib-tab-description {\n\tfont-style: italic;\n\tmargin-left: 2em;\n\tmargin-right: 2em;\n\tmargin-bottom: 2ex;\n}\n\u003C/style>"},
{"title":"$:/sib/SideBar/InfoLinks","created":"20210623014041787","creator":"soren","list-after":"$:/core/ui/SideBarSegments/site-subtitle","modified":"20211107173606954","modifier":"soren","tags":"$:/tags/SideBarSegment","type":"text/vnd.tiddlywiki","text":"\\define go-random-action() \u003C$action-navigate $to={{{[tag[Idea]!tag[PrivateChunk]!regexp[/]!tag[Stub]shuffle[]first[]]}}}/>\n\n\u003C$list filter=\u003C\u003Cff SidebarInfoLinks>> variable=_>\n[[about|PublicHomepage]]&nbsp;·\n[[reading|RecentlyRead]]&nbsp;·\n[[favorites|Favorites]]&nbsp;·\n\u003C$button class=\"tc-tiddlylink tc-btn-invisible\" actions=\u003C\u003Cgo-random-action>>>random idea\u003C/$button>\n\n\u003Cstyle>\n.gtw-sidebar-links a, .gtw-sidebar-links button {\n\tcolor: \u003C\u003Ccolor sidebar-foreground>>;\n\ttext-decoration: underline;\n}\n\u003C/style>\n\u003C/$list>"},
{"title":"$:/sib/SideBar/Write","caption":"Write","created":"20201203015757977","description":"When you have some time to work on your Zettelkasten but don't have a particular task in mind, come here to see what needs doing.","list":"$:/sib/SideBar/Write/Stub $:/core/ui/MoreSideBar/Missing NeedsAttention NeedsExcision TODO OpenQuestion $:/sib/Tools/Tray","modified":"20210825122036070","modifier":"soren","tags":"$:/tags/SideBar","type":"text/vnd.tiddlywiki","text":"\u003Cdiv class=\"tc-more-sidebar\">\n\u003C$macrocall $name=\"tabs\" tabsList={{$:/sib/SideBar/Write!!list}} default=\"$:/sib/SideBar/Write/Stub\" state=\"$:/state/tab/writesidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" />\n\u003C/div>"},
{"title":"$:/sib/SideBar/Write/Stub","caption":"Stubs","created":"20200516155336361","creator":"soren","list-after":"$:/core/ui/MoreSideBar/Missing","modified":"20211204001205484","modifier":"soren","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[tag[Stub]sort[]] -[[$:/TagSaver]]\" emptyMessage=\"No stubs right now! You're awesome!\">\n\t\u003C$link to=\u003C\u003CcurrentTiddler>>>\u003C\u003CcurrentTiddler>>\u003C/$link>\u003Cbr/>\n\u003C/$list>\n"},
{"title":"$:/sib/Snippets/TiddlyRememberDetailsWidget","caption":"~TiddlyRemember collapsible","created":"20210307213447524","modified":"20210522013632019","tags":"$:/tags/TextEditor/Snippet","type":"text/vnd.tiddlywiki","text":"\u003C$details summary=\"Flashcards\">\n\n\n\n\u003C/$details>"},
{"title":"$:/sib/StorySaver/Saver","created":"20201126014757319","modified":"20201129155303116","type":"text/vnd.tiddlywiki","text":"\u003C!-- Eric Shulman, https://groups.google.com/g/tiddlywiki/c/2WWN0Lf0G-E, alt. -->\n\n\u003C$set name=savedStoryTag value=\"$:/sib/StorySaver/SavedStory\">\n\u003C$set name=savedStoryPrefix value=\"$:/sib/StorySaver/saved/\">\n\u003C$button popup=\"$:/state/popup/savestory\"> {{$:/core/images/save-button}} save story \u003C/$button>\n\u003C$reveal type=\"popup\" state=\"$:/state/popup/savestory\" class=\"tc-drop-down tc-popup-keep\" style=\"min-width:auto;padding:0.5em;\">\n Enter a new story name:\u003Cbr>\n \u003C$edit-text tiddler=\"$:/state/popup/savestory\" field=\"storyname\" />\u003Cbr>\n \u003C$list filter=\"[tag\u003CsavedStoryTag>limit[1]]\">\n or, select an existing story:\u003Cbr>\n \u003Cstyle> .savedStoryList { width:100%; } \u003C/style>\n \u003C$select tiddler=\"$:/state/popup/savestory\" field=\"storyname\" size=\"5\" class=\"savedStoryList\">\n \u003C$list filter=\"[tag\u003CsavedStoryTag>removeprefix\u003CsavedStoryPrefix>]\">\u003Coption>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\n \u003C/$select>\n \u003C/$list>\n \u003C$button style=\"text-align:center;\"> save\n \u003C$action-setfield $tiddler={{{ [{$:/state/popup/savestory!!storyname}addprefix\u003CsavedStoryPrefix>] }}} list={{$:/StoryList!!list}} tags=\u003C\u003CsavedStoryTag>> />\n \u003C$action-deletetiddler $tiddler=\"$:/state/popup/savestory\" />\n \u003C/$button>\n\u003C/$reveal>\n\u003C$button popup=\"$:/state/popup/loadstory\"> {{$:/core/images/storyview-classic}} load story \u003C/$button>\n\u003C$reveal type=\"popup\" state=\"$:/state/popup/loadstory\" class=\"tc-drop-down tc-popup-keep\" style=\"min-width:auto;padding:0.5em;\">\n \u003C$list filter=\"[tag\u003CsavedStoryTag>limit[1]]\" emptyMessage=\"no saved stories\">\n select an existing story:\u003Cbr>\n \u003Cstyle> .savedStoryList { width:100%; } \u003C/style>\n \u003C$select tiddler=\"$:/state/popup/loadstory\" field=\"storyname\" size=\"5\" class=\"savedStoryList\">\n \u003C$list filter=\"[tag\u003CsavedStoryTag>removeprefix\u003CsavedStoryPrefix>]\">\u003Coption>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\n \u003C/$select>\n \u003C/$list>\n \u003C$button style=\"text-align:center;\"> load\n \u003C$action-setfield $tiddler=\"$:/StoryList\" list={{{ [{$:/state/popup/loadstory!!storyname}addprefix\u003CsavedStoryPrefix>get[list]] }}} />\n \u003C$action-deletetiddler $tiddler=\"$:/state/popup/loadstory\" />\n \u003C/$button>\n\u003C/$reveal>\n\n\u003C$button popup=\"$:/state/popup/exportstory\"> {{$:/core/images/export-button}} export story \u003C/$button>\n\u003C$reveal type=\"popup\" state=\"$:/state/popup/exportstory\" class=\"tc-drop-down tc-popup-keep\" style=\"min-width:auto;padding:0.5em;\">\n \u003C$list filter=\"[tag\u003CsavedStoryTag>limit[1]]\" emptyMessage=\"no saved stories\">\n select an existing story:\u003Cbr>\n \u003Cstyle> .savedStoryList { width:100%; } \u003C/style>\n \u003C$select tiddler=\"$:/state/popup/exportstory\" field=\"storyname\" size=\"5\" class=\"savedStoryList\">\n \u003C$list filter=\"[tag\u003CsavedStoryTag>removeprefix\u003CsavedStoryPrefix>]\">\u003Coption>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\n \u003C/$select>\n \u003C/$list>\n\t \u003C$macrocall $name=\"exportButton\" exportFilter={{{ [{$:/state/popup/exportstory!!storyname}addprefix\u003CsavedStoryPrefix>get[list]] }}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n\u003C/$reveal>\n\u003C/$set>\n\u003C/$set>"},
{"title":"$:/sib/styles/body","created":"20210615030339909","creator":"soren","modified":"20210917203545404","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/* Allow the story river to get a good bit wider than the text since this gives useful space to the navbars and balances out any empty space more nicely, but not so long that it looks ridiculous. */\ndiv.tc-tiddler-frame { max-width: 60em; margin-left: auto; margin-right: auto; }\n\ndiv.tc-tiddler-edit-frame { max-width: 90em; margin-left: auto; margin-right: auto; }\n\ndiv.tc-tiddler-body { max-width: 50em; margin: auto; }\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor { width: 69%; }\n\ndiv[data-tiddler-title*=\"$:/sib/Tools/ReadingInbox\"] div.tc-tiddler-body, div[data-tags*=\"Indite\"] div.tc-tiddler-body {\n\tmax-width: 100%;\n}\ndiv[data-tiddler-title*=\"$:/sib/Tools/ReadingInbox\"],\ndiv[data-tags*=\"Indite\"] {\n\tmax-width: 90em;\n}\n\ndiv[data-tiddler-title*=\"LifetimeReading\"] div.tc-tiddler-body {\n\tmax-width: 100%;\n}\ndiv[data-tiddler-title*=\"LifetimeReading\"] {\n\tmax-width: 90em;\n}\n\ndiv.tc-tiddler-preview-preview {\n\twidth: 29%;\n}\n\nh2:not(.tc-title) { \n\ttext-align: center;\n}"},
{"title":"$:/sib/styles/footnote","created":"20210719234124096","creator":"soren","modified":"20211025140658570","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/*\nBased on https://kookma.github.io/TW-Refnotes/.\nCopyright (c) 2019--2021 Mohammad Rahmani.\nCopyright (c) 2021 Soren Bjornstad.\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\n/* 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\tvertical-align: top;\n\tfont-size: 0.8em;\n /*vertical-align: super;\n line-height: 1.5;*/\n margin-left: 0em;\n color: yellow;\n}\n\n\n/* tooltip class used for ref, fnote and other macros */\n.refnotes-tooltip {\n position: relative;\n display: inline-block;\n cursor: pointer; \n}\n\n.refnotes-tooltip .refnotes-tooltiptext{\n font-size: 0.90em; /* change if it is too small */\n}\n\n.refnotes-tooltip .refnotes-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.refnotes-tooltip:hover .refnotes-tooltiptext {\n visibility: visible;\n /*opacity: 0.9;*/\n}\n\n/* for small screens */\n\n@media screen and (max-width: 960px) {\n.refnotes-tooltip .refnotes-tooltiptext {\n /* Position the tooltip */\n \tposition: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.refnotes-tooltip:hover .refnotes-tooltiptext {\n opacity: 1;\n} \n \n}\n\n/* 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}"},
{"title":"$:/sib/styles/FourColMode","text":"/* FOUR COLUMN MODE */\n.fourcolumns {\n display:block;\n -moz-column-count:5;\n -moz-column-gap:0em;\n -webkit-column-count: 5;\n -webkit-column-gap:0em;\n}\n","created":"20200221170525425","creator":"soren","modified":"20210127230518810","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/css"},
{"title":"$:/sib/styles/GeneralStyles","created":"20201121015759457","creator":"soren","modified":"20210920193138900","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":".left-float {\n\tfloat: left;\n\tmargin-right: 30px;\n}\n\n.right-float {\n\tfloat: right;\n\tmargin-left: 30px;\n}\n\n.clarify {\n clear: both;\n}\n\n.sib-private-chunk {\n\tborder-left: 3px solid \u003C\u003Ccolour muted-foreground>>;\n\tpadding-left: 0.5em;\n}\n\n.color-splotch {\n\tfloat: left;\n\twidth: 10px;\n\theight: 10px;\n\tmargin: 5px;\n\tmargin-left: 0px;\n\tborder: 1px solid rgba(0, 0, 0, 0.2)\n}\n\n.dialogue {\n\tborder: 1px solid \u003C\u003Ccolour foreground>>;\n\tpadding: 1rem;\n}\n\n.dialogue p {\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.checklist p, .checklist p span {\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.epistemic-color-box {\n\twidth: 10px;\n\theight: 10px;\n\tmargin: 5px;\n\tmargin-left: 0px;\n\tborder: 1px solid rgba(0, 0, 0, 0.2);\n\tdisplay: inline-block;\n}"},
{"title":"$:/sib/styles/hr","created":"20210624125244567","creator":"soren","modified":"20211025010048942","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"/* Based on: Flaired edges, by Tomas Theunissen\n https://css-tricks.com/examples/hrs/ */\n\n.tc-tiddler-body > hr, .tc-tiddler-preview-preview > hr {\n overflow: visible; /* For IE */\n height: 30px;\n border-style: solid;\n border-color: \u003C\u003Ccolor primary>>;\n border-width: 1px 0 0 0;\n border-radius: 20px;\n\t\tmargin-bottom: -15px;\n\t\tmax-width: 80%;\n\t\tmargin-top: 30px;\n}\n.tc-tiddler-body hr:before, .tc-tiddler-preview-preview hr:before { /* Not really supposed to work, but does */\n display: block;\n content: \"\";\n height: 30px;\n border-style: solid;\n border-color: \u003C\u003Ccolor primary>>;\n border-width: 0 0 1px 0;\n border-radius: 20px;\n margin-top: -31px;\n}"},
{"title":"$:/sib/styles/OpenTopBar","created":"20210627163819671","modified":"20210627200105492","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"div.sib-quick-tiddler-jump {\n\tbackground-color: \u003C\u003Ccolor menubar-background>>;\n\tposition: fixed;\n\tz-index: 850;\n\tdisplay: inline-block;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n\ttext-align: center;\n\theight: {{$:/config/sib/TopBarHeight}};\n\toverflow: auto;\n\tborder-bottom: 1px solid \u003C\u003Ccolor muted-foreground>>;\n\tpadding-bottom: 3px;\n\tpadding-top: 3px;\n\tfont-size: 12px;\n}\n\ndiv.sib-quick-tiddler-jump a {\n\tcolor: \u003C\u003Ccolor menubar-foreground>>;\n}\n\ndiv.sib-quick-tiddler-jump a.tc-tiddlylink-shadow {\n\tfont-weight: normal;\n}\n\ndiv.sib-quick-tiddler-jump ul {\n\tlist-style-type: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n/* Droppable placeholders take up no space until we drag something there. */\ndiv.sib-quick-tiddler-jump ul li.tc-droppable div.tc-droppable-placeholder {\n\theight: 0;\n}\n\n/* TW inserts this as a placeholder after the last item. We have to resize it to match the rest. */\ndiv.sib-quick-tiddler-jump ul > div.tc-droppable div.tc-droppable-placeholder svg {\n\theight: 0;\n\twidth: 1rem;\n}\n\ndiv.sib-quick-tiddler-jump .tc-dropzone.tc-dragover:before {\n\tdisplay: inline-block;\n}\n\ndiv.sib-quick-tiddler-jump ul > li.tc-droppable div,\n\t\tdiv.sib-quick-tiddler-jump ul > div.tc-droppable div {\n\tdisplay: inline-block;\n}\n\ndiv.sib-quick-tiddler-jump .tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: inline-block;\n\tbackground-color: green;\n\tborder: 0px;\n\twidth: 1rem;\n\theight: 1rem;\n\tmargin-bottom: 0;\n\tmargin-top: 0;\n\tpadding-bottom: 0;\n\tpadding-top: 0;\n}\n\ndiv.sib-quick-tiddler-jump ul li, div.sib-quick-tiddler-jump ul > div.tc-droppable {\n\tdisplay: inline-block;\n}\n\n.sib-quick-tiddler-jump ul li div:nth-child(2):after {\n\tpadding-left: 5px;\n\tcontent: \"·\";\n\tpadding-right: 5px;\n}\n\n/* not last-child because there's a dropzone after it */\n.sib-quick-tiddler-jump ul li:nth-last-child(2) div:after {\n\tcontent: \"\";\n}"},
{"title":"$:/sib/styles/Publicity","created":"20210825185232587","creator":"soren","modified":"20210825185606721","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":".sib-viewer-clarify {\n\tclear: both;\n}\n\n.sib-viewer-public-line {\n\tfloat: right;\n\tcolor: #5E81AC;\n\tmargin-top: 1ex;\n}\n\n@media print\n{\n\t.sib-viewer-public-line {\n\t\tdisplay: none;\n\t}\n}"},
{"title":"$:/sib/styles/ReferenceExplorer","created":"20210721020857476","creator":"soren","modified":"20210825185624720","modifier":"soren","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":"table.ideas-table {\n\twidth: 100%;\n\tbackground-color: #686868;\n\tcaption-side: top;\n}\n\ntable.ideas-table th {\n\tbackground-color: #595959;\n}\n\ntable.ideas-table th, table.ideas-table td {\n\tborder: 0;\n\tborder-right: 1px solid #999999;\n\tborder-left: 1px solid #999999;\n}\n\ntable.ideas-table th {\n\tborder-top: 1px solid #999999;\n}\n\ntable.ideas-table tr:last-child {\n\tborder-bottom: 1px solid #999999;\n}\n\n.ideas-table-caption {\n margin: 0 0 0 0;\n padding: 2px 7px 2px 7px;\n text-shadow: none;\n color: #FFFFFF;\n background-color: #3D3D3D;\n vertical-align: middle;\n border-top: 1px solid #999999;\n border-right: 1px solid #999999;\n border-bottom: 0px solid #999999;\n border-left: 1px solid #999999;\n text-align: center;\n}\n\ntable.ideas-table tr:nth-child(odd) {\n\tbackground-color: #737373;\n}\n\ntable.ideas-table a {\n\tcolor: \u003C\u003Ccolor foreground>>;\n}\n\n@media print\n{\n\t.sib-reference-explorer {\n\t\tdisplay: none;\n\t}\n}"},
{"title":"$:/sib/styles/Subtitle","created":"20210611020047183","modified":"20210611024114066","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":".tc-subtitle { font-size: 0.9em; color: \u003C\u003Ccolor tiddler-title-foreground>>; }\n\n.tc-subtitle .tc-tiddlylink { margin-right: 0; }"},
{"title":"$:/sib/Templates/Automatic/Clock","created":"20210627025415569","modified":"20210627154440472","tags":"$:/tags/TopRightBar","type":"text/vnd.tiddlywiki","text":"\\define reset-pomodoro() \u003C$action-setfield $tiddler=\"$:/temp/time/pomodoro-remaining\" text=\"1500\"/>\n\\define introspect-pomodoro()\n\t\u003C$vars \n\t\t\tminutes={{{ [{$:/temp/time/pomodoro-remaining}divide[60]floor[]] }}}\n\t\t\tseconds={{{ [{$:/temp/time/pomodoro-remaining}remainder[60]] }}}>\n\t\u003C$vars \n\t\t\tzeroedMinutes={{{ [\u003Cminutes>addprefix[0]] }}}\n\t\t\tzeroedSeconds={{{ [\u003Cseconds>addprefix[0]] }}}>\n\t\t\u003C$text text={{{ [\u003Cminutes>length[]match[1]then\u003CzeroedMinutes>else\u003Cminutes>] }}}/>:\u003C$text text={{{ [\u003Cseconds>length[]match[1]then\u003CzeroedSeconds>else\u003Cseconds>] }}}/>\n\t\u003C/$vars>\n\t\u003C/$vars>\n\\end\n\n\u003C$list filter=\u003C\u003Cff Clock>>>\n\u003C$vars ticker={{$:/temp/time/ticker}}>\n\t\u003Cdiv class=\"sib-clock\">\n\t\t\u003Cdiv class=\"sib-clock-item\">\u003C\u003Cnow \"0hh12:0mm AM\">>\u003C/div>\n\t\t\u003Cdiv class=\"sib-clock-item\">\n\t\t\t\u003C$button actions=\u003C\u003Creset-pomodoro>> class=\"tc-tiddlylink tc-btn-invisible\" tooltip=\"Reset pomodoro to 25 minutes\">\u003Ci class=\"fa fa-stopwatch\"/>\u003C/$button>\u003C$list filter=\"[{$:/temp/time/pomodoro-remaining}compare:number:gt[0]]\" emptyMessage=\"&nbsp;done\">\u003C\u003Cintrospect-pomodoro>>\u003C/$list>\n\t\t\u003C/div>\n\t\u003C/div>\n\t\n\u003C/$vars>\n\u003C/$list>\n\n\u003Cstyle>\ndiv.sib-clock {\n\tbackground-color: \u003C\u003Ccolor tiddler-background>>;\n\tpadding: 5px;\n\twidth: 5rem;\n}\n\ndiv.sib-clock-item {\n\ttext-align: center;\n}\n\ndiv.sib-clock-item button {\n\tmargin: 0;\n\tpadding: 0;\n}\n\u003C/style>"},
{"title":"$:/sib/Templates/Automatic/MacroDescription","created":"20210522021355703","description":"Provide a summary of the purpose, usage, and definition of the global macro defined in the current tiddler.","modified":"20210523141047728","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers within the $:/sib/Macros namespace that are tagged \u003C\u003Ctag $:/tags/Macro>>.","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[all[current]prefix[$:/sib/Macros/]tag[$:/tags/Macro]]\">\n\n!! \u003Ccode>\u003C$text text={{{ [all[current]removeprefix[$:/sib/Macros/]] }}}/>\u003C/code> macro\n\n; Purpose\n: {{!!description}}\n\n; Example\n: \u003Cpre>\u003Ccode>\u003C$view field=\"example\"/>\u003C/code>\u003C/pre>\n: {{!!example}}\n\n; Definition\n: \u003C$codeblock code={{{ [all[current]get[text]] }}}/>\n\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/MissingTiddlerCreationNotification","created":"20201204132021892","creator":"soren","modified":"20211027125509141","modifier":"soren","tags":"$:/tags/EditTemplate","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[all[current]get[draft.of]prefix[New ]]\" variable=\"draftof\">\n \u003C$list filter=\"[all[current]get[draft.title]backlinks[]first[]]\" variable=_>\n Creating missing tiddler \u003C$link to={{!!draft.title}}/>. The following tiddlers will link here when you save:\n \u003C\u003Clist-links \"[all[current]get[draft.title]backlinks[]]\">>\n\t\u003C/$list>\n\u003C/$list>\n"},
{"title":"$:/sib/Templates/Automatic/OpenTopBar","created":"20210626221212233","modified":"20210627171414206","tags":"$:/tags/TopLeftBar","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\u003C\u003Cff OpenTopBar>> variable=_>\n\u003Cdiv class=\"sib-quick-tiddler-jump\">\n\t\u003C\u003Clist-links-draggable \"$:/StoryList\">>\n\u003C/div>\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/PrivateChunkParentNotice","created":"20200516175612822","description":"Show a notice that this is a private chunk of another tiddler, and provide another link to the parent tiddler.","modified":"20210523140536264","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers tagged \u003C\u003Ctag PrivateChunk>>.","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[all[current]tag[PrivateChunk]]\">\n\t\t//This is a PrivateChunk of the public tiddler \u003C$link to={{{ [all[current]split[/]first[]] }}}/>.//\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/Publicity/EditorPublicLine","created":"20200511015953198","modified":"20210622003322324","tags":"$:/tags/EditTemplate","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\u003C\u003Cff EditorPublicLine>> variable=_>\n\t\u003Cdiv style=\"float: right; color: #5E81AC; margin-top: 1ex;\">\n\t\t\u003C$checkbox tag=Public> Publish this tiddler\u003C/$checkbox>\n\t\u003C/div>\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/Publicity/LevelDisplay","created":"20200508004653657","modified":"20210606175143055","tags":"$:/tags/EditTemplate","type":"text/vnd.tiddlywiki","text":"\\define editingSystemTiddler(not)[all[current]has[draft.of]get[draft.title]$not$is[system]]\n\\define editingPublicZk(not) [[$:/config/sib/IsPublicEdition]] +[get[text]$not$match[true]]\n\n\n\u003C$list filter=\u003C\u003CeditingPublicZk \"!\">> variable=_>\n\t\u003Cdiv style=\"color: orangered; font-weight: bold\">\n\t\tWARNING: You are editing the public Zettelkasten. Your changes will not be saved unless you export them manually.\n\t\u003C/div>\n\u003C/$list>\n\n\u003C$list filter=\u003C\u003CeditingPublicZk>> variable=_>\n\t\u003C$list filter=\u003C\u003CeditingSystemTiddler>> >\n\t\u003Cdiv style=\"color: #d08770; float:left;\">\n\t\t\u003Cdiv style=\"width: 16px; float:left;\">{{$:/core/images/theme-button}}\u003C/div>\n\t\t\u003Cdiv style=\"padding-top: 5px; padding-left: 20px;\">\n\t\t\tYou are editing a //system tiddler//. System tiddlers are intrinsically public.\n\t\t\u003C/div>\n\t\u003C/div>\n\t\u003C/$list>\n\n\t\u003C$list filter=\u003C\u003CeditingSystemTiddler \"!\">> variable=_>\n\t\t\u003C$list filter=\"[all[current]!tag[Public]]\">\n\t\t\u003Cdiv style=\"color: #81a1c1; float:left;\">\n\t\t\t\u003Cdiv style=\"width: 16px; float:left;\">{{$:/core/images/locked-padlock}}\u003C/div>\n\t\t\t\u003Cdiv style=\"padding-top: 5px; padding-left: 20px;\">\n\t\t\t\tYou are editing a //private tiddler//.\n\t\t\t\u003C/div>\n\t\t\u003C/div>\n\t\t\u003C/$list>\n\n\t\t\u003C$list filter=\"[all[current]tag[Public]!is[system]]\">\n\t\t\u003Cdiv style=\"color: #d08770; float:left;\">\n\t\t\t\u003Cdiv style=\"width: 16px; float:left;\">{{$:/core/images/globe}}\u003C/div>\n\t\t\t\u003Cdiv style=\"padding-top: 4px; padding-left: 20px;\">You are editing a //public tiddler//.\n\t\t\t\u003C/div>\n\t\t\u003C/div>\n\t\t\u003C/$list>\n\t\u003C/$list>\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/Publicity/ViewerPublicLine","created":"20200508002211355","creator":"soren","description":"Show a checkbox to make the tiddler private or public while viewing it.","modified":"20210825185507543","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All non-system tiddlers, in the private edition. Never, in the public edition.","type":"text/vnd.tiddlywiki","text":"\u003C!-- Clear any outstanding floats or things will look really weird. This also clears for the Reference Explorer since the public checkbox is floated, so it comes outside the list widget. -->\n\u003Cdiv class=\"sib-viewer-clarify\"/>\n\n\u003C!-- If this is a system tiddler, don't show the public line. -->\n\u003C$list filter=\"[all[current]!is[system]]\" variable=_>\n\n\u003C$list filter=\u003C\u003Cff ViewerPublicLine>> variable=_>\n\t\u003Cdiv class=\"sib-viewer-public-line\">\n\t\t\u003C$checkbox tag=Public> Publish this tiddler\u003C/$checkbox>\n\t\u003C/div>\n\u003C/$list>\n\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/ReaderActions","created":"20210608021806427","description":"Provide links that allow users to get in touch with the author, share content, or otherwise interact with it.","modified":"20210622002447440","tags":"$:/tags/ViewTemplate","transcludedin":"All non-system tiddlers, if this is the public edition.","type":"text/vnd.tiddlywiki","text":"\\define startConvoAction()\n\t\u003C$action-createtiddler $basetitle=\"$:/temp/Conversation\" $savetitle=\"$:/temp/ConversationCollector\" target=\u003C\u003CcurrentTiddler>> email={{$:/config/sobjornstad/UserEmail}} comment=\"\"/>\n\t\u003C$action-navigate $to=\"StartAConversation\"/>\n\\end\n\n\\define subscribeAction()\n\u003C$action-setfield $tiddler=\u003C\u003Cqualify \"$:/temp/SubscribeSection\">> text=\"open\"/>\n \u003C!--\u003C$action-managesubscription tiddler=\u003C\u003CcurrentTiddler>> user=\"greata@sorenbjornstad.com\" operation=\"subscribe\"/>-->\n\\end\n\n\\define complete-subscription-action()\n \u003C$action-managesubscription tiddler=\u003C\u003CcurrentTiddler>> user={{$:/config/sobjornstad/UserEmail}} operation=\"subscribe\"/>\n\t\u003C$action-setfield $tiddler=\u003C\u003Cqualify \"$:/temp/SubscribeSection\">> text=\"\"/>\n\\end\n\n\u003C$list filter=\"[all[current]!is[system]]\" variable=_>\n\u003C$list filter=\u003C\u003Cff ContactButtons>> variable=_>\n\u003Cdiv style=\"text-align: center;\">\n\u003C$button class=\"tc-btn-invisible tc-tiddlylink\" tooltip=\"Send Soren email about this idea or note.\" actions=\u003C\u003CstartConvoAction>>>\n\t\u003Ci class=\"fa fa-envelope\"/>&nbsp;start a conversation\n\u003C/$button>&emsp;\n\u003C$button class=\"tc-btn-invisible tc-tiddlylink\" tooltip=\"Get emails whenever this idea or note is updated.\" actions=\u003C\u003CsubscribeAction>>>\n \u003Ci class=\"fa fa-bell\"/>&nbsp;subscribe\n\u003C/$button>\n\u003C/div>\n\n\u003Cdiv class=\"sib-subscribe-info\">\n\u003C$reveal state=\u003C\u003Cqualify \"$:/temp/SubscribeSection\">> type=\"match\" text=\"open\">\n \u003C$list filter=\"[all[current]is[missing]]\">//This tiddler doesn't exist yet. You'll be notified if and when it is created.//\u003Cbr>\u003C/$list>\n\tSubscribe with email:&nbsp;\u003C$edit-text tiddler=\"$:/config/sobjornstad/UserEmail\" tag=\"input\" default=\"\"/>\n\t\u003C$button actions=\u003C\u003Ccomplete-subscription-action>>>Subscribe\u003C/$button>\n\u003C/$reveal>\n\u003C/div>\n\n\u003C/$list>\n\u003C/$list>\n\n\n\u003Cstyle>\ndiv.sib-subscribe-info {\n\ttext-align: center;\n\tmargin-top: 0.5rem;\n}\ndiv.sib-subscribe-info input {\n\twidth: 20em;\n\tmax-width: 50%;\n}\n\u003C/style>"},
{"title":"$:/sib/Templates/Automatic/Source","created":"20200808023836194","creator":"soren","description":"Display a table of fields and other information about the source described by this tiddler.","modified":"20210916133730677","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers tagged \u003C\u003Ctag Source>> or \u003C\u003Ctag Sink>>.","type":"text/vnd.tiddlywiki","text":"\\define isbnsearch(isbn) https://isbnsearch.org/isbn/$(isbn)$\n\n\u003C$list filter=\"[all[current]tag[Source]] [all[current]tag[Sink]]\">\n\n\u003Ctable class=\"sourceDeetsTable\">\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Ctd>{{!!caption}}\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Cth>Author\u003C/th>\n\t\t\u003Ctd>{{!!author}}\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Cth>Publication year\u003C/th>\n\t\t\u003Ctd>{{!!year}}\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Cth>Medium\u003C/th>\n\t\t\u003Ctd>{{!!medium}}\u003C/td>\n\t\u003C/tr>\n\t\u003C$list filter={{{ [all[current]has[universe]!universe[nonfiction]] }}}>\n\t\u003Ctr>\n\t\t\u003Cth>Universe\u003C/th>\n\t\t\u003Ctd>\n\t\t\t\u003C$link to={{!!universe}}/>\n\t\t\u003C/td>\n\t\u003C/tr>\n\t\u003C/$list>\n\t\u003Ctr>\n\t\t\u003Cth>URL\u003C/th>\n\t\t\u003Ctd>{{!!url}}\u003C/td>\n\t\u003C/tr>\n\t\u003C$list filter=\"[all[current]has[isbn]]\">\n\t\u003Ctr>\n\t\t\u003Cth>ISBN\u003C/th>\n\t\t\u003Ctd>\n\t\t\t\u003C$set name=isbn value={{!!isbn}}>\n\t\t\t\t\u003Ca href=\u003C\u003Cisbnsearch>> class=\"tc-tiddlylink-external\">{{!!isbn}}\u003C/a>\n\t\t\t\u003C/$set>\n\t\t\u003C/td>\n\t\u003C/tr>\n\t\u003C/$list>\n\t\u003Ctr>\n\t\t\u003Cth>Bibliographies\u003C/th>\n\t\t\u003Ctd>\n\t\t\t\u003C$list filter=\"[all[current]enlist{!!bibliography}]\">\n\t\t\t\t\u003C$link to={{{ [tag[Bibliography]bibliography\u003CcurrentTiddler>] }}}>\n\t\t\t\t\t\u003C$text text=\u003C\u003CcurrentTiddler>>/>\n\t\t\t\t\u003C/$link>\n\t\t\t\u003C/$list>\n\t\t\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Cth>Status\u003C/th>\n\t\t\u003Ctd>\n\t\t\t\u003C\u003Cread-status-selector>>\n\t\t\t\u003C$list filter=\"[all[current]readstatus[read]]\">\n\t\t\t\ton \u003C$view field=\"completed\" format=\"date\" template=\"YYYY-0MM-0DD\"/>\n\t\t\t\u003C/$list>\n\t\t\t\u003C$list filter=\"[all[current]readstatus[reread]]\">\n\t\t\t\t(last read \u003C$view field=\"completed\" format=\"date\" template=\"YYYY-0MM-0DD\"/>)\n\t\t\t\u003C/$list>\n\t\t\u003C/td>\n\t\u003C/tr>\n\u003C/table>\n\n\u003Cstyle>\n.sourceDeetsTable tr th {\n\ttext-align: right;\n}\n\u003C/style>\n\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/SpoilerBanner","created":"20210606181123394","creator":"soren","description":"Show a banner to public users warning them that spoilers may be present in tiddlers related to a work of fiction they may not have read.","modified":"20210909023752258","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers that have a `universe` field which is not set to `nonfiction`, if this is the public edition.","type":"text/vnd.tiddlywiki","text":"\\define hide-action() \u003C$action-setfield $tiddler=\"$:/config/sib/HideSpoilerBanner\" text=\"yes\"/>\n\n\u003C$list filter=\u003C\u003Cff SpoilerBanner>> variable=_>\n\u003C$list filter=\"[[$:/config/sib/HideSpoilerBanner]!text[yes]]\" variable=_>\n\u003C$list filter=\"[all[current]has[universe]!universe[nonfiction]]\">\n\t\u003Cdiv class=\"sib-spoiler-banner\">\n\t\t\u003Cdiv style=\"display: inline-block; vertical-align: center; margin-top: 6px; margin-left: 1em;\">\n\t\t\t\u003Cspan style=\"height: 44px; fill: yellow;\">{{$:/core/images/warning}}\u003C/span>\n\t\t\u003C/div>\n\t\t\u003Cdiv style=\"display: inline-block; margin-left: 1em; margin-right: 1em;\">\n\t\t\u003C$list filter=\"[all[current]tag[Source]]\" variable=_>\n\t\t\tThis tiddler is about a work of fiction. Absolutely no attempt is made to avoid or \u003Cbr>\n\t\t\tmark spoilers; read at your own risk.&ensp;(\u003C$button class=\"tc-tiddlylink tc-btn-invisible\" actions=\u003C\u003Chide-action>>>don't show again this session\u003C/$button>)\u003Cbr>\n\t\t\u003C/$list>\n\t\t\u003C$list filter=\"[all[current]!tag[Source]]\">\n\t\t\tThis tiddler may contain spoilers for //\u003C$link to={{!!universe}}>\u003C$text text={{{ [{!!universe}get[caption]] }}}/>\u003C/$link>//.\u003Cbr>\n\t\t\tRead at your own risk.&ensp;(\u003C$button class=\"tc-tiddlylink tc-btn-invisible\" actions=\u003C\u003Chide-action>>>don't show again this session\u003C/$button>)\u003Cbr>\n\t\t\u003C/$list>\n\t\t\u003C/div>\n\t\u003C/div>\n\u003C/$list>\n\u003C/$list>\n\u003C/$list>\n\n\u003Cstyle>\n.sib-spoiler-banner {\n\tbackground-color: \u003C\u003Ccolor message-background>>;\n\tdisplay: block;\n\tborder-radius: 10px;\n\tpadding: 5px;\n\tmargin: 0 auto;\n\twidth: 35rem;\n}\n\u003C/style>"},
{"title":"$:/sib/Templates/Automatic/StoryRiverFooter","created":"20210825140429794","creator":"soren","modified":"20210902152411592","modifier":"soren","tags":"$:/tags/BelowStory","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\u003C\u003Cff CopyrightFooter>> variable=_>\n\n\u003Cdiv class=\"zk-footer-row\">\n\u003C$list filter=\"[[$:/config/zettelkasten/copyright/UserNotice]has[text]]\" emptyMessage={{$:/config/zettelkasten/copyright/InitialNotice}}>{{$:/config/zettelkasten/copyright/UserNotice}}\u003C/$list>\nSee the [[content copyright notice|CopyrightNotice]] for details.\n\u003C/div>\n\u003Cdiv class=\"zk-footer-row\">\nZettelkasten [[edition of TiddlyWiki|https://zettelkasten.sorenbjornstad.com]] by [[Soren Bjornstad|https://sorenbjornstad.com]].\n\u003C/div>\n\n\u003Cstyle>\ndiv.zk-footer-row {\n\tcolor: \u003C\u003Ccolor muted-foreground>>;\n\ttext-align: center;\n}\n\ndiv.zk-footer-row a.tc-tiddlylink, div.zk-footer-row a.tc-tiddlylink-external {\n\tcolor: \u003C\u003Ccolor muted-foreground>>;\n\ttext-decoration: underline;\n}\n\u003C/style>\n\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/Subtiddler","created":"20211120164840100","creator":"soren","description":"Navigate to the parent or a sibling of the current subtiddler. Subtiddler names are separated from that of their supertiddlers by a / (and are not system tiddlers).","modified":"20211120170254112","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers whose titles contain a slash and are not system tiddlers.","type":"text/vnd.tiddlywiki","text":"\\define expand-siblings() \u003C$action-setfield $tiddler=\"$:/temp/ShowSiblings\" $index=\u003C\u003CcurrentTiddler>> $value=\"yes\" />\n\\define contract-siblings() \u003C$action-setfield $tiddler=\"$:/temp/ShowSiblings\" $index=\u003C\u003CcurrentTiddler>> $value=\"no\" />\n\n\u003C$list filter=\"[all[current]!is[system]regexp:title[/]]\" variable=_>\n\u003C$set name=\"parentTiddler\" value={{{ [all[current]split[/]butlast[]join[/]] }}}>\n\u003C$set name=\"parentTiddlerPlusSlash\" value={{{ [\u003CparentTiddler>addsuffix[/]] }}}>\n\u003Cdiv style=\"text-align: center;\">\n\nThis is a subtiddler of \u003C$link to=\u003C\u003CparentTiddler>>/>.\u003Cbr>\n\t\u003C$reveal stateTitle=\"$:/temp/ShowSiblings\" stateIndex=\u003C\u003CcurrentTiddler>> type=\"nomatch\" text=\"yes\">\n\t\t\u003C$button class=\"tc-btn-invisible tc-tiddlylink\" actions=\u003C\u003Cexpand-siblings>>>{{$:/core/images/right-arrow}} Siblings of this subtiddler\u003C/$button>\n\t\u003C/$reveal>\n\t\u003C$reveal stateTitle=\"$:/temp/ShowSiblings\" stateIndex=\u003C\u003CcurrentTiddler>> type=\"match\" text=\"yes\">\n\t\t\u003C$button class=\"tc-btn-invisible tc-tiddlylink\" actions=\u003C\u003Ccontract-siblings>>>{{$:/core/images/down-arrow}} Siblings of this subtiddler:\u003C/$button>\u003Cbr>\n\t\t\u003C$list filter=\"[prefix\u003CparentTiddlerPlusSlash>]\">\n\t\t\t\u003C$link to=\u003C\u003CcurrentTiddler>>>\u003C$text text={{{ [\u003CcurrentTiddler>removeprefix\u003CparentTiddlerPlusSlash>] }}}/>\u003C/$link>\u003Cbr>\n\t\t\u003C/$list>\n\t\u003C/$reveal>\n\n\u003C/div>\n\u003C/$set>\n\u003C/$set>\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/TypeTagChecker","created":"20211120170347843","creator":"soren","description":"Show a warning on tiddlers that don't have a type selected.","modified":"20211221014011578","modifier":"soren","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers that exist, aren't system tiddlers or subtiddlers, and don't have at least one tag of the color #ff0000.","type":"text/vnd.tiddlywiki","text":"\u003C!-- System tiddlers, missing tiddlers, and subtiddlers are exempt from the warning. -->\n\u003C$list filter=\"[all[current]!is[system]!is[missing]!regexp[/]]\">\n\u003C$list filter=\"[all[current]tags[]color[#ff0000]] ~[[Oops]] +[match[Oops]]\" variable=_>\n\t\u003Cdiv style=\"display: inline-block; vertical-align: center; margin-top: 6px; margin-left: 1em; fill: yellow;\">\n\t\t\u003Cspan style=\"height: 44px\">{{$:/core/images/warning}}\u003C/span>\n\t\u003C/div>\n\t\u003Cdiv style=\"display: inline-block; margin-left: 1em; color: yellow; font-weight: bold;\">\n\t\tThis tiddler does not have a type tag (type tags appear in red). You should probably attach one.\u003Cbr>\n\t\tSee [[ZettelkastenCardType]] for details on the available options.\n\t\u003C/div>\n\u003C/$list>\n\u003C/$list>"},
{"title":"$:/sib/Templates/Automatic/Untitled","created":"20210307160101458","description":"Display buttons enabling a workflow where you paste content directly into TiddlyWiki and then use a custom form to turn it into a tiddler.","modified":"20210523141850561","tags":"$:/tags/ViewTemplate","transcludedin":"Tiddlers whose name begins with `Untitled` (the name you get when you paste text into TiddlyWiki).","type":"text/vnd.tiddlywiki","text":"\\define make-source()\n\u003C$action-sendmessage $message=\"tm-close-tiddler\" $param=\"$:/Import\"/>\n\u003C$action-setfield $field=\"tags\" $value=\"Source\"/>\n\u003C$action-setfield $field=\"url\" $value={{!!text}}/>\n\u003C$action-setfield $field=\"text\" $value=\"\"/>\n\u003C$action-setfield $field=\"type\" $value=\"\"/>\n\u003C$action-setfield $field=\"medium\" $value=\"article\"/>\n\u003C$action-setfield $field=\"year\" $value=\u003C\u003Cnow \"YYYY\">>/>\n\\end\n\n\\define finish-import()\n\u003C$action-setfield $field=\"title\" $value={{$:/temp/RenameTitle}}/>\n\u003C$action-sendmessage $message=\"tm-close-tiddler\" $param=\u003C\u003CcurrentTiddler>>/>\n\u003C$action-deletetiddler $tiddler=\u003C\u003CcurrentTiddler>>/>\n\u003C$action-navigate $to={{$:/temp/RenameTitle}}/>\n\u003C$action-deletetiddler $tiddler=\"$:/temp/RenameTitle\"/>\n\\end\n\n\u003C$list filter=\"[all[current]prefix[Untitled]]\">\n\u003Cdiv class=\"import-options\">\n\u003Ch3>Import Options\u003C/h3>\n\n\u003C$button actions=\u003C\u003Cmake-source>>>Create Source\u003C/$button>\n\u003C$reveal type=\"match\" state=\"!!tags\" text=\"Source\">\n\n|!Tiddler Title |\u003C$edit-text tiddler=\"$:/temp/RenameTitle\" default=\"\" tag=\"input\"/>|\n|!Source Title |\u003C$edit-text field=\"caption\" default=\"\" tag=\"input\"/>|\n|!Author |\u003C$edit-text field=\"author\" default=\"\" tag=\"input\"/>|\n|!Medium |\u003C$radio field=\"medium\" value=\"article\">&nbsp;Article\u003C/$radio>&ensp;\u003C$radio field=\"medium\" value=\"book\">Book\u003C/$radio>|\n|!Year |\u003C$edit-text field=\"year\" default=\u003C\u003Cnow \"YYYY\">> tag=\"input\"/>|\n|!Read status |\u003C\u003Cread-status-selector>>|\n|!Completed |\u003C$edit-date field=\"completed\"/>|\n\n\u003C$button actions=\u003C\u003Cfinish-import>>>Import\u003C/$button>\n\n\u003C/$reveal>\n\u003C/div>\n\u003C/$list>\n\n\u003Cstyle>\ndiv.import-options {\n\tpadding: 5px;\n\tborder: 2px solid \u003C\u003Ccolor \"tag-background\">>;\n\twidth: 100%;\n}\n\ndiv.import-options h3 {\n\ttext-align: center;\n\tmargin-top: 5px;\n\tmargin-bottom: 0;\n}\n\u003C/style>"},
{"title":"$:/sib/Templates/Automatic/ViewTemplateDescription","created":"20210523140149097","description":"Provide a summary of the purpose, usage, and definition of the view template defined in the current tiddler.","modified":"20210523141255035","tags":"$:/tags/ViewTemplate","transcludedin":"All tiddlers within the $:/sib namespace that are tagged \u003C\u003Ctag $:/tags/ViewTemplate>>.","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[all[current]prefix[$:/sib/]tag[$:/tags/ViewTemplate]]\">\n\n!! \u003Ccode>\u003C$text text=\u003C\u003CcurrentTiddler>>/>\u003C/code> view template\n\n; Purpose\n: {{!!description}}\n\n; Transcluded in\n: {{!!transcludedin}}\n\n; Definition\n: \u003C$codeblock code={{{ [all[current]get[text]] }}} language=\"html\"/>\n\n\u003C/$list>"},
{"title":"$:/sib/Templates/Export/SabbaticalUpdateCabCrosspost","created":"20210807200136273","modified":"20210807205025301","tags":"","type":"text/vnd.tiddlywiki","text":"\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n\u003Cdiv id=\"__title\">{{!!title}}\u003C/div>\n\u003Cdiv id=\"__caption\">{{!!caption}}\u003C/div>\n\u003Cdiv id=\"__slug\">{{!!cab-slug}}\u003C/div>\n\n\u003Cdiv id=\"__content\">\n\t\u003C$transclude mode=\"block\" />\n\u003C/div>"},
{"title":"$:/sib/Templates/General/IdentityTemplate","created":"20210303032019619","creator":"soren","modified":"20210825162843813","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"{{!!text}}"},
{"title":"$:/sib/Templates/TableColumns/BookRating","created":"20210606231459712","modified":"20210606231553647","tags":"$:/tags/table/BodyTemplate","tbl-column-list":"rating","tbl-noedit":"","type":"text/vnd.tiddlywiki","text":"\u003Ctd>\n\t\u003Cspan style={{{ [\u003CcurrentRecord>get[rating]addprefix[$:/sib/MediaRating/]get[color]addprefix[color: ]addsuffix[;]] }}}>\u003C$text text={{{ [\u003CcurrentRecord>get[rating]] }}}/>\u003C/span>\n\u003C/td>"},
{"title":"$:/sib/Templates/TableColumns/ThanksgivingDate","created":"20201203034806153","date":"20201128","modified":"20210522013921371","tags":"$:/tags/table/BodyTemplate","tbl-column-list":"at","tbl-noedit":"","type":"text/vnd.tiddlywiki","text":"\u003Ctd>\n\u003C$view tiddler=\u003C\u003CcurrentRecord>> field=\"at\" format=\"date\" template=\"[UTC]MMM 0DD\"/>\n\u003C/td>"},
{"title":"$:/sib/Templates/Topical/AnkiPattern","created":"20210312221833396","creator":"soren","modified":"20210825162849017","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"\\define transclude-section-with-name(sect, name, isopen:\"\")\n\u003C$details summary=\u003C\u003C__name__>> open=\u003C\u003C__isopen__>>>\n\t\u003C$tiddler tiddler={{{ [all[current]addsuffix[/]addsuffix\u003C__sect__>] }}}>\n\t\t\u003C$list filter=\"[\u003Cisedit>match[yes]]\" variable=_>\n\t\t\t\u003Cdiv style=\"float: left; width: 49%;\">\n\t\t\t\t{{||$:/core/ui/EditTemplate/body/editor}}\n\t\t\t\u003C/div>\n\t\t\t\u003Cdiv style=\"float: right; width: 49%;\">\n\t\t\t\t\u003C$transclude mode=\"block\">\n\t\t\t\t\tNone.\n\t\t\t\t\u003C/$transclude>\n\t\t\t\u003C/div>\n\t\t\t\u003Cdiv style=\"clear: both;\"/>\n\t\t\u003C/$list>\n\t\t\u003C$list filter=\"[\u003Cisedit>match[no]]\" variable=_>\n\t\t\t\u003C$transclude mode=\"block\">\n\t\t\t\tNone.\n\t\t\t\u003C/$transclude>\n\t\t\u003C/$list>\n\t\u003C/$tiddler>\n\u003C/$details>\n\\end\n\n\\define transclude-section(sect, isopen:\"\") \u003C$macrocall $name=\"transclude-section-with-name\" sect=\u003C\u003C__sect__>> name=\u003C\u003C__sect__>> isopen=\u003C\u003C__isopen__>>/>\n\n\u003C$list filter=\"[[$:/config/sib/IsPublicEdition]text[true]]\" emptyMessage=\"\"\"\u003C$transclude tiddler=\"$:/sib/Templates/Topical/AnkiPattern/View\"/>\"\"\" variable=_>\n\t\u003C\u003Ctabs \"$:/sib/Templates/Topical/AnkiPattern/View $:/sib/Templates/Topical/AnkiPattern/Edit\" default:\"$:/sib/Templates/Topical/AnkiPattern/View\">>\n\u003C/$list>"},
{"title":"$:/sib/Templates/Topical/AnkiPattern/Common","created":"20210313002520118","modified":"20210522013653257","tags":"","type":"text/vnd.tiddlywiki","text":"\t\u003C\u003Ctransclude-section \"Formula\" \"open\">>\n\t\u003C\u003Ctransclude-section \"Examples\" \"open\">>\n\t\u003C\u003Ctransclude-section \"Advantages\" \"open\">>\n\t\u003C\u003Ctransclude-section \"Disadvantages\" \"open\">>\n\t\u003C\u003Ctransclude-section \"Cautions\" \"open\">>\n\t\u003C\u003Ctransclude-section-with-name \"UsageNotes\" \"Usage notes\" \"open\">>\n\t\u003C\u003Ctransclude-section \"Contributors\">>"},
{"title":"$:/sib/Templates/Topical/AnkiPattern/Edit","caption":"Edit","created":"20210313002532320","modified":"20210522013659519","tags":"","type":"text/vnd.tiddlywiki","text":"\u003C$set name=\"isedit\" value=\"yes\">\n{{||$:/sib/Templates/Topical/AnkiPattern/Common}}\n\u003C/$set>"},
{"title":"$:/sib/Templates/Topical/AnkiPattern/View","caption":"View","created":"20210313002551320","modified":"20210522013709625","tags":"","type":"text/vnd.tiddlywiki","text":"\u003C$set name=\"isedit\" value=\"no\">\n{{||$:/sib/Templates/Topical/AnkiPattern/Common}}\n\u003C/$set>"},
{"title":"$:/sib/Templates/Topical/BibliographyList","created":"20200808152932642","modified":"20210522013411650","tags":"","type":"text/vnd.tiddlywiki","text":"\\define biblioFilter(sortSnippet)\n\t[contains:bibliography{!!bibliography}$sortSnippet$] -[\u003CcurrentTiddler>] -[\u003CcurrentTiddler>get[draft.of]]\n\\end\n\n\u003C!-- TODO: Add sort radio button options -->\n\n\u003Cul>\n\u003C$list filter=\u003C\u003CbiblioFilter \"sort[title]sort[caption]\">> >\n\t\u003Cli>\n\t\t\u003C$set name=itemTitle filter={{!!caption}} value={{!!caption}} emptyValue={{!!title}}>\n\t\t\t\u003C$link to={{!!title}}>\u003C$text text=\u003C\u003CitemTitle>>/>\u003C/$link>\n\t\t\u003C/$set>\n\t\t\u003C$list filter=\"[\u003CcurrentTiddler>get[medium]]\" variable=_>\n\t\t\t({{!!medium}}\u003C$list filter=\"[\u003CcurrentTiddler>get[year]]\" variable=\"year\">, \u003C\u003Cyear>>\u003C/$list>)\n\t\t\u003C/$list>\n\t\t\u003C$list filter=\"[\u003CcurrentTiddler>has[url]]\" variable=_>\u003Ca class=\"tc-tiddlylink-external\" href={{!!url}}>full text\u003C/a>\u003C/$list>\n\t\t\u003C$list filter=\"[{!!description}]\">\n\t\t\u003Cul>\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\u003C/ul>\n\t\t\u003C/$list>\n\t\u003C/li>\n\u003C/$list>\n\u003C/ul>"},
{"title":"$:/sib/Templates/Topical/Build2020SessionDetails","created":"20200518210455646","creator":"soren","modified":"20210825162854523","modifier":"soren","tags":"Public","type":"text/vnd.tiddlywiki","text":"\u003Cstyle>\ntable.msbuild-session {\n\tmargin-left: auto;\n\tmargin-right: auto;\n}\n\ntable.msbuild-session tr td:first-child {\n\tfont-weight: bold;\n\ttext-align: right;\n}\n\n/* override non-bold style */\ntable.msbuild-session > tr > th a.tc-tiddlylink {\n\tfont-weight: bold;\n}\n\u003C/style>\n\n\u003Ctable class=\"msbuild-session\">\n\t\u003Ctr>\u003Cth colspan=2>MicrosoftBuild2020 Session Details\u003C/th>\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Title\u003C/td>\n\t\t\u003Ctd>{{!!caption}}\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Time\u003C/td>\n\t\t\u003Ctd>\u003C$view field=\"at\" format=\"date\" template=\"DDD YYYY-0MM-0DD 0hh:0mm\" />\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Presenter(s)\u003C/td>\n\t\t\u003Ctd>{{!!presenter}}\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Session URL\u003C/td>\n\t\t\u003Ctd>\u003Ca class=\"tc-tiddlylink-external\" href={{!!url}}>Go\u003C/a>\u003C/td>\n\t\u003C/tr>\n\u003C/table>"},
{"title":"$:/sib/Templates/Topical/MaudWikiImport","created":"20200115233038885","creator":"soren","modified":"20210825162901788","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"//This article was originally part of MaudWiki.//"},
{"title":"$:/sib/Templates/Topical/MinnesotaStateParkInfo","created":"20201129205832011","creator":"soren","description":"Display information about the Minnesota state park or recreation area described by the current tiddler.","modified":"20210825162907272","modifier":"soren","tags":"Public $:/tags/ViewTemplate","transcludedin":"All tiddlers tagged \u003C\u003Ctag MinnesotaStatePark>>.","type":"text/vnd.tiddlywiki","text":"\\define dnrInfo(id)\n\u003C$list filter={{{ [\u003C__id__>is[blank]then[oops]] }}}>\n//Please specify the `foreignid` field//\n\u003C/$list>\n\u003C$list filter={{{ [\u003C__id__>!is[blank]] }}}>\nhttps://www.dnr.state.mn.us/state_parks/park.html?id=spk$id$#information\n\u003C/$list>\n\\end\n\n\\define dnrMap(id)\n\u003C$list filter={{{ [\u003C__id__>is[blank]then[oops]] }}}>\n//Please specify the `foreignid` field//\n\u003C/$list>\n\u003C$list filter={{{ [\u003C__id__>!is[blank]] }}}>\nhttps://files.dnr.state.mn.us/maps/state_parks/spk$id$.pdf\n\u003C/$list>\n\\end\n\n\\define newTitle(suffix) $(currentTiddler)$$suffix$\n\n\\define detailsPart(suffix)\n\u003C$list filter=\"[\u003CcurrentTiddler>addsuffix[/$suffix$]is[tiddler]]\" variable=sectionTitle>\u003C$details summary=$suffix$>\n\n\u003C$transclude tiddler={{{ [all[current]addsuffix[/$suffix$]] }}} />\n\n@@margin-block-end: 0;\n\u003C$button>\n \u003C$action-sendmessage $message=\"tm-edit-tiddler\" $param=\u003C\u003CsectionTitle>> class=\"tc-btn-invisible\"/>\nedit\n\u003C/$button>\n@@\n\n\u003C/$details>\u003C/$list>\n\\end\n\n\\define buttonPart(suffix, moreTags: \" Public\")\n\u003C$list filter=\"[\u003CcurrentTiddler>addsuffix[/$suffix$]!is[tiddler]]\" variable=_>\u003C$button>\n \u003C$action-sendmessage $message=\"tm-new-tiddler\" title=\u003C\u003CnewTitle \"/$suffix$\">> tags=\"Subplace$moreTags$\"/>\n\t{{$:/core/images/add-comment}} add \u003C$text text={{{ [[$suffix$]lowercase[]] }}}/>\n\u003C/$button>\u003C/$list>\n\\end\n\n\n\u003C!------------------ Start of template ------------------>\n\n\u003C$list filter=\"[all[current]tag[MinnesotaStatePark]]\" variable=_>\n\n\u003C$list filter=\"[[$:/config/sib/IsPublicEdition]field:text[false]]\" variable=_>\n//Please note: Campsite preferences (jealously guarded!) and visits are private and will never appear in the public wiki.//\n\u003C/$list>\n\n|!{{!!caption}}|\u003C|\n|!Park info |\u003C$macrocall $name=dnrInfo id={{!!foreignid}}/>|\n|!Park map |\u003C$macrocall $name=dnrMap id={{!!foreignid}}/>|\n|!Park office |{{!!phone}}|\n|!Make reservations |https://reservemn.usedirect.com/MinnesotaWeb/|\n|!Problems with reservations |(866) 857-2757|\n|!Check-in/out at |16:00 / 16:00|\n\n\u003C\u003CbuttonPart Travel>> \u003C\u003CbuttonPart Amenities>> \u003C\u003CbuttonPart Campsites \"\">> \u003C\u003CbuttonPart Visits \"\">>\n\n\u003C\u003CdetailsPart Travel>>\u003C\u003CdetailsPart Amenities>>\u003C\u003CdetailsPart Campsites>> \u003C\u003CdetailsPart Visits>>\n\n\u003C/$list>"},
{"title":"$:/sib/Templates/Topical/PublicHomepageTab","created":"20200917013705104","modified":"20210522015636611","tags":"","type":"text/vnd.tiddlywiki","text":"{{{ [\u003CcurrentTab>removeprefix[PublicHomepage/]] }}}"},
{"title":"$:/sib/Templates/Topical/ReadingList/LargeTemplate","created":"20210123155242287","modified":"20210522013432694","tags":"","type":"text/vnd.tiddlywiki","text":"{{!!text}}\n\n\u003C$set name=storyTiddler value=\u003C\u003CcurrentTiddler>>>\n{{||$:/sib/refexplorer/ReferenceExplorer}}\n\u003C/$set>"},
{"title":"$:/sib/Templates/Topical/ReadingList/Rating","created":"20210703174501801","modified":"20210703174533455","tags":"","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[all[current]get[rating]!is[blank]]\" variable=_>\n\u003Cspan style={{{ [all[current]get[rating]addprefix[$:/sib/MediaRating/]get[color]addprefix[color: ]addsuffix[;]] }}}>[{{!!rating}}]\u003C/span>\n\u003C/$list>"},
{"title":"$:/sib/Templates/Topical/ReadingList/SmallTemplate","created":"20210123155216014","modified":"20210809162905890","tags":"","type":"text/vnd.tiddlywiki","text":"[\u003C$link to={{!!title}}/>] //{{!!caption}}// ({{!!year}}), {{!!author}}.\n{{||$:/sib/Templates/Topical/ReadingList/Rating}} \u003C$list filter=\"[all[current]contains:bibliography[LifetimeReading]]\" variable=_>([[LT|LifetimeReading]])\u003C/$list>"},
{"title":"$:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation","created":"20210807194134012","description":"Show links to the chronologically previous and next sabbatical update tiddlers.","modified":"20210807194948834","tags":"$:/tags/ViewTemplate","transcludedin":"Subtiddlers of SabbaticalUpdate.","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[all[current]prefix[SabbaticalUpdate/]]\" variable=_>\n\n\u003Cdiv class=\"sab-upd-navigator\">\n\u003Cdiv style=\"text-align: left;\">\n← Previous: \u003C$list filter=\"[prefix[SabbaticalUpdate]sort[]!field:title[SabbaticalUpdate]before\u003CcurrentTiddler>]\" variable=\"prevTiddler\" emptyMessage=\"//(at first update)//\">\u003C$link to=\u003C\u003CprevTiddler>>>\u003C$text text={{{ [\u003CprevTiddler>get[caption]] }}}/>\u003C/$link>\u003C/$list>\n\u003C/div>\n\u003Cdiv style=\"text-align: right;\">\nNext: \u003C$list filter=\"[prefix[SabbaticalUpdate]sort[]!field:title[SabbaticalUpdate]after\u003CcurrentTiddler>]\" variable=\"nextTiddler\" emptyMessage=\"//(at last update)//\">\u003C$link to=\u003C\u003CnextTiddler>>>\u003C$text text={{{ [\u003CnextTiddler>get[caption]] }}}/>\u003C/$link>\u003C/$list> →\n\u003C/div>\n\u003C/div>\n\n\u003C/$list>\n\n\u003Cstyle>\ndiv.sab-upd-navigator div {\n\tborder-top: 1px solid \u003C\u003Ccolor table-border>>;\n\tpadding-top: 10px;\n\tmargin-top: 6ex;\n\twidth: 50%;\n\tfloat: left;\n}\n\u003C/style>"},
{"title":"$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten","created":"20210807191548391","modified":"20210807192805541","tags":"","type":"text/vnd.tiddlywiki","text":"If you're currently on Control-Alt-Backspace, you can \u003C$link to=\u003C\u003CcurrentTiddler>>>read this post on Soren's Zettelkasten\u003C/$link>."},
{"title":"$:/sib/Templates/Topical/TitleDescriptionStretch","created":"20210303031840037","creator":"soren","modified":"20210825162913436","modifier":"soren","tags":"Public","type":"text/vnd.tiddlywiki","text":"{{!!title}}: {{!!description}}"},
{"title":"$:/sib/Templates/Topical/WhoIAmTab","created":"20201121012833365","creator":"soren","modified":"20210825162920735","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"\u003C$tiddler tiddler=\u003C\u003CcurrentTab>>>\n\u003C$set name=\"storyTiddler\" value=\u003C\u003CcurrentTab>>>\n\u003C$transclude mode=\"block\"/>\n\n\u003C$link to=\u003C\u003CcurrentTiddler>>>\u003Ci class=\"fa fa-expand\"/>&nbsp;Explode this section\u003C/$link>\n{{||$:/sib/refexplorer/ReferenceExplorer}}\n\u003C/$set>\n\u003C/$tiddler>"},
{"title":"$:/sib/Tools","created":"20210825121854435","creator":"soren","description":"Tools to manage your Zettelkasten.","modified":"20210920160417142","modifier":"soren","tags":"Meta","type":"text/vnd.tiddlywiki","text":"\\define item() \u003Cli>\u003C$link to=\u003C\u003CcurrentTiddler>>>\u003C$text text={{{ [all[current]split[/]last[]] }}}/>\u003C/$link>: {{!!description}}\u003C/li>\n\n\\define sorter() [split[/]last[]sort[]]\n\n\\define tooltype(type) \u003Cul>\u003C$list filter=\"[tag[Tool]tooltype[$type$]sortsub\u003Csorter>]\">\u003C\u003Citem>>\u003C/$list>\u003C/ul>\n\n!! Documentation\n\n* [[ZettelkastenCardType]]: The types of red tags you can assign to tiddlers to get specific effects.\n* [[OurNamingConventions]]: Naming conventions for tiddler titles; you're expected to edit this tiddler to match the conventions you wish to use yourself.\n* [[$:/sib/Documentation]]: Documentation on the macros and view templates available within the Zettelkasten.\n\n\n!! Configuration\n\n\u003C\u003Ctooltype configuration>>\n\n\n!! Aggregation\n\n\u003C\u003Ctooltype aggregator>>\n\n\n!! Maintenance\n\n\u003C\u003Ctooltype maintenance>>"},
{"title":"$:/sib/Tools/FeatureFlags","created":"20210622001737586","creator":"soren","description":"Selectively hide and show interface elements or other features.","modified":"20210920155749092","modifier":"soren","tags":"Meta Tool Public","tooltype":"configuration","type":"text/vnd.tiddlywiki","text":"Feature flags allow many elements of the wiki to be selectively enabled and disabled. Feature flags may be set to different values in the private and public editions of your wiki.\n\nTo add your own feature flag, create a new tiddler under `$:/config/zettelkasten/FeatureFlags` and setting its `caption` and `description` fields to the values you'd like to see in the table below. You can then check the feature flag's value using the [[ff macro|$:/sib/Macros/ff]]; see the macro's tiddler for an example.\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth>Feature\u003C/th>\n\t\t\u003Cth>Private\u003C/th>\n\t\t\u003Cth>Public\u003C/th>\n\t\t\u003Cth>Description\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter=\"[prefix[$:/config/zettelkasten/FeatureFlags/]sort[caption]]\">\n\t\u003Ctr>\n\t\t\u003Ctd>{{!!caption}}\u003C/td>\n\t\t\u003Ctd>\u003C$checkbox field=\"private\" checked=\"yes\" unchecked=\"no\"/>\u003C/td>\n\t\t\u003Ctd>\u003C$checkbox field=\"public\" checked=\"yes\" unchecked=\"no\"/>\u003C/td>\n\t\t\u003Ctd>{{!!description}}\u003C/td>\n\t\u003C/tr>\n\t\u003C/$list>\n\u003C/table>"},
{"title":"$:/sib/Tools/LowLinkTiddlers","created":"20210118021217305","creator":"soren","description":"Find non-subtiddler idea tiddlers that have fewer than a specified number of outbound links.","modified":"20210920155025769","modifier":"soren","tags":"Tool","tooltype":"maintenance","type":"text/vnd.tiddlywiki","text":"\\define sorty() [links[]count[]]\nFind non-subtiddler idea tiddlers that have fewer than \u003C$edit-text tiddler=\"$:/temp/LowLinkTiddlers\" tag=\"input\" default=\"\"/> outbound links:\n\n\u003Cul>\n\u003C$list filter=\"[!is[system]has[text]tag[Idea]!search:title[/]sortsub\u003Csorty>]\">\n\t\u003C$list filter=\"[all[current]links[]count[]compare:number:lt{$:/temp/LowLinkTiddlers}]\" variable=\"count\">\n\t\t\u003Cli>\u003C$link to=\u003C\u003CcurrentTiddler>>/>: \u003C\u003Ccount>> outbound links\u003C/li>\n\t\u003C/$list>\n\u003C/$list>\n\u003C/ul>"},
{"title":"$:/sib/Tools/MissingPeople","created":"20200309202554627","creator":"soren","description":"Show all missing tiddlers that have the naming convention for people.","modified":"20210920155034053","modifier":"soren","tags":"Tool","tooltype":"maintenance","type":"text/vnd.tiddlywiki","text":"\"Missing\" of course meaning that the ZK doesn't know about them, not that nobody in ConsensusPhysicalReality knows about them...\n\n\u003Cul>\n\u003C$list filter=\"[all[missing]regexp[^(Mr|Ms|The)]sort[]]\" emptyMessage=\"No references to nonexistent people right now!\">\n\t\u003Cli>\u003C$link>\u003C\u003CcurrentTiddler>>\u003C/$link>\u003C/li>\n\u003C/$list>\n\u003C/ul>"},
{"title":"$:/sib/Tools/PaletteBrowser","created":"20210329204050908","creator":"soren","description":"View all the colors in the current palette and conveniently copy their hex codes or `\u003C\u003Ccolor>>` macros for use elsewhere in the wiki.","modified":"20210920155041358","modifier":"soren","tags":"Meta Tool","tooltype":"maintenance","type":"text/vnd.tiddlywiki","text":"\\define colorsplotch(col)\n\t\u003Cdiv class=\"color-splotch\" style=\"background: $col$;\">\n\\end\n\n\\define copy-hex() \u003C$action-sendmessage $message=\"tm-copy-to-clipboard\" $param=\u003C\u003Chexvalue>>/>\n\\define copy-mac() \u003C$action-sendmessage $message=\"tm-copy-to-clipboard\" $param=\"\"\"\u003C\u003Ccolor $(currentTiddler)$>>\"\"\"/>\n\n\u003Cdiv style=\"text-align: center;\">Current palette: \u003C$link to={{$:/palette}}/>\u003C/div>\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth>\u003C/th>\n\t\t\u003Cth>HTML color code\u003C/th>\n\t\t\u003Cth>TiddlyWiki name\u003C/th>\n\t\t\u003Cth>Copy to clipboard\u003C/th>\n\t\u003C/tr>\n\u003C$list filter=\"[{$:/palette}indexes[]]\">\n\t\u003C$list filter=\"[{$:/palette}getindex\u003CcurrentTiddler>]\" variable=\"hexvalue\">\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$macrocall $name=colorsplotch col=\u003C\u003Chexvalue>>/>\u003C/td>\n\t\t\t\u003Ctd>\u003C\u003Chexvalue>>\u003C/td>\n\t\t \u003Ctd>\u003C\u003CcurrentTiddler>>\u003C/td>\n\t\t\t\u003Ctd>\n\t\t\t\t\u003C$button class=\"tc-tiddlylink tc-btn-invisible\" actions=\u003C\u003Ccopy-mac>>>`\u003C\u003Ccolor>>` macro\u003C/$button> -- \n\t\t\t\t\u003C$button class=\"tc-tiddlylink tc-btn-invisible\" actions=\u003C\u003Ccopy-hex>>>hex code\u003C/$button>\n\t\t\t\u003C/td>\n\t\t\u003C/tr>\n\t\u003C/$list>\n\u003C/$list>\n\u003C/table>\n\n\u003Cstyle>\n.color-splotch {\n\tfloat: left;\n\twidth: 20px;\n\theight: 20px;\n\tborder: 1px solid #000000;\n\tmargin: 0;\n}\n\u003C/style>"},
{"title":"$:/sib/Tools/ReadingInbox","created":"20210215024632766","creator":"soren","description":"Show sources you might want to read soon.","modified":"20210920155102294","modifier":"soren","tags":"Tool","tooltype":"aggregator","type":"text/vnd.tiddlywiki","text":"\\define tableRow(dueFragment)\n\u003Ctr>\n\t\u003Ctd>\u003C$list filter=\"[all[current]has[url]]\">\u003Ca href={{!!url}} class=\"tc-tiddlylink-external\">go\u003C/a>\u003C/$list>\u003C/td>\n\t\u003Ctd>\u003C$link to=\u003C\u003CcurrentTiddler>>>open\u003C/$link>\u003C/td>\n\t\u003Ctd>//{{!!caption}}//\u003C/td>\n\t\u003Ctd>{{!!author}}\u003C/td>\n\t\u003Ctd>{{!!medium}}\u003C/td>\n\t\u003Ctd>{{!!bibliography}}\u003C/td>\n\t\u003C!--\u003Ctd>$dueFragment$\u003C/td>-->\n\t\u003Ctd>\n\t\t\u003C\u003Cread-status-selector>>\n\t\u003C/td>\n\t\u003Ctd>\n\t\t\u003C$button class=\"tc-tiddlylink tc-btn-invisible\">\n\t\t\t\u003C$macrocall $name=inbox-postpone ivlExpr=\"1\"/>\n\t\t\ttomorrow\n\t\t\u003C/$button>&nbsp;|\n\t\t\u003C$button class=\"tc-tiddlylink tc-btn-invisible\">\n\t\t\t\u003C$macrocall $name=inbox-postpone ivlExpr=\"5\"/>\n\t\t\tin 5 days\n\t\t\u003C/$button>&nbsp;|\n\t\t\u003C$button class=\"tc-tiddlylink tc-btn-invisible\">\n\t\t\t\u003C$macrocall $name=inbox-postpone ivlExpr={{{ [all[current]get[ivl]else[5]multiply[2]] }}}/>\n\t\t\tlater\n\t\t\u003C/$button>&nbsp;|\n\t\t\u003C$button class=\"tc-tiddlylink tc-btn-invisible\">\n\t\t\t\u003C$macrocall $name=inbox-postpone ivlExpr={{{ [all[current]get[ivl]else[5]multiply[3]] }}}/>\n\t\t\teven later\n\t\t\u003C/$button>\n\t\u003C/td>\n\u003C/tr>\n\\end\n\nThis table first lists anything in progress; try to limit this to a handful of works. Then it lists items that are unread and potentially interesting, but have not been postponed. Postponing uses //exponential backoff//, to use MrAndyMatuschak's term: if you pick //later// or //even later//, the time until you see the item again doubles or triples from its previous value. This allows you to get items that presently seem of low value out of your way without requiring you to decide you will certainly never read it; perhaps some time later, they will look interesting again.\n\nThe table does not include [[lifetime reading items|LifetimeReading]] unless they're currently in progress, as it would then become miles long and cease to function effectively as an “inbox”; those items are a separate queue.\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth style=\"width: 3.5em;\">Text\u003C/th>\n\t\t\u003Cth>Tiddler\u003C/th>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth style=\"width: 15%;\">Author\u003C/th>\n\t\t\u003Cth>Medium\u003C/th>\n\t\t\u003Cth>Biblio\u003C/th>\n\t\t\u003C!--\u003Cth style=\"width: 6.2em;\">Due\u003C/th>-->\n\t\t\u003Cth style=\"width: 6.5em;\">Status\u003C/th>\n\t\t\u003Cth style=\"width: 18em;\">Postpone\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter=\"[!days:due[-1]] [days:due[0]] +[sort[due]] [!has[due]] +[tag[Source]readstatus[partial]!is[draft]]\">\n\t\t\u003C\u003CtableRow \"\"\"(reading)\"\"\">>\n\t\u003C/$list>\n\t\u003C$list filter=\"[!days:due[-1]] [days:due[0]] +[sort[due]] [!has[due]] +[tag[Source]readstatus[unread]!bibliography[LifetimeReading]!is[draft]]\">\n\t\t\u003C\u003CtableRow \"\"\"\u003C$view field=\"due\" format=\"date\" template=\"YYYY-0MM-0DD\"/>\"\"\">>\n\t\u003C/$list>\n\u003C/table>\n\nSee also RecentlyRead for completed items."},
{"title":"$:/sib/Tools/RelationshipValueTool","created":"20200401230406669","creator":"soren","description":"Show all values used for a particular field in the wiki.","modified":"20210920155116145","modifier":"soren","tags":"Tool","tooltype":"maintenance","type":"text/vnd.tiddlywiki","text":"This tool shows you what values have been used for a particular field. For instance, when filling out the `medium` field on a [[Source]], you might want to know what values you've already used for this field.\n\nIf you're not sure what field you're looking for, expand the list of all fields:\n\n\u003C$details summary=\"List of all fields\">\n\n\u003Cul>\n\u003C$list filter=\"[fields[]sort[]]\">\n\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\n\u003C/$list>\n\u003C/ul>\n\n\u003C/$details>\n\n----\n|!Field to search |\u003C$edit-text tiddler=\"$:/temp/field-list-tool\" default=\"\" tag=input/>|\n\nThe following values have been used for the \u003Ccode>{{$:/temp/field-list-tool}}\u003C/code> field in this wiki:\n\n\u003Cul>\n\t\u003C$list filter=\"[!is[system]each:list-item{$:/temp/field-list-tool}sort[]]\">\n\t\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\n\t\u003C/$list>\n\u003C/ul>"},
{"title":"$:/sib/Tools/SmartOrphanList","created":"20200325215908710","creator":"soren","description":"List of orphans that excludes types of tiddlers that wouldn't be expected to have hardlinks; you can also permanently hide items.","modified":"20210920155127747","modifier":"soren","tags":"Tool","tooltype":"maintenance","type":"text/vnd.tiddlywiki","text":"The following list of outstanding orphans excludes images and attachments (as they don't hard-link when used), templates, meta items, stubs (as they haven't been filled out yet), and any items that have been manually excluded.\n\n{{||$:/sib/Tools/SmartOrphanList/Table}}"},
{"title":"$:/sib/Tools/SmartOrphanList/Table","created":"20210522014752620","creator":"soren","modified":"20210920140719298","modifier":"soren","tbl-add-records":"","tbl-anything":"","tbl-button-actions":"\u003C$action-setfield $tiddler=\u003C\u003CcurrentRecord>> $field=\"hideorphan\" $value=\"true\" modified=\"no\" />","tbl-button-icon":"{{$:/core/images/delete-button}}","tbl-button-tip":"Exclude this tiddler from the smart orphans list","tbl-caption":"''{{!!title}}''","tbl-checkbox-actions-selected":"","tbl-checkbox-actions-unselected":"","tbl-checkbox-field":"","tbl-checkbox-tag":"","tbl-checkbox-tip":"","tbl-checkbox-value-selected":"","tbl-checkbox-value-unselected":"","tbl-class":"tbl-style-default","tbl-columns":"tbl-expand title modified tags tbl-button","tbl-expand":"","tbl-filter":"[is[orphan]!field:hideorphan[true]!tag[Image]!tag[Attachment]!tag[Template]!tag[Meta]!tag[Tool]!tag[Stub]!tag[PrivateChunk]!tag[Bibliography]!tag[Journal]!search:title[/]!tag[Indite]]","tbl-limit":"25","tbl-mode":"normal","tbl-page-marker":"ThreePersonTeam","tbl-show-caption":"true","tbl-show-colgroup":"false","tbl-show-edit":"true","tbl-show-footer":"false","tbl-show-header":"true","tbl-show-mode":"true","tbl-show-pagination":"auto","tbl-sort-by":"title","tbl-sort-negate":"false","tbl-sort-type":"nsort","tbl-style-colgroup":"","tbl-style-container":"","tbl-style-table":"width:100%;","type":"text/vnd.tiddlywiki","text":"\u003C\u003Ctable $:/sib/Tools/SmartOrphanList/Table>>"},
{"title":"$:/sib/Tools/Statistics","created":"20200516031757915","creator":"soren","description":"General information about the number of tiddlers accumulated in the wiki.","modified":"20210920155422635","modifier":"soren","tags":"Tool","tooltype":"maintenance","type":"text/vnd.tiddlywiki","text":"* \u003C$list filter=\"[!is[system]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> (non-system) tiddlers\n** \u003C$list filter=\"[tag[Idea]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> ideas\n** \u003C$list filter=\"[tag[PAO]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> people\n** \u003C$list filter=\"[tag[Source]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> sources\n** \u003C$list filter=\"[tag[Sink]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> sinks\n** \u003C$list filter=\"[all[tags]!is[system]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> tags\n** \u003C$list filter=\"[!is[system]tag[Journal]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> journal entries\n* \u003C$list filter=\"[tag[Public]count[]]\">\u003C\u003CcurrentTiddler>>\u003C/$list> public tiddlers \u003C\u003CpublicAmount>>"},
{"title":"$:/sib/Tools/TagReplace","created":"20200225231807460","creator":"soren","description":"Do a find and replace to merge tags. (Pure renames can be accomplished by editing the tag tiddler.)","modified":"20210920155146151","modifier":"soren","tags":"Tool","tooltype":"maintenance","type":"text/vnd.tiddlywiki","text":"\u003C!--\nhttps://groups.google.com/forum/#!msg/tiddlywiki/OCntQ79DuwM/_vYCTYRXfaUJ\n\nVersion taken from the linked \"TiddlyWiki Magic\" post\n-->\n\n|!Search tag: | \u003C$edit-text tiddler=\"$:/temp/RenameTags/search\" tag=\"input\" type=\"text\"/> |\n|!Replace by: | \u003C$edit-text tiddler=\"$:/temp/RenameTags/replace\" tag=\"input\" type=\"text\"/> |\n\n---\n\u003C$reveal type=\"nomatch\" text=\"\" state=\"$:/temp/RenameTags/replace\">\n\nApply the tag \u003C$tiddler tiddler={{$:/temp/RenameTags/replace}}>\u003C$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\u003C/$tiddler> to the following tiddlers:\n\n\u003C$list filter=\"[!has[draft.of]tag{$:/temp/RenameTags/search}!tag{$:/temp/RenameTags/replace}sort[created]]\">\n\u003C$checkbox tag={{$:/temp/RenameTags/replace}}> \u003C$link to={{!!title}}>\u003C$view field=\"title\"/>\u003C/$link>\u003C/$checkbox>\u003Cbr/>\n\u003C/$list>\n\u003C/$reveal>\n\n\u003C$reveal type=\"nomatch\" text=\"\" state=\"$:/temp/RenameTags/search\">\n\nRemove the tag \u003C$tiddler tiddler={{$:/temp/RenameTags/search}}>\u003C$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\u003C/$tiddler> from the following tiddlers:\n\n\u003C$list filter=\"[!has[draft.of]tag{$:/temp/RenameTags/search}tag{$:/temp/RenameTags/replace}sort[created]]\">\n\u003C$checkbox tag={{$:/temp/RenameTags/search}}> ~~\u003C$link to={{!!title}}>\u003C$view field=\"title\"/>\u003C/$link>~~\u003C/$checkbox>\u003Cbr/>\n\u003C/$list>\n\u003C/$reveal>"},
{"title":"$:/sib/Tools/Tray","caption":"Tray","created":"20210701023215046","creator":"soren","description":"Items we're currently working on but don't need to leave open. Drag and drop a link to a tiddler to add it.","list":"","modified":"20211026030511257","modifier":"soren","tags":"Meta Tool","tooltype":"aggregator","type":"text/vnd.tiddlywiki","text":"Stuff I'm working on but don't need to keep open:\n\n\u003C\u003Clist-links-draggable \"$:/sib/Tools/Tray\" itemTemplate:\"$:/sib/Tools/Tray/Template\">>"},
{"title":"$:/sib/Tools/Tray/Template","created":"20210711192716590","creator":"soren","modified":"20210920140956221","modifier":"soren","tags":"","type":"text/vnd.tiddlywiki","text":"\\define remove-tiddler()\n\t\u003C$action-listops $tiddler=\"$:/sib/Tools/Tray\" $field=\"list\" $filter=\"[enlist{$:/sib/Tools/Tray!!list}] -[all[current]]\"/>\n\\end\n\n\u003C$link/>&nbsp;\u003C$button actions=\u003C\u003Cremove-tiddler>> class=\"tc-btn-invisible\">\u003Cspan style=\"fill: white;\">{{$:/core/images/delete-button}}\u003C/span>\u003C/$button>"},
{"title":"$:/SiteSubtitle","created":"20200118003902418","creator":"soren","modified":"20200118003906515","modifier":"soren","type":"text/vnd.tiddlywiki","text":"Say something clever about it here"},
{"title":"$:/SiteTitle","created":"20200118003822985","creator":"soren","modified":"20200118003845743","modifier":"soren","type":"text/vnd.tiddlywiki","text":"My TiddlyZettelKasten"},
{"title":"$:/status/RequireReloadDueToPluginChange","text":"no"},
{"title":"$:/StoryList","text":"","list":"$:/sib/GettingStarted"},
{"title":"$:/tags/EditorToolbar","created":"20210928031136148","creator":"soren","list":"$:/core/ui/EditorToolbar/do-thing $:/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/linkify $:/core/ui/EditorToolbar/transcludify $:/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 $:/sib/Buttons/excise-private-chunk $:/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 $:/plugins/sobjornstad/TiddlyRemember/toolbar/rememberq $:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz $:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex","modified":"20210928031142401","modifier":"soren","type":"text/vnd.tiddlywiki"},
{"title":"$:/tags/EditTemplate","created":"20201204132628163","list":"$:/core/ui/EditTemplate/controls $:/sib/Templates/Automatic/Publicity/EditorPublicLine $:/sib/Templates/Automatic/Publicity/LevelDisplay $:/core/ui/EditTemplate/title $:/plugins/bimlas/locator/edit-template/locator-references $:/sib/Templates/Automatic/MissingTiddlerCreationNotification $:/core/ui/EditTemplate/tags $:/core/ui/EditTemplate/shadow $:/core/ui/ViewTemplate/classic $:/core/ui/EditTemplate/body $:/core/ui/EditTemplate/type $:/core/ui/EditTemplate/fields","modified":"20210522015314483","type":"text/vnd.tiddlywiki"},
{"title":"$:/tags/PageTemplate","created":"20210626221416384","creator":"soren","list":"$:/core/ui/PageTemplate/topleftbar $:/core/ui/PageTemplate/toprightbar $:/core/ui/PageTemplate/sidebar $:/core/ui/PageTemplate/story $:/core/ui/PageTemplate/alerts $:/core/ui/PageTemplate/drafts $:/core/ui/PageTemplate/pluginreloadwarning $:/sib/Templates/Automatic/OpenTopBar","modified":"20210825131835004","modifier":"soren","type":"text/vnd.tiddlywiki"},
{"title":"$:/tags/ReferenceExplorerTab","created":"20200329153524761","creator":"soren","list":"$:/sib/refexplorer/Ideas $:/sib/refexplorer/PAO $:/sib/refexplorer/Places $:/sib/refexplorer/Sources $:/sib/refexplorer/Sinks $:/sib/refexplorer/Indexes $:/sib/refexplorer/Subtiddlers $:/sib/refexplorer/LinkGraph $:/sib/refexplorer/Footnotes $:/sib/refexplorer/All","modified":"20210825191857696","modifier":"soren","type":"text/vnd.tiddlywiki"},
{"title":"$:/tags/SideBar","created":"20201203015851994","list":"$:/core/ui/SideBar/Open $:/core/ui/SideBar/Recent $:/core/ui/SideBar/Tools $:/core/ui/SideBar/More $:/sib/SideBar/Write $:/sib/SideBar/Explore","modified":"20210522014736560","type":"text/vnd.tiddlywiki"},
{"title":"$:/tags/Stylesheet","created":"20210127230406756","modified":"20210127230518943","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki"},
{"title":"$:/tags/ViewTemplate","created":"20201129183705439","creator":"soren","list":"$:/core/ui/ViewTemplate/title $:/core/ui/ViewTemplate/unfold $:/core/ui/ViewTemplate/subtitle $:/sib/EpistemicStatus/Display $:/sib/MediaRating/Display $:/core/ui/ViewTemplate/tags $:/core/ui/ViewTemplate/classic $:/sib/Templates/Automatic/Subtiddler $:/sib/Templates/Automatic/TypeTagChecker $:/sib/Templates/Automatic/SpoilerBanner $:/sib/Templates/Automatic/Untitled $:/sib/Templates/Automatic/PrivateChunkParentNotice $:/sib/Templates/Automatic/Source $:/sib/Templates/Topical/MinnesotaStateParkInfo $:/sib/Templates/Automatic/MacroDescription $:/core/ui/ViewTemplate/body $:/sib/indite/ViewTemplate $:/sib/Reviewer/SchedulableTemplate $:/sib/gis/MappingTools $:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation $:/sib/Templates/Automatic/Publicity/ViewerPublicLine $:/core/ui/ViewTemplate/import $:/core/ui/ViewTemplate/plugin $:/plugins/danielo515/2click2edit/ui/ViewTemplate $:/sib/refexplorer/ReferenceExplorer $:/sib/Templates/Automatic/ViewTemplateDescription $:/sib/Templates/Automatic/ReaderActions","modified":"20211120171147065","modifier":"soren","type":"text/vnd.tiddlywiki"},
{"title":"$:/TagSaver","created":"20210827213731043","creator":"soren","modified":"20210828132716711","modifier":"soren","tags":"Attachment Bibliography Class Conversation Idea Image Index Journal Meta Notes PAO Place Publication Sink Source Tool PrivateChunk Public NeedsAttention NeedsExcision Stub","type":"text/vnd.tiddlywiki","text":"! Apologies for the noise, please read here\n\nThis tiddler exists to ensure that all tags foundational to the Zettelkasten continue to be displayed in the “Tags” bar even in an empty edition. Once you've used all of the tags on this tiddler on real tiddlers, or if you feel you do not need them displayed there anymore, you can delete this tiddler.\n\nAll the noise is because the tags cause a bunch of templates to be transcluded. :-)\n\n! End of the important part"},
{"title":"$:/theme","created":"20200118003448758","creator":"soren","modified":"20210205020036977","modifier":"soren","type":"text/vnd.tiddlywiki","text":"$:/themes/tiddlywiki/vanilla"},
{"title":"$:/themes/tiddlywiki/snowwhite","name":"Snow White","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Emphasises individual tiddlers","dependents":"$:/themes/tiddlywiki/vanilla","plugin-priority":"0","version":"5.2.0","type":"application/json","text":"{\"tiddlers\":{\"$:/themes/tiddlywiki/snowwhite/base\":{\"title\":\"$:/themes/tiddlywiki/snowwhite/base\",\"tags\":\"[[$:/tags/Stylesheet]]\",\"text\":\"\\\\define sidebarbreakpoint-minus-one()\\n\u003C$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-sidebar-header {\\n\\ttext-shadow: 0 1px 0 \u003C\u003Ccolour sidebar-foreground-shadow>>;\\n}\\n\\n.tc-tiddler-info {\\n\\t\u003C\u003Cbox-shadow \\\"inset 1px 2px 3px rgba(0,0,0,0.1)\\\">>\\n}\\n\\n@media screen {\\n\\t.tc-tiddler-frame {\\n\\t\\t\u003C\u003Cbox-shadow \\\"1px 1px 5px rgba(0, 0, 0, 0.3)\\\">>\\n\\t}\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\t.tc-tiddler-frame {\\n\\t\\t\u003C\u003Cbox-shadow none>>\\n\\t}\\n}\\n\\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\\n\\t\u003C\u003Ctransition \\\"fill 150ms ease-in-out\\\">>\\n}\\n\\n.tc-tiddler-controls button.tc-selected,\\n.tc-page-controls button.tc-selected {\\n\\t\u003C\u003Cfilter \\\"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\\\">>\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor {\\n\\t\u003C\u003Cbox-shadow \\\"inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\">>\\n}\\n\\n.tc-edit-tags {\\n\\t\u003C\u003Cbox-shadow \\\"inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\">>\\n}\\n\\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\\n\\t\u003C\u003Cbox-shadow \\\"none\\\">>\\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\u003C\u003Cbox-shadow \\\"2px 2px 5px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-drop-down {\\n\\tborder-radius: 4px;\\n\\t\u003C\u003Cbox-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-block-dropdown {\\n\\tborder-radius: 4px;\\n\\t\u003C\u003Cbox-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-modal {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\n}\\n\\n.tc-modal-footer {\\n\\tborder-radius: 0 0 6px 6px;\\n\\t\u003C\u003Cbox-shadow \\\"inset 0 1px 0 #fff\\\">>;\\n}\\n\\n\\n.tc-alert {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\"0 3px 7px rgba(0,0,0,0.6)\\\">>\\n}\\n\\n.tc-notification {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\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\u003C\u003Cbackground-linear-gradient \\\"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\\\">>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\t\u003C\u003Cbackground-linear-gradient \\\"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\\\">>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\t\u003C\u003Cbackground-linear-gradient \\\"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\\\">>\\n}\\n\\n.tc-message-box img {\\n\\t\u003C\u003Cbox-shadow \\\"1px 1px 3px rgba(0,0,0,0.5)\\\">>\\n}\\n\\n.tc-plugin-info {\\n\\t\u003C\u003Cbox-shadow \\\"1px 1px 3px rgba(0,0,0,0.5)\\\">>\\n}\\n\"}}}"},
{"title":"$:/themes/tiddlywiki/vanilla","name":"Vanilla","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Basic theme","plugin-priority":"0","version":"5.2.0","dependents":"","type":"application/json","text":"{\"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\u003Cdiv class=\\\"tc-drop-down-wrapper\\\">\\n\u003C$button popup=\u003C\u003Cqualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">> class=\\\"tc-btn-invisible tc-btn-dropdown\\\">{{$:/core/images/down-arrow}}\u003C/$button>\\n\u003C$reveal state=\u003C\u003Cqualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">> type=\\\"popup\\\" position=\\\"belowleft\\\" text=\\\"\\\" default=\\\"\\\">\\n\u003Cdiv class=\\\"tc-drop-down\\\">\\n\u003C$macrocall $name=\\\"image-picker\\\" actions=\\\"\\\"\\\"\\n\\n\u003C$action-setfield\\n\\t$tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\"\\n\\t$value=\u003C\u003CimageTitle>>\\n/>\\n\\n\\\"\\\"\\\"/>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define backgroundimageattachment-dropdown()\\n\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\" default=\\\"scroll\\\">\\n\u003Coption value=\\\"scroll\\\">\u003C\u003Clingo Settings/BackgroundImageAttachment/Scroll>>\u003C/option>\\n\u003Coption value=\\\"fixed\\\">\u003C\u003Clingo Settings/BackgroundImageAttachment/Fixed>>\u003C/option>\\n\u003C/$select>\\n\\\\end\\n\\n\\\\define backgroundimagesize-dropdown()\\n\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\" default=\\\"scroll\\\">\\n\u003Coption value=\\\"auto\\\">\u003C\u003Clingo Settings/BackgroundImageSize/Auto>>\u003C/option>\\n\u003Coption value=\\\"cover\\\">\u003C\u003Clingo Settings/BackgroundImageSize/Cover>>\u003C/option>\\n\u003Coption value=\\\"contain\\\">\u003C\u003Clingo Settings/BackgroundImageSize/Contain>>\u003C/option>\\n\u003C/$select>\\n\\\\end\\n\\n\u003C\u003Clingo ThemeTweaks/Hint>>\\n\\n! \u003C\u003Clingo Options>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\">\u003C\u003Clingo Options/SidebarLayout>>\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\">\u003Coption value=\\\"fixed-fluid\\\">\u003C\u003Clingo Options/SidebarLayout/Fixed-Fluid>>\u003C/option>\u003Coption value=\\\"fluid-fixed\\\">\u003C\u003Clingo Options/SidebarLayout/Fluid-Fixed>>\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\">\u003C\u003Clingo Options/StickyTitles>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Options/StickyTitles/Hint>>// |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003C\u003Clingo Options/CodeWrapping>>\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003Coption value=\\\"pre\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"pre-wrap\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n\\n! \u003C\u003Clingo Settings>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\">\u003C\u003Clingo Settings/FontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\">\u003C\u003Clingo Settings/CodeFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/code
{"title":"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize","created":"20210512223132839","modified":"20210512222944307","type":"text/vnd.tiddlywiki","text":"16px"},
{"title":"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint","created":"20200118003537759","creator":"soren","modified":"20210615030640584","modifier":"soren","type":"text/vnd.tiddlywiki","text":"70em"},
{"title":"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth","created":"20200118003510457","creator":"soren","modified":"20210615030637328","modifier":"soren","type":"text/vnd.tiddlywiki","text":"35em"},
{"title":"$:/themes/tiddlywiki/vanilla/metrics/storyright","created":"20200118003517900","creator":"soren","modified":"20210615030746421","modifier":"soren","type":"text/vnd.tiddlywiki","text":"1100px"},
{"title":"$:/themes/tiddlywiki/vanilla/metrics/storywidth","created":"20200118003525524","creator":"soren","modified":"20200118003527568","modifier":"soren","type":"text/vnd.tiddlywiki","text":"900px"},
{"title":"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth","created":"20200118003521373","creator":"soren","modified":"20200118003529130","modifier":"soren","type":"text/vnd.tiddlywiki","text":"900px"},
{"title":"$:/themes/tiddlywiki/vanilla/options/sidebarlayout","created":"20200402134512912","modified":"20200913202515610","type":"text/vnd.tiddlywiki","text":"fluid-fixed"},
{"title":"$:/themes/tiddlywiki/vanilla/options/stickytitles","created":"20200118003611689","creator":"soren","modified":"20210627195923430","modifier":"soren","type":"text/vnd.tiddlywiki","text":"yes"},
{"title":"$:/themes/tiddlywiki/vanilla/settings/backgroundimage","created":"20210220212625107","modified":"20210220213159398","type":"text/vnd.tiddlywiki"},
{"title":"$:/themes/tiddlywiki/vanilla/settings/codefontfamily","created":"20210512223028998","modified":"20210512222846850","type":"text/vnd.tiddlywiki","text":"\"Fira Code\",Inconsolata,Consolas,\"Liberation Mono\",Menlo,Courier,monospace"},
{"title":"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily","created":"20200118003620709","creator":"soren","modified":"20200118003640548","modifier":"soren","type":"text/vnd.tiddlywiki","text":"\"Fira Code\",Inconsolata,Consolas,Courier,monospace"},
{"title":"$:/themes/tiddlywiki/vanilla/settings/fontfamily","created":"20210512223039511","modified":"20210512222852786","type":"text/vnd.tiddlywiki","text":"Source Sans Pro, system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\""},
{"title":"$:/themes/tiddlywiki/vanilla/sticky","created":"20210626223253788","modified":"20210627201302480","type":"text/vnd.tiddlywiki","text":"\u003C$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: ``{{$:/config/sib/TopBarHeight}}``;\n\tbackground: ``\u003C\u003Ccolour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n\u003C$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`\u003C$text text=\u003C\u003CcurrentTiddler>>/>`) {\nz-index: `\u003C$text text={{{ [[200]subtract\u003CcurrentTiddler>] }}}/>`;\n}\n`\n\u003C/$list>\n\u003C/$reveal>\n"},
{"text":"{\n \"20200411132349135\": \"Identify and populate fields for Sources\",\n \"20200411132355040\": \"Try to add pictures for more people\",\n \"20200411132404648\": \"Identify a way to keep track of the characters in works of fiction (universe field or something?)\",\n \"20200427032342224\": \"Journals should be easily splittable into sections with /'s (and slotted that way in the folder) -- have to think about order.\",\n \"20200427032347386\": \"Readjust bucketing in filesystem\",\n \"20200427033916350\": \"Journal section in the ReferenceExplorer\",\n \"20200520144155787\": \"Look into keyboard shortcuts\"\n}","type":"application/json","created":"20200612234035819","modified":"20200612234036052","title":"$:/todolist/data/base/archive"},
{"text":"{}","type":"application/json","created":"20200416123626170","creator":"soren","modified":"20200612234035835","modifier":"soren","title":"$:/todolist/data/base/done"},
{"text":"{\n \"20200411132349135\": \"none\",\n \"20200411132355040\": \"none\",\n \"20200411132404648\": \"none\",\n \"20200423024915852\": \"yellow\",\n \"20200427032342224\": \"limegreen\",\n \"20200427032347386\": \"none\",\n \"20200427033916350\": \"limegreen\",\n \"20200428184308637\": \"none\",\n \"20200519141610053\": \"none\",\n \"20200520144155787\": \"none\",\n \"20200831174643357\": \"none\"\n}","type":"application/json","created":"20200411132343915","creator":"soren","modified":"20200831174646077","modifier":"soren","title":"$:/todolist/data/base/priority"},
{"text":"{\n \"itemtext\": \"\",\n \"option\": \"yes\",\n \"timestamp\": \"show\",\n \"editview\": \"view\",\n \"markall\": \"no\"\n}","type":"application/json","created":"20200411132340008","creator":"soren","modified":"20200913151437409","modifier":"soren","title":"$:/todolist/data/base/state"},
{"text":"{\n \"20200423024915852\": \"undone\",\n \"20200428184308637\": \"undone\",\n \"20200519141610053\": \"undone\",\n \"20200831174643357\": \"undone\"\n}","type":"application/json","created":"20200411132343915","creator":"soren","modified":"20200831174646171","modifier":"soren","title":"$:/todolist/data/base/status"},
{"text":"{\n \"20200423024915852\": \"Fix the fact that rich relationships are missing from the \\\"All\\\" ReferenceExplorer view\",\n \"20200428184308637\": \"Create maintenance tool for naming conventions (no 'Vs', only 'Versus'; PAO names)\",\n \"20200519141610053\": \"Public ZK should use zoomin view; also can we not render backgrounded tiddlers to improve performance?\",\n \"20200831174643357\": \"Possibility of a nopub macro for little snippets of things that can't be publicized; would need to regex-replace out of the source prior to publish\"\n}","type":"application/json","created":"20200411132343915","creator":"soren","list":"20200831174643357 20200519141610053 20200423024915852 20200428184308637","modified":"20200831174646196","modifier":"soren","title":"$:/todolist/data/base/tasks"},
{"title":"Attachment","caption":"Any embedded file that is not an [[Image]].","color":"#ff0000","created":"20200122024451228","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825155401976","modifier":"soren","refexplorer-hide":"yes","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"The //Attachment// tag is applied to any file embedded within the wiki as a tiddler that is not an [[Image]]."},
{"title":"Bibliography","caption":"An aggregation of sources that might be useful to someone studying a particular topic the ZK touches on.","color":"#ff0000","created":"20200808024704618","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210827233651142","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"A ''bibliography'' provides a concise list of useful [[Source]]s for someone who's unfamiliar with a topic that's treated at length in the Zettelkasten, without requiring the reader (or the author, hoping to find them some references!) to aimlessly wander through the ConceptWeb hoping to find more sources.\n\n\n!! Current bibliographies in this Zettelkasten\n\n\u003C\u003Clist-links \"[!is[system]tag[Bibliography]]\">>\n\n\n!! How bibliographies work\n\nEach bibliography has its own tiddler:\n\n* The tiddler can be named anything, but conventionally ends with the word `Bibliography`.\n* It should be tagged `bibliography`.\n* It should have a `bibliography` field containing a //bibliography key//, which will be used to connect it to sources. The bibliography key is usually a short string of letters and numbers, but may contain other characters if needed for some reason.\n* The body of the tiddler can contain information about the bibliography, or even interactive features, as desired. Where the sources contained in the bibliography should be displayed, transclude the bibliography-list template: `{{||$:/sib/Templates/Topical/BibliographyList}}`.\n\nA source (or a [[Publication]]) is placed in a bibliography as follows:\n\n* The bibliography key (see above) is added to the `bibliography` field of the source. `bibliography` is a list field, so a source can be contained in multiple bibliographies if appropriate; all the bibliography keys are added to this field, separated by spaces. If the bibliography key itself contains spaces, it should be placed in double square brackets, like `[[my bibliography key]]` (as with any other list field).\n* A short summary of the source should be added to the `description` field of the source; this will be used on the list.\n* The `caption`, `year`, `medium`, and, if available, `url` fields will also be used on the bibliography list and should be filled out with appropriate metadata; see [[Source]] for details."},
{"title":"Class","caption":"A [[metasource|Metasource]] representing a class or course which uses multiple [[Source]]s.","color":"#ff0000","created":"20200312153108522","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825155749259","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}"},
{"title":"Conversation","caption":"Raw notes or reflections on a conversation or meeting with someone.","color":"#ff0000","created":"20200702013212138","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825155537333","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}"},
{"title":"CopyrightNotice","created":"20210523180344305","modified":"20210525001746812","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"A TiddlyWiki [[blurs the lines between code and data|CodeDataEquivalence]], but most [[TiddlyWiki]]s can be divided into two types of tiddlers, ''content'' and ''system tiddlers''. These two types of tiddlers are licensed differently.\n\n!! Content\n\n{{$:/config/zettelkasten/copyright/Content}}\n\n!! System tiddlers\n\n{{$:/config/zettelkasten/copyright/System}}"},
{"title":"Footnote","created":"20210917204123567","creator":"soren","modified":"20210917204403789","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"To add a footnote in a Zettelkasten tiddler, use the [[fnote|$:/sib/Macros/fnote]] macro in the spot where you want to create the footnote. Footnotes are primarily accessed by hovering over the number; the ReferenceExplorer also displays footnotes on a [[footnotes tab|$:/sib/refexplorer/Footnotes]].\n\nInternal links in footnotes don't appear in the reference explorer, so they shouldn't be used to discuss concepts critical to the central idea of the tiddler. In general, I use footnotes more in quasi-essays aimed primarily at discussing something in detail or sharing information with the public than in tightly focused and internally-bound notes."},
{"title":"Idea","caption":"The core of the Zettelkasten. Ideas are tiddlers that describe some concept, thought, lesson, or similar topic.","color":"#ff0000","created":"20210721004110425","creator":"soren","description":"","icon":"$:/core/images/tag-button","modified":"20210825160340787","modifier":"soren","refexplorer-hide":"true","tags":"Public Meta","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\n!! Fields\n\n; description\n: When possible, the main idea of a tiddler should be summed up into a sentence or two and placed in the `description` field. This be displayed next to a gem icon underneath the tiddler's title, and it will appear in a tooltip when you hover over the tiddler in the ReferenceExplorer. (If no `description` field is available, a short excerpt of the beginning of the tiddler is shown in this tooltip.)\n; es\n: The [[epistemic status|EpistemicStatuses]] of this idea, if one is appropriate. This may be chosen from the drop-down in the upper-right of the tiddler in view mode.\n; universe\n: If this idea is associated with a fictional [[Source]], that source's universe key.\n; url\n: If this idea has a single URL strongly associated with it (for instance, a blog post describing the idea that everyone knows about), it may be placed here."},
{"title":"Image","caption":"Any image in a standard format embedded within the wiki for transclusion in other tiddlers.","color":"#ff0000","created":"20200118044638935","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825160451093","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}} See also [[Attachment]]."},
{"title":"Index","caption":"A tiddler that serves primarily as an overview of or collection of links to other information, containing little information of its own.","color":"#ff0000","created":"20200314213905906","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825160727571","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"//Not to be confused with [[Indexing]], the art and science of creating lists of keywords that describe where information is to be found in a resource.//\n\nAn ''index'' tiddler serves primarily as an overview of or collection of links to other information, containing little information of its own. These tiddlers become more and more useful the larger your Zettelkasten gets; you can use them to create ad-hoc lists or hierarchies or keep track of ideas in a specific topic you're currently working on.\n\nIndex tiddlers don't have any special naming conventions or fields."},
{"title":"Journal","caption":"Journal tiddlers describe events as they happen. They might be written daily or near-daily to describe what's going on, or be created for a particular event.","color":"#ff0000","created":"20200425035307739","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210828132307946","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\nJournal tiddlers don't have any special naming conventions or fields."},
{"title":"Meta","caption":"Content that is about the ZettelKasten itself or its software.","color":"#ff0000","created":"20200115231440413","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825160942535","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\nMeta tiddlers don't have any special naming conventions or fields."},
{"title":"NeedsAttention","caption":"Needing attention","color":"#fff12e","created":"20200115231518581","creator":"soren","icon":"$:/core/images/info-button","modified":"20201203021140893","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[\u003CcurrentTiddler>!is[blank]]\">\nMarks tiddlers that need some kind of work done on them not defined by another existing tag (e.g., NeedsExcision, NeedsPhotograph, [[Stub]]).\n\u003C/$list>\n\n\u003C$list filter=\"[\u003CcurrentTiddler>is[blank]then[true]]\">\n \u003C$list filter=\"[tag[NeedsAttention]]\">\n\t\t\u003C$link/>\u003Cbr>\n\t\u003C/$list>\n\u003C/$list>"},
{"title":"NeedsExcision","caption":"Needing excision","color":"#fff12e","created":"20200117032011552","creator":"soren","icon":"$:/core/images/new-here-button","modified":"20201203021151197","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[\u003CcurrentTiddler>!is[blank]]\">\nArticles that are not atomic and need to be split into pieces.\n\u003C/$list>\n\n\u003C$list filter=\"[\u003CcurrentTiddler>is[blank]then[true]]\">\n \u003C$list filter=\"[tag[NeedsExcision]]\">\n\t\t\u003C$link />\u003Cbr>\n\t\u003C/$list>\n\u003C/$list>"},
{"title":"NeedsPhotograph","color":"#fff12e","created":"20200203142752768","creator":"soren","icon":"$:/core/images/new-here-button","modified":"20210102041913072","modifier":"soren","tags":"Meta","type":"text/vnd.tiddlywiki","text":"Tag for things that would do well to have a picture of some kind added for illustration purposes."},
{"title":"NeedsRemoval","caption":"Items that were placed in the ZK due to convenience but do not really belong and should be migrated to another notes system.","color":"#fff12e","created":"20200325230351650","creator":"soren","icon":"$:/core/images/info-button","modified":"20210825122842375","modifier":"soren","tags":"Meta","type":"text/vnd.tiddlywiki","text":"Tag for items that have drifted into the ZettelKasten but do not belong and should be removed to another notes source."},
{"title":"Notes","caption":"Raw notes from an ephemeral or non-print source such as a lecture.","color":"#ff0000","created":"20200512003031926","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825161003319","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\nNotes tiddlers don't have any special naming conventions or fields."},
{"title":"OpenQuestion","caption":"Open questions","created":"20200325232310538","creator":"soren","description":"Tiddlers that pose questions that don't currently have answers.","modified":"20210920155901913","modifier":"soren","tags":"Meta Tool","tooltype":"aggregator","type":"text/vnd.tiddlywiki","text":"\u003C$list filter=\"[\u003CcurrentTiddler>!is[blank]!is[system]]\">\n\tTarget tiddler for questions I'm pondering and don't know how to answer. To get your question included, just start a phrase in the text with `OpenQuestion:`.\n\n\t\u003Cul>\n\t\u003C$list filter=\"[all[current]backlinks[]!is[system]![OurProjectSurface]![Questions]]\">\n\t\u003Cli>\u003C$link to=\u003C\u003CcurrentTiddler>>>\u003C\u003CcurrentTiddler>>\u003C/$link>\u003C/li>\n\t\u003C/$list>\n\t\u003C/ul>\n\u003C/$list>\n\n\u003C$list filter=\"[\u003CcurrentTiddler>is[blank]then[true]]\">\n \u003C$list filter=\"[[OpenQuestion]backlinks[]!is[system]![OurProjectSurface]![Questions]]\">\n\t\t\u003C$link to=\u003C\u003CcurrentTiddler>>/>\u003Cbr>\n\t\u003C/$list>\n\u003C/$list>"},
{"title":"OurNamingConventions","created":"20200115225047720","creator":"soren","modified":"20210920205010621","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"In order to help keep track of all the entries here, certain [[NamingConvention]]s are observed on tiddler titles. Titles serve as [[IdeaApi]]s, so need to be clear and consistent.\n\n!!! Casing\n\nTiddlyWiki titles are case-sensitive, which can cause some irritation when you accidentally create tiddlers that differ only in case. These rules help to keep the capitalization consistent and avoid such confusion:\n\n* Titles should generally be WikiCamelCase (really, PascalCase, but everyone in the wiki world calls it CamelCase). However, a single-word concept or title should not have its capitalization mangled or gratuitous words added for the sole purpose of making it into a ~CamelCase title; it should simply be rendered as the single word.\n** It is, however, OK and encouraged to spell out a number or standard abbreviation where this enables a match with the ~CamelCase pattern, e.g., NineteenEightyFour. This tends to read better anyway.\n* When writing ~CamelCase titles, capitalization is normalized as if all components were normal words. Acronyms do not retain upper-casing or proprietary weirdness. So it is QwertyResidue, not *QWERTYResidue; TheAdoSupportTeam, not *~TheADOSupportTeam.\n** But acronyms and proprietary weirdness not incorporated into a ~CamelCase word do retain their capitalization: [[BDFL]], not *Bdfl; [[LaTeX]], not *Latex.\n* Barring proprietary weirdness (e.g., [[xkcd]]), titles always begin with a capital letter.\n\n\n!!! Wording\n\n* Titles, when they are nouns, are always singular.\n** But names of organizations (e.g., TheManitouSingers) and titles of sources (e.g., ComputerStupidities) should not have their number mangled to match.\n** The last word of a phrasal title might be pluralized. This is fine as long as the title as a whole is not a plural noun. E.g., SpacedRepetitionEncouragesFloatingIdeas is fine.\n\n* `The` may not begin any title which does not refer to an organization or group of people (see //Type patterns//, below). `The` should simply be omitted in such cases; e.g., GreatGatsby, not *~TheGreatGatsby. It's often hard to remember if `The` is part of the title anyway!\n\n* Abbreviations should be avoided unless they are standard/genericized (e.g., SQL, HTML).\n\n* Numbers should be spelled out unless this looks silly, especially when they're small (e.g., EightSeasons, not *8Seasons).\n\n* Punctuation, including apostrophes, is removed, and accented characters are turned to standard Latin letters, in titles. This avoids confusion about whether this was done, as well as possible quoting and encoding issues in filenames, URLs, etc. The correct spelling should be used within the tiddler.\n\n* If the tiddler is about the relationship between two things, or discusses two things, it should place those two things in alphabetical order within the title, absent a strong reason to do otherwise.\n\n!!! Type patterns\n\nTitles of certain [[ZettelkastenCardType]]s follow specific patterns:\n\n* //PAO//, ''^(Mr|Ms|The)[A-Z][a-zA-Z]+'': Identifies a person, author, or organization. 'The' is used for nongendered, impersonal sources.\n* //Source//, ''^[A-Z][a-zA-Z]*[0-9]{4,8}'': Identifies a source (an individual instance of a book, article, or other medium). Typically the page will note it as written by a //PAO//. The final number should be the publication date to as many digits of precision as known.\n* //Image//, ''.*\\.(png|jpg|gif)$'': Identifies an image embedded in the wiki.\n* //Meta//, ''^Our[A-Z][a-zA-Z]+'': Something (like this article) that discusses the wiki rather than an idea.\n\n!!! Looser conventions\n\nThese aren't types, but are generally conventions I try to follow.\n\n* ''My'' before a name indicates that it's a work I created."},
{"title":"PAO","caption":"A Person, Animal, or Organization exhibiting agency.","color":"#ff0000","created":"20200115231447676","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210827234120899","modifier":"soren","refexplorer-hide":"true","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"\\define invalidFilter()\n[tag[PAO]!prefix[Mr]!prefix[Ms]!prefix[Mx]!prefix[The]]\n\\end\n\nTiddler type, the name of which stands for “''P''erson, ''A''nimal, or ''O''rganization.”\n\nSee $:/sib/Tools/PaoList for a list of all PAOs, and $:/sib/Tools/MissingPeople to find PAOs that have been referenced but not had a tiddler created.\n\n!! Linking\n\nIf a person, animal, or organization is referenced anywhere in the wiki, it should virtually always have its name written ~CamelCase to create a PAO tiddler. The tiddler need not contain any meaningful content; it can be blank except for the title and the PAO tag. This is a matter of searchability -- if you do this, you can quickly jump to all tiddlers that mention a person if all you remember is the person's name, and you can move between ideas that mention the person using the ReferenceExplorer.\n\nSources should be connected to their authors by linking to the author or authors' PAO tiddler somewhere in the body text.\n\n\n!! Naming conventions\n\nIn addition to being tagged `PAO`, PAOs should have names which begin with `Mr`, `Ms`, or `The`. The first two indicate a person/animal and indicate gender (my intention is to use `Mx` for non-binary people, but I haven't needed it yet). `The` is used for organizations. Note that the titles of tiddlers which do not represent organizations should consequently not begin with //The// to avoid confusion; see OurNamingConventions.\n\n\n!! Tags and fields\n\nP's, A's and O's need not be part of ConsensusPhysicalReality. When one comes from a work of fiction, it should additionally be tagged \u003C\u003Ctag Character>> and have its `universe` field populated with an appropriate universe key (see the explanation in [[Source]]).\n\n\n!! Private person replacement\n\nWhen building a private wiki using the `tzk` build tools, the `replace_private_people()` builder may be used to replace the names of people who aren't tagged \u003C\u003Ctag Public>> throughout the wiki, in order to prevent anything you say about those people from becoming searchable on the web.\n\n\n!! In this wiki\n\nCurrently, there are \u003C$count filter=\"[tag[PAO]]\"/> PAOs:\n\n\u003Cul>\n\t\u003Cli>\u003C$count filter=\"[tag[PAO]prefix[Mr]]\"/> male\u003C/li>\n\t\u003Cli>\u003C$count filter=\"[tag[PAO]prefix[Ms]]\"/> female\u003C/li>\n\t\u003Cli>\u003C$count filter=\"[tag[PAO]prefix[The]]\"/> organizations\u003C/li>\n\t\u003Cli>\n\t\t\u003C$count filter=\u003C\u003CinvalidFilter>>/> folks with an unrecognized PAO prefix:\n\t\t\u003Cul>\n\t\t\t\u003C$list filter=\u003C\u003CinvalidFilter>> >\n\t\t\t\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\n\t\t\t\u003C/$list>\n\t\t\u003C/ul>\n\t\u003C/li>\n\u003C/ul>"},
{"title":"Place","caption":"A physical location in ConsensusPhysicalReality or in a fictional world.","color":"#ff0000","created":"20200121032316713","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210910155618846","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\nFor places that have usable addresses or GPS coordinates, you can configure maps and directions to appear at the bottom of the tiddler via Google Maps. To do this in an empty edition of this Zettelkasten:\n\n# Set up a Maps Embed API key in Google Cloud Platform (this is rather technical, so if you don't know what an API key is, you may want to skip this feature). Set $:/config/zettelkasten/gis/GMapsApiKey to your new key.\n# (Optionally) set the `Address` index of the `PrivateMetadata` data tiddler to your home address; this will save you having to type it in every time you want directions from your home to somewhere else. Since this isn't a system tiddler, it won't be published unless you check the “publish this tiddler” option.\n# Turn on the //GIS tools// [[feature flag|$:/sib/Tools/FeatureFlags]].\n\nYou should now see a form on any tiddler tagged \u003C\u003Ctag Place>> where you can enter latitude and longitude and zoom level for the place. If you don't already have a favorite tool for finding latitude and longitude, in Google Maps, you can right-click on any point and select the first option to copy the coordinates to your clipboard. I usually start with a zoom level of 12 to 15 depending on the size of the place (you can see the current zoom level at the end of a Google Maps URL, followed by a //z//).\n\nAfter clicking //Add//, you'll be able to see maps, directions, or raw data for the location. The data is stored in the `gis-lat`, `gis-long`, and `gis-zoom` fields; you can also add a `gis-address` field if you'd like to display a street address on the //Info// tab."},
{"title":"PrivateChunk","color":"#000001","created":"20200509180315396","creator":"soren","icon":"$:/core/images/excise","modified":"20210901215354072","modifier":"soren","refexplorer-hide":"true","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"\u003C!-- not being used as a template -->\n\u003C$list filter=\"[all[current]field:title[PrivateChunk]]\">\n\nTiddlers whose subject matter is sensitive or personal are not made publicly available. However, sometimes a topic is almost entirely fit for publication, but you'd like to add a little bit of private commentary to it. In this case, you can use a //private chunk//. This is a separate tiddler, generally named the same as the public tiddler followed by a `/p`, and tagged \u003C\u003Ctag PrivateChunk>> (this tiddler). To include the private chunk in the public tiddler, it is transcluded, using `PrivateChunk` (this tiddler again) as a template. Some list magic hides this bit and shows the template bit when this is done.\n\nSince you won't mark the private chunk as public, when the wiki is published, the private chunks don't come along. The title must not contain any sensitive information, since the transclusion directive will still be present in the source, but this shouldn't be a concern if the naming convention above is followed.\n\nThe lock button {{$:/core/images/locked-padlock}} on the editor toolbar can be used to create a new private chunk from the selected text.\n\n\u003C/$list>\n\n\u003C!-- being used as a template -->\n\u003C$list filter=\"[all[current]is[tiddler]!field:title[PrivateChunk]]\" variable=_>\n\t\u003C$list filter=\"[all[current]!tag[PrivateChunk]]\" variable=_>\n\t\t\u003Cspan style=\"color: yellow;\">Warning: This private chunk is not tagged PrivateChunk.\u003C/span>\n\t\t\u003C$fieldmangler tiddler=\u003C\u003CcurrentTiddler>>>\n\t\t\u003C$button>\n\t\t \u003C$action-sendmessage $message=\"tm-add-tag\" $param=\"PrivateChunk\"/>\n\t\t Add tag\n\t\t\u003C/$button>\n\t\t\u003C/$fieldmangler>\n\t\u003C/$list>\n\n \u003Cdiv class=\"sib-private-chunk\">\u003C$link to=\u003C\u003CcurrentTiddler>>>private\u003C/$link>:\n\t\t\u003C$transclude name=\u003C\u003CcurrentTiddler>> mode=\"block\"/>\n\t\u003C/div>\n\u003C/$list>"},
{"title":"Public","color":"#000001","created":"20200507032259254","icon":"$:/core/images/globe","modified":"20200512034215900","refexplorer-hide":"true","tags":"Public Meta","type":"text/vnd.tiddlywiki","text":"All tiddlers tagged with this tag, as well as all system tiddlers, will be included in the nightly upload to https://zettelkasten.sorenbjornstad.com.\n\nTiddlers not tagged Public may still be redlinked from elsewhere in the wiki, which may be useful for establishing connections between other ideas."},
{"title":"Publication","caption":"A [[metasource|Metasource]] consisting of an organization or location that publishes or groups together multiple Sources.","color":"#ff0000","created":"20200201045921067","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825162348971","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\nFor instance, magazines, newspapers, journals, book series, and websites are publications. Articles, papers, individual books, and pages on websites are [[Source]]s.\n\nPublications have no special naming conventions or fields."},
{"title":"PublicHomepage","created":"20200507143136944","creator":"soren","list":"PublicHomepage/Navigating PublicHomepage/Organization [[PublicHomepage/Points of Interest]] [[PublicHomepage/No Warranty]] PublicHomepage/Copyright PublicHomepage/Contact [[PublicHomepage/Video Tour]]","modified":"20211007181213586","modifier":"soren","tags":"Public Meta","type":"text/vnd.tiddlywiki","text":"My Public Homepage Goes Here"},
{"title":"ReferenceExplorer","created":"20200410133657263","creator":"soren","modified":"20210920192218164","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"At the bottom of every tiddler in the Zettelkasten is the ''Reference Explorer'', which shows all links between tiddlers, separated into tabs based on the ZettelkastenCardType, and allows quickly navigating through them. Several auxiliary tabs (//Link graph// and //Footnotes//) are available as well.\n\nOnly the tabs that have at least one item on them for the current tiddler will be shown, and if the current tiddler has no links or relationships at all or is a system tiddler, the reference explorer will not appear.\n\nThe possible tabs are as follows:\n\n* [[Ideas|Idea]]\n* People ([[PAO]] tag)\n* [[Places|Place]]\n* [[Sources|Source]] (and [[Metasources|Metasource]])\n* [[Sinks|Sink]]\n* [[Indexes|Index]]\n* [[Subtiddlers|Subtiddler]] -- tiddlers named for the current tiddler plus some additional characters, usually separated by `/`\n* Link graph -- a graphical view of the outbound links from this tiddler, going several layers deep\n* [[Footnotes|Footnote]] -- display of all footnotes in the current tiddler (you can also hover over a footnote indicator to read it)\n* All -- all the types of links combined into one view\n\nIt's possible to add new tabs or customize the existing ones by editing the tiddlers tagged with [[$:/tags/ReferenceExplorerTab]].\n\nThe behavior of the explorer can be customized per-tiddler by setting the following fields:\n\n* `refexplorer-starttab` -- Instead of starting the Reference Explorer on the first tab that is shown, start it on the tab with this name (`$:/sib/refexplorer/` is prepended to this value to select a tiddler name).\n* `refexplorer-hide` -- if set to `yes`, don't show the Reference Explorer until the user clicks a button. Useful to avoid performance issues on tiddlers that have dozens, hundreds, or thousands of links or tagged tiddlers.\n\nThe Reference Explorer is homegrown for the ZK wiki. It used to use TiddlyTables, but once I settled on how it should work, I rewrote it with pure HTML tables to improve performance (they use much of the CSS from TiddlyTables, so they're hard to tell apart!). Its system tiddlers can be found in `$:/sib/refexplorer`; you can borrow these for another wiki [[under the MIT license|CopyrightNotice]] if you so desire.\n\n\u003C$details summary=\"Flashcards\">\n\u003C\u003Crememberq \"20210123160338153\"\n\t\"What variable must be set manually when trying to transclude the ReferenceExplorer within a nested tiddler (e.g., within a tab)?\"\n\t\"`storyTiddler`\">>\n\t\n\u003C\u003Crememberq \"20210123160402884\"\n\t\"If the ReferenceExplorer shows the references for the wrong tiddler, what variable is most likely set incorrectly?\"\n\t\"`storyTiddler`\">>\n\u003C/$details>"},
{"title":"Sink","caption":"The opposite of a [[Source]]: where ideas leave the system in the form of things I create.","color":"#ff0000","created":"20200226131429312","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210825162301331","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\nSinks are very much like sources in most regards. They use the same naming conventions and fields as [[Source]]s, to the extent that this makes sense."},
{"title":"Source","caption":"A single source of ideas, such as a blog post, book, or musical work. Sources may be part of [[Publication]]s or [[Class]]es.","color":"#ff0000","created":"20200115231452835","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210920171016829","modifier":"soren","refexplorer-hide":"true","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"{{!!caption}}\n\n{{SorenSourceInfo}}\n\n\n!! Naming\n\nThe names of source tiddlers consist of a short CamelCase slug -- possibly the [[mangled|OurNamingConventions]] title, or a description of it if the title is long -- plus, if available, the publication year. The actual title of the source goes in the `caption` field.\n\n\n!! Fields\n\nAs sources often need to be reformatted, displayed in tables, searched in complex ways, and so on, they should have a significant amount of metadata attached in fields.\n\n; bibliography\n: A list of [[bibliographies|Bibliography]] to include this source in.\n; caption\n: The full title and subtitle of the source, as it is known outside the wiki.\n; description\n: A one- or two-sentence explanation of what the source is. Optional, but highly recommended if the source is included in any bibliographies using the `bibliography` field.\n; medium\n: Description of what kind of source this is -- `article`, `book`, `website`, `film`, etc. Use the [[RelationshipValueTool|$:/sib/Tools/RelationshipValueTool]] for a full, up-to-date list.\n; rating\n: An appropriate MediaRating. Optional, but highly recommended if you've finished reading/consuming the source.\n; url\n: If the source is available online and not behind a paywall, a URL leading to the source. Otherwise, don't bother -- anyone who doesn't have a copy will have to do their own research anyway.\n; universe\n: If the source is fiction, an arbitrary //universe key// which is placed on all sources and ideas taking place in the same fictional world. If you're not sure what to use as a universe key, you can just use the title of the source; but if multiple sources share the same universe (say, books in a series) you'll want to use the same key for all of them.\n; year\n: If the source is not published on an ongoing basis (e.g., a website), the year of its publication. Updated editions should use the new copyright date if updated by the author, but not if the edition is merely a re-release by the publisher without substantive changes, or the addition of commentary or introductions.\n\n!!! Only used for books\n\n; format\n: `paperback`, `hardcover`, or `ebook`. Only relevant if //owned//.\n; isbn\n: The ISBN of the edition at issue, without dashes. (This can be scanned in with my barcode reader if a barcode is available.)\n; owned\n: `yes` or `no`\n; readstatus\n: `read` (fully read), `partial` (partly read), `unread` (never read), or `reread` (have read fully, but would be interested in reading again)."},
{"title":"Stub","color":"#fff12e","created":"20200116024803799","creator":"soren","icon":"$:/core/images/new-here-button","modified":"20200530141202429","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"Stub tiddlers, like in [[Wikipedia]] or similar, are those that have been created with a few momentary thoughts, or even just a title, but need more expansion to be useful.\n\nThings don't have to be tagged with \u003C\u003Ctag Stub>> just because they're short. We don't want to go OverEngineering things, because many tiddlers may be dead-ends. If they aren't dead-ends, then we'll end up seeing them again and can improve on them if appropriate. Things should be tagged Stub if we believe the material is inadequate for even the present moment and the only limitation to expanding it is time."},
{"title":"Subtiddler","created":"20210920160651222","creator":"soren","modified":"20210920204851937","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"A ''subtiddler'' is a tiddler which is tightly coupled to another, larger tiddler. It's not an idea of its own, it's a part of some larger idea which benefits from being compartmentalized.\n\nSubtiddlers are identified by containing one or more slashes `/` in their names. The main tiddler or //supertiddler//'s title comes prior to the slash, then the subtiddler's name. There can be multiple levels of hierarchy if needed, but this is generally rare.\n\nSubtiddlers of the current tiddler appear on a [[Subtiddlers tab|$:/sib/refexplorer/Subtiddlers]] of the ReferenceExplorer."},
{"title":"TODO","caption":"To-do items","created":"20201203005550171","creator":"soren","description":"List of all tiddlers which contain a link to TODO.","modified":"20210920155226812","modifier":"soren","tags":"Meta Tool","tooltype":"aggregator","type":"text/vnd.tiddlywiki","text":"\\define todore() \\[\\[TODO\\]\\]:\n\\define splitre() [\\.\\?!](\\s|$)\n\nTo add a TODO item to this list, simply link to [[TODO]].\n\n\u003Cdl>\n\u003C$list filter=\"[[TODO]backlinks[]] -[[TODO]]\" variable=outer>\n \u003C$list filter=\"[\u003Couter>get[text]splitregexp\u003Ctodore>last[]splitregexp\u003Csplitre>first[]]\" variable=inner>\n\t \u003Cdt>\u003C$link to=\u003C\u003Couter>>/>\u003C/dt>\n\t\t\u003Cdd>''TODO:'' \u003C\u003Cinner>>.\u003C/dd>\n\t\u003C/$list>\n\u003C/$list>\n\u003C/dl>"},
{"title":"Tool","caption":"Tiddler that provides miniature widgets helping to perform administrative or search tasks in the ZK.","color":"#ff0000","created":"20200225233351305","creator":"soren","icon":"$:/core/images/tag-button","modified":"20210921153046753","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"A tiddler designed to help you work with the rest of the wiki.\n\nA list of tools can be found at [[$:/sib/Tools]]."},
{"title":"ZettelkastenCardType","created":"20200410135331736","creator":"soren","description":"What types of tiddlers are used within this Zettelkasten?","modified":"20210920160035899","modifier":"soren","tags":"Meta Public","type":"text/vnd.tiddlywiki","text":"This ZettelKasten has tiddlers (also “cards”, or “Zettel” in ZK terminology) of a number of defined //types//. Ideas, are of course, the ZK's //raison d'être//; but the other types are useful because they help to put ideas in context and link them together (e.g., what other ideas did this person have or were found in this source?). Types are identified by the red tags with tag icons next to them.\n\nClick on a type to learn more about what it's used for, its naming conventions, and the fields that should be used on tiddlers of that type.\n\n\u003Cul>\n\t\u003C$list filter=\"[color[#ff0000]!has[draft.of]icon[$:/core/images/tag-button]sort[title]]\">\n\t\t\u003Cli>\u003C$link>{{!!title}}\u003C/$link> -- {{!!caption}}\u003C/li>\n\t\u003C/$list>\n\u003C/ul>"}
]</script><div id="storeArea" style="display:none;"></div>
2021-09-21 16:32:33 +00:00
<!--~~ Library modules ~~-->
<div id="libraryModules" style="display:none;">
<script data-tiddler-library="yes" data-tiddler-title="$:/library/sjcl.js" data-tiddler-type="application/javascript" type="text/javascript">"use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}};
sjcl.cipher.aes=function(a){this.s[0][0][0]||this.O();var b,c,d,e,f=this.s[0][4],g=this.s[1];b=a.length;var h=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid("invalid aes key size");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c&
255]]};
sjcl.cipher.aes.prototype={encrypt:function(a){return t(this,a,0)},decrypt:function(a){return t(this,a,1)},s:[[[],[],[],[],[]],[[],[],[],[],[]]],O:function(){var a=this.s[0],b=this.s[1],c=a[4],d=b[4],e,f,g,h=[],k=[],l,n,m,p;for(e=0;0x100>e;e++)k[(h[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=l||1,g=k[g]||1)for(m=g^g<<1^g<<2^g<<3^g<<4,m=m>>8^m&255^99,c[f]=m,d[m]=f,n=h[e=h[l=h[f]]],p=0x1010101*n^0x10001*e^0x101*l^0x1010100*f,n=0x101*h[m]^0x1010100*m,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][m]=p=p<<24^p>>>8;for(e=
0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)}};
function t(a,b,c){if(4!==b.length)throw new sjcl.exception.invalid("invalid aes block size");var d=a.b[c],e=b[0]^d[0],f=b[c?3:1]^d[1],g=b[2]^d[2];b=b[c?1:3]^d[3];var h,k,l,n=d.length/4-2,m,p=4,r=[0,0,0,0];h=a.s[c];a=h[0];var q=h[1],v=h[2],w=h[3],x=h[4];for(m=0;m<n;m++)h=a[e>>>24]^q[f>>16&255]^v[g>>8&255]^w[b&255]^d[p],k=a[f>>>24]^q[g>>16&255]^v[b>>8&255]^w[e&255]^d[p+1],l=a[g>>>24]^q[b>>16&255]^v[e>>8&255]^w[f&255]^d[p+2],b=a[b>>>24]^q[e>>16&255]^v[f>>8&255]^w[g&255]^d[p+3],p+=4,e=h,f=k,g=l;for(m=
0;4>m;m++)r[c?3&-m:m]=x[e>>>24]<<24^x[f>>16&255]<<16^x[g>>8&255]<<8^x[b&255]^d[p++],h=e,e=f,f=g,g=b,b=h;return r}
sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.$(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<<c)-1},concat:function(a,b){if(0===a.length||0===b.length)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return 32===d?a.concat(b):sjcl.bitArray.$(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;return 0===
b?0:32*(b-1)+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(32*a.length<b)return a;a=a.slice(0,Math.ceil(b/32));var c=a.length;b=b&31;0<c&&b&&(a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return 0===
c},$:function(a,b,c,d){var e;e=0;for(void 0===d&&(d=[]);32<=b;b-=32)d.push(c),c=0;if(0===b)return d.concat(a);for(e=0;e<a.length;e++)d.push(c|a[e]>>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32<b+a?c:d.pop(),1));return d},i:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]},byteswapM:function(a){var b,c;for(b=0;b<a.length;++b)c=a[b],a[b]=c>>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}};
sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++)0===(d&3)&&(e=a[d/4]),b+=String.fromCharCode(e>>>8>>>8>>>8),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++)d=d<<8|a.charCodeAt(c),3===(c&3)&&(b.push(d),d=0);c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};
sjcl.codec.hex={fromBits:function(a){var b="",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\s|0x/g,"");d=a.length;a=a+"00000000";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,4*d)}};
sjcl.codec.base32={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",X:"0123456789ABCDEFGHIJKLMNOPQRSTUV",BITS:32,BASE:5,REMAINING:27,fromBits:function(a,b,c){var d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f="",g=0,h=sjcl.codec.base32.B,k=0,l=sjcl.bitArray.bitLength(a);c&&(h=sjcl.codec.base32.X);for(c=0;f.length*d<l;)f+=h.charAt((k^a[c]>>>g)>>>e),g<d?(k=a[c]<<d-g,g+=e,c++):(k<<=d,g-=d);for(;f.length&7&&!b;)f+="=";return f},toBits:function(a,b){a=a.replace(/\s|=/g,"").toUpperCase();var c=sjcl.codec.base32.BITS,
d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f=[],g,h=0,k=sjcl.codec.base32.B,l=0,n,m="base32";b&&(k=sjcl.codec.base32.X,m="base32hex");for(g=0;g<a.length;g++){n=k.indexOf(a.charAt(g));if(0>n){if(!b)try{return sjcl.codec.base32hex.toBits(a)}catch(p){}throw new sjcl.exception.invalid("this isn't "+m+"!");}h>e?(h-=e,f.push(l^n>>>h),l=n<<c-h):(h+=d,l^=n<<c-h)}h&56&&f.push(sjcl.bitArray.partial(h&56,l,1));return f}};
sjcl.codec.base32hex={fromBits:function(a,b){return sjcl.codec.base32.fromBits(a,b,1)},toBits:function(a){return sjcl.codec.base32.toBits(a,1)}};
sjcl.codec.base64={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fromBits:function(a,b,c){var d="",e=0,f=sjcl.codec.base64.B,g=0,h=sjcl.bitArray.bitLength(a);c&&(f=f.substr(0,62)+"-_");for(c=0;6*d.length<h;)d+=f.charAt((g^a[c]>>>e)>>>26),6>e?(g=a[c]<<6-e,e+=26,c++):(g<<=6,e-=6);for(;d.length&3&&!b;)d+="=";return d},toBits:function(a,b){a=a.replace(/\s|=/g,"");var c=[],d,e=0,f=sjcl.codec.base64.B,g=0,h;b&&(f=f.substr(0,62)+"-_");for(d=0;d<a.length;d++){h=f.indexOf(a.charAt(d));
if(0>h)throw new sjcl.exception.invalid("this isn't base64!");26<e?(e-=26,c.push(g^h>>>e),g=h<<32-e):(e+=6,g^=h<<32-e)}e&56&&c.push(sjcl.bitArray.partial(e&56,g,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.b[0]||this.O();a?(this.F=a.F.slice(0),this.A=a.A.slice(0),this.l=a.l):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};
sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.F=this.Y.slice(0);this.A=[];this.l=0;return this},update:function(a){"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.A=sjcl.bitArray.concat(this.A,a);b=this.l;a=this.l=b+sjcl.bitArray.bitLength(a);if(0x1fffffffffffff<a)throw new sjcl.exception.invalid("Cannot hash more than 2^53 - 1 bits");if("undefined"!==typeof Uint32Array){var d=new Uint32Array(c),e=0;for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,d.subarray(16*e,
16*(e+1))),e+=1;c.splice(0,16*e)}else for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,c.splice(0,16));return this},finalize:function(){var a,b=this.A,c=this.F,b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.l/0x100000000));for(b.push(this.l|0);b.length;)u(this,b.splice(0,16));this.reset();return c},Y:[],b:[],O:function(){function a(a){return 0x100000000*(a-Math.floor(a))|0}for(var b=0,c=2,d,e;64>b;c++){e=!0;for(d=2;d*d<=c;d++)if(0===c%d){e=
!1;break}e&&(8>b&&(this.Y[b]=a(Math.pow(c,.5))),this.b[b]=a(Math.pow(c,1/3)),b++)}}};
function u(a,b){var c,d,e,f=a.F,g=a.b,h=f[0],k=f[1],l=f[2],n=f[3],m=f[4],p=f[5],r=f[6],q=f[7];for(c=0;64>c;c++)16>c?d=b[c]:(d=b[c+1&15],e=b[c+14&15],d=b[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+b[c&15]+b[c+9&15]|0),d=d+q+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(r^m&(p^r))+g[c],q=r,r=p,p=m,m=n+d|0,n=l,l=k,k=h,h=d+(k&l^n&(k^l))+(k>>>2^k>>>13^k>>>22^k<<30^k<<19^k<<10)|0;f[0]=f[0]+h|0;f[1]=f[1]+k|0;f[2]=f[2]+l|0;f[3]=f[3]+n|0;f[4]=f[4]+m|0;f[5]=f[5]+p|0;f[6]=f[6]+r|0;f[7]=
f[7]+q|0}
sjcl.mode.ccm={name:"ccm",G:[],listenProgress:function(a){sjcl.mode.ccm.G.push(a)},unListenProgress:function(a){a=sjcl.mode.ccm.G.indexOf(a);-1<a&&sjcl.mode.ccm.G.splice(a,1)},fa:function(a){var b=sjcl.mode.ccm.G.slice(),c;for(c=0;c<b.length;c+=1)b[c](a)},encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,k=h.bitLength(c)/8,l=h.bitLength(g)/8;e=e||64;d=d||[];if(7>k)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(f=2;4>f&&l>>>8*f;f++);f<15-k&&(f=15-k);c=h.clamp(c,
8*(15-f));b=sjcl.mode.ccm.V(a,b,c,d,e,f);g=sjcl.mode.ccm.C(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),k=f.clamp(b,h-e),l=f.bitSlice(b,h-e),h=(h-e)/8;if(7>g)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(b=2;4>b&&h>>>8*b;b++);b<15-g&&(b=15-g);c=f.clamp(c,8*(15-b));k=sjcl.mode.ccm.C(a,k,c,l,e,b);a=sjcl.mode.ccm.V(a,k.data,c,d,e,b);if(!f.equal(k.tag,a))throw new sjcl.exception.corrupt("ccm: tag doesn't match");
return k.data},na:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,k=h.i;d=[h.partial(8,(b.length?64:0)|d-2<<2|f-1)];d=h.concat(d,c);d[3]|=e;d=a.encrypt(d);if(b.length)for(c=h.bitLength(b)/8,65279>=c?g=[h.partial(16,c)]:0xffffffff>=c&&(g=h.concat([h.partial(16,65534)],[c])),g=h.concat(g,b),b=0;b<g.length;b+=4)d=a.encrypt(k(d,g.slice(b,b+4).concat([0,0,0])));return d},V:function(a,b,c,d,e,f){var g=sjcl.bitArray,h=g.i;e/=8;if(e%2||4>e||16<e)throw new sjcl.exception.invalid("ccm: invalid tag length");
if(0xffffffff<d.length||0xffffffff<b.length)throw new sjcl.exception.bug("ccm: can't deal with 4GiB or more data");c=sjcl.mode.ccm.na(a,d,c,e,g.bitLength(b)/8,f);for(d=0;d<b.length;d+=4)c=a.encrypt(h(c,b.slice(d,d+4).concat([0,0,0])));return g.clamp(c,8*e)},C:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.i;var k=b.length,l=h.bitLength(b),n=k/50,m=n;c=h.concat([h.partial(8,f-1)],c).concat([0,0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!k)return{tag:d,data:[]};for(g=0;g<k;g+=4)g>n&&(sjcl.mode.ccm.fa(g/
k),n+=m),c[3]++,e=a.encrypt(c),b[g]^=e[0],b[g+1]^=e[1],b[g+2]^=e[2],b[g+3]^=e[3];return{tag:d,data:h.clamp(b,l)}}};
sjcl.mode.ocb2={name:"ocb2",encrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");var g,h=sjcl.mode.ocb2.S,k=sjcl.bitArray,l=k.i,n=[0,0,0,0];c=h(a.encrypt(c));var m,p=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4)m=b.slice(g,g+4),n=l(n,m),p=p.concat(l(c,a.encrypt(l(c,m)))),c=h(c);m=b.slice(g);b=k.bitLength(m);g=a.encrypt(l(c,[0,0,0,b]));m=k.clamp(l(m.concat([0,0,0]),g),b);n=l(n,l(m.concat([0,0,0]),g));n=a.encrypt(l(n,l(c,h(c))));
d.length&&(n=l(n,f?d:sjcl.mode.ocb2.pmac(a,d)));return p.concat(k.concat(m,k.clamp(n,e)))},decrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");e=e||64;var g=sjcl.mode.ocb2.S,h=sjcl.bitArray,k=h.i,l=[0,0,0,0],n=g(a.encrypt(c)),m,p,r=sjcl.bitArray.bitLength(b)-e,q=[];d=d||[];for(c=0;c+4<r/32;c+=4)m=k(n,a.decrypt(k(n,b.slice(c,c+4)))),l=k(l,m),q=q.concat(m),n=g(n);p=r-32*c;m=a.encrypt(k(n,[0,0,0,p]));m=k(m,h.clamp(b.slice(c),p).concat([0,
0,0]));l=k(l,m);l=a.encrypt(k(l,k(n,g(n))));d.length&&(l=k(l,f?d:sjcl.mode.ocb2.pmac(a,d)));if(!h.equal(h.clamp(l,e),h.bitSlice(b,r)))throw new sjcl.exception.corrupt("ocb: tag doesn't match");return q.concat(h.clamp(m,p))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.S,e=sjcl.bitArray,f=e.i,g=[0,0,0,0],h=a.encrypt([0,0,0,0]),h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4)h=d(h),g=f(g,a.encrypt(f(h,b.slice(c,c+4))));c=b.slice(c);128>e.bitLength(c)&&(h=f(h,d(h)),c=e.concat(c,[-2147483648,0,0,0]));g=f(g,c);
return a.encrypt(f(d(f(h,d(h))),g))},S:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^135*(a[0]>>>31)]}};
sjcl.mode.gcm={name:"gcm",encrypt:function(a,b,c,d,e){var f=b.slice(0);b=sjcl.bitArray;d=d||[];a=sjcl.mode.gcm.C(!0,a,f,d,c,e||128);return b.concat(a.data,a.tag)},decrypt:function(a,b,c,d,e){var f=b.slice(0),g=sjcl.bitArray,h=g.bitLength(f);e=e||128;d=d||[];e<=h?(b=g.bitSlice(f,h-e),f=g.bitSlice(f,0,h-e)):(b=f,f=[]);a=sjcl.mode.gcm.C(!1,a,f,d,c,e);if(!g.equal(a.tag,b))throw new sjcl.exception.corrupt("gcm: tag doesn't match");return a.data},ka:function(a,b){var c,d,e,f,g,h=sjcl.bitArray.i;e=[0,0,
0,0];f=b.slice(0);for(c=0;128>c;c++){(d=0!==(a[Math.floor(c/32)]&1<<31-c%32))&&(e=h(e,f));g=0!==(f[3]&1);for(d=3;0<d;d--)f[d]=f[d]>>>1|(f[d-1]&1)<<31;f[0]>>>=1;g&&(f[0]^=-0x1f000000)}return e},j:function(a,b,c){var d,e=c.length;b=b.slice(0);for(d=0;d<e;d+=4)b[0]^=0xffffffff&c[d],b[1]^=0xffffffff&c[d+1],b[2]^=0xffffffff&c[d+2],b[3]^=0xffffffff&c[d+3],b=sjcl.mode.gcm.ka(b,a);return b},C:function(a,b,c,d,e,f){var g,h,k,l,n,m,p,r,q=sjcl.bitArray;m=c.length;p=q.bitLength(c);r=q.bitLength(d);h=q.bitLength(e);
g=b.encrypt([0,0,0,0]);96===h?(e=e.slice(0),e=q.concat(e,[1])):(e=sjcl.mode.gcm.j(g,[0,0,0,0],e),e=sjcl.mode.gcm.j(g,e,[0,0,Math.floor(h/0x100000000),h&0xffffffff]));h=sjcl.mode.gcm.j(g,[0,0,0,0],d);n=e.slice(0);d=h.slice(0);a||(d=sjcl.mode.gcm.j(g,h,c));for(l=0;l<m;l+=4)n[3]++,k=b.encrypt(n),c[l]^=k[0],c[l+1]^=k[1],c[l+2]^=k[2],c[l+3]^=k[3];c=q.clamp(c,p);a&&(d=sjcl.mode.gcm.j(g,h,c));a=[Math.floor(r/0x100000000),r&0xffffffff,Math.floor(p/0x100000000),p&0xffffffff];d=sjcl.mode.gcm.j(g,d,a);k=b.encrypt(e);
d[0]^=k[0];d[1]^=k[1];d[2]^=k[2];d[3]^=k[3];return{tag:q.bitSlice(d,0,f),data:c}}};sjcl.misc.hmac=function(a,b){this.W=b=b||sjcl.hash.sha256;var c=[[],[]],d,e=b.prototype.blockSize/32;this.w=[new b,new b];a.length>e&&(a=b.hash(a));for(d=0;d<e;d++)c[0][d]=a[d]^909522486,c[1][d]=a[d]^1549556828;this.w[0].update(c[0]);this.w[1].update(c[1]);this.R=new b(this.w[0])};
sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a){if(this.aa)throw new sjcl.exception.invalid("encrypt on already updated hmac called!");this.update(a);return this.digest(a)};sjcl.misc.hmac.prototype.reset=function(){this.R=new this.W(this.w[0]);this.aa=!1};sjcl.misc.hmac.prototype.update=function(a){this.aa=!0;this.R.update(a)};sjcl.misc.hmac.prototype.digest=function(){var a=this.R.finalize(),a=(new this.W(this.w[1])).update(a).finalize();this.reset();return a};
sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E4;if(0>d||0>c)throw new sjcl.exception.invalid("invalid params to pbkdf2");"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,k,l=[],n=sjcl.bitArray;for(k=1;32*l.length<(d||1);k++){e=f=a.encrypt(n.concat(b,[k]));for(g=1;g<c;g++)for(f=a.encrypt(f),h=0;h<f.length;h++)e[h]^=f[h];l=l.concat(e)}d&&(l=n.clamp(l,d));return l};
sjcl.prng=function(a){this.c=[new sjcl.hash.sha256];this.m=[0];this.P=0;this.H={};this.N=0;this.U={};this.Z=this.f=this.o=this.ha=0;this.b=[0,0,0,0,0,0,0,0];this.h=[0,0,0,0];this.L=void 0;this.M=a;this.D=!1;this.K={progress:{},seeded:{}};this.u=this.ga=0;this.I=1;this.J=2;this.ca=0x10000;this.T=[0,48,64,96,128,192,0x100,384,512,768,1024];this.da=3E4;this.ba=80};
sjcl.prng.prototype={randomWords:function(a,b){var c=[],d;d=this.isReady(b);var e;if(d===this.u)throw new sjcl.exception.notReady("generator isn't seeded");if(d&this.J){d=!(d&this.I);e=[];var f=0,g;this.Z=e[0]=(new Date).valueOf()+this.da;for(g=0;16>g;g++)e.push(0x100000000*Math.random()|0);for(g=0;g<this.c.length&&(e=e.concat(this.c[g].finalize()),f+=this.m[g],this.m[g]=0,d||!(this.P&1<<g));g++);this.P>=1<<this.c.length&&(this.c.push(new sjcl.hash.sha256),this.m.push(0));this.f-=f;f>this.o&&(this.o=
f);this.P++;this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.L=new sjcl.cipher.aes(this.b);for(d=0;4>d&&(this.h[d]=this.h[d]+1|0,!this.h[d]);d++);}for(d=0;d<a;d+=4)0===(d+1)%this.ca&&y(this),e=z(this),c.push(e[0],e[1],e[2],e[3]);y(this);return c.slice(0,a)},setDefaultParanoia:function(a,b){if(0===a&&"Setting paranoia=0 will ruin your security; use it only for testing"!==b)throw new sjcl.exception.invalid("Setting paranoia=0 will ruin your security; use it only for testing");this.M=a},addEntropy:function(a,
b,c){c=c||"user";var d,e,f=(new Date).valueOf(),g=this.H[c],h=this.isReady(),k=0;d=this.U[c];void 0===d&&(d=this.U[c]=this.ha++);void 0===g&&(g=this.H[c]=0);this.H[c]=(this.H[c]+1)%this.c.length;switch(typeof a){case "number":void 0===b&&(b=1);this.c[g].update([d,this.N++,1,b,f,1,a|0]);break;case "object":c=Object.prototype.toString.call(a);if("[object Uint32Array]"===c){e=[];for(c=0;c<a.length;c++)e.push(a[c]);a=e}else for("[object Array]"!==c&&(k=1),c=0;c<a.length&&!k;c++)"number"!==typeof a[c]&&
(k=1);if(!k){if(void 0===b)for(c=b=0;c<a.length;c++)for(e=a[c];0<e;)b++,e=e>>>1;this.c[g].update([d,this.N++,2,b,f,a.length].concat(a))}break;case "string":void 0===b&&(b=a.length);this.c[g].update([d,this.N++,3,b,f,a.length]);this.c[g].update(a);break;default:k=1}if(k)throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");this.m[g]+=b;this.f+=b;h===this.u&&(this.isReady()!==this.u&&A("seeded",Math.max(this.o,this.f)),A("progress",this.getProgress()))},
isReady:function(a){a=this.T[void 0!==a?a:this.M];return this.o&&this.o>=a?this.m[0]>this.ba&&(new Date).valueOf()>this.Z?this.J|this.I:this.I:this.f>=a?this.J|this.u:this.u},getProgress:function(a){a=this.T[a?a:this.M];return this.o>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.D){this.a={loadTimeCollector:B(this,this.ma),mouseCollector:B(this,this.oa),keyboardCollector:B(this,this.la),accelerometerCollector:B(this,this.ea),touchCollector:B(this,this.qa)};if(window.addEventListener)window.addEventListener("load",
this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new sjcl.exception.bug("can't attach event");
this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",
this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(a,b){this.K[a][this.ga++]=b},removeEventListener:function(a,b){var c,d,e=this.K[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;c<f.length;c++)d=f[c],delete e[d]},la:function(){C(this,1)},oa:function(a){var b,c;try{b=a.x||a.clientX||a.offsetX||0,c=a.y||a.clientY||a.offsetY||0}catch(d){c=b=0}0!=b&&0!=c&&this.addEntropy([b,c],2,"mouse");C(this,0)},qa:function(a){a=
a.touches[0]||a.changedTouches[0];this.addEntropy([a.pageX||a.clientX,a.pageY||a.clientY],1,"touch");C(this,0)},ma:function(){C(this,2)},ea:function(a){a=a.accelerationIncludingGravity.x||a.accelerationIncludingGravity.y||a.accelerationIncludingGravity.z;if(window.orientation){var b=window.orientation;"number"===typeof b&&this.addEntropy(b,1,"accelerometer")}a&&this.addEntropy(a,2,"accelerometer");C(this,0)}};
function A(a,b){var c,d=sjcl.random.K[a],e=[];for(c in d)d.hasOwnProperty(c)&&e.push(d[c]);for(c=0;c<e.length;c++)e[c](b)}function C(a,b){"undefined"!==typeof window&&window.performance&&"function"===typeof window.performance.now?a.addEntropy(window.performance.now(),b,"loadtime"):a.addEntropy((new Date).valueOf(),b,"loadtime")}function y(a){a.b=z(a).concat(z(a));a.L=new sjcl.cipher.aes(a.b)}function z(a){for(var b=0;4>b&&(a.h[b]=a.h[b]+1|0,!a.h[b]);b++);return a.L.encrypt(a.h)}
function B(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6);
a:try{var D,E,F,G;if(G="undefined"!==typeof module&&module.exports){var H;try{H=require("crypto")}catch(a){H=null}G=E=H}if(G&&E.randomBytes)D=E.randomBytes(128),D=new Uint32Array((new Uint8Array(D)).buffer),sjcl.random.addEntropy(D,1024,"crypto['randomBytes']");else if("undefined"!==typeof window&&"undefined"!==typeof Uint32Array){F=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(F);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(F);
else break a;sjcl.random.addEntropy(F,1024,"crypto['getRandomValues']")}}catch(a){"undefined"!==typeof window&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(a))}
sjcl.json={defaults:{v:1,iter:1E4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ja:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.g({iv:sjcl.random.randomWords(4,0)},e.defaults),g;e.g(f,c);c=f.adata;"string"===typeof f.salt&&(f.salt=sjcl.codec.base64.toBits(f.salt));"string"===typeof f.iv&&(f.iv=sjcl.codec.base64.toBits(f.iv));if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||"string"===typeof a&&100>=f.iter||64!==f.ts&&96!==f.ts&&128!==f.ts||128!==f.ks&&192!==f.ks&&0x100!==f.ks||2>f.iv.length||
4<f.iv.length)throw new sjcl.exception.invalid("json encrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,f),a=g.key.slice(0,f.ks/32),f.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.publicKey&&(g=a.kem(),f.kemtag=g.tag,a=g.key.slice(0,f.ks/32));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));"string"===typeof c&&(f.adata=c=sjcl.codec.utf8String.toBits(c));g=new sjcl.cipher[f.cipher](a);e.g(d,f);d.key=a;f.ct="ccm"===f.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&
b instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.encrypt(g,b,f.iv,c,f.ts):sjcl.mode[f.mode].encrypt(g,b,f.iv,c,f.ts);return f},encrypt:function(a,b,c,d){var e=sjcl.json,f=e.ja.apply(e,arguments);return e.encode(f)},ia:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.g(e.g(e.g({},e.defaults),b),c,!0);var f,g;f=b.adata;"string"===typeof b.salt&&(b.salt=sjcl.codec.base64.toBits(b.salt));"string"===typeof b.iv&&(b.iv=sjcl.codec.base64.toBits(b.iv));if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||"string"===
typeof a&&100>=b.iter||64!==b.ts&&96!==b.ts&&128!==b.ts||128!==b.ks&&192!==b.ks&&0x100!==b.ks||!b.iv||2>b.iv.length||4<b.iv.length)throw new sjcl.exception.invalid("json decrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,b),a=g.key.slice(0,b.ks/32),b.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.secretKey&&(a=a.unkem(sjcl.codec.base64.toBits(b.kemtag)).slice(0,b.ks/32));"string"===typeof f&&(f=sjcl.codec.utf8String.toBits(f));g=new sjcl.cipher[b.cipher](a);f="ccm"===
b.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&b.ct instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.decrypt(g,b.ct,b.iv,b.tag,f,b.ts):sjcl.mode[b.mode].decrypt(g,b.ct,b.iv,f,b.ts);e.g(d,b);d.key=a;return 1===c.raw?f:sjcl.codec.utf8String.fromBits(f)},decrypt:function(a,b,c,d){var e=sjcl.json;return e.ia(a,e.decode(b),c,d)},encode:function(a){var b,c="{",d="";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid("json encode: invalid property name");c+=d+'"'+
b+'":';d=",";switch(typeof a[b]){case "number":case "boolean":c+=a[b];break;case "string":c+='"'+escape(a[b])+'"';break;case "object":c+='"'+sjcl.codec.base64.fromBits(a[b],0)+'"';break;default:throw new sjcl.exception.bug("json encode: unsupported type");}}return c+"}"},decode:function(a){a=a.replace(/\s/g,"");if(!a.match(/^\{.*\}$/))throw new sjcl.exception.invalid("json decode: this isn't json!");a=a.replace(/^\{|\}$/g,"").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^\s*(?:(["']?)([a-z][a-z0-9]*)\1)\s*:\s*(?:(-?\d+)|"([a-z0-9+\/%*_.@=\-]*)"|(true|false))$/i)))throw new sjcl.exception.invalid("json decode: this isn't json!");
null!=d[3]?b[d[2]]=parseInt(d[3],10):null!=d[4]?b[d[2]]=d[2].match(/^(ct|adata|salt|iv)$/)?sjcl.codec.base64.toBits(d[4]):unescape(d[4]):null!=d[5]&&(b[d[2]]="true"===d[5])}return b},g:function(a,b,c){void 0===a&&(a={});if(void 0===b)return a;for(var d in b)if(b.hasOwnProperty(d)){if(c&&void 0!==a[d]&&a[d]!==b[d])throw new sjcl.exception.invalid("required parameter overridden");a[d]=b[d]}return a},sa:function(a,b){var c={},d;for(d in a)a.hasOwnProperty(d)&&a[d]!==b[d]&&(c[d]=a[d]);return c},ra:function(a,
b){var c={},d;for(d=0;d<b.length;d++)void 0!==a[b[d]]&&(c[b[d]]=a[b[d]]);return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.pa={};sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.pa,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=void 0===b.salt?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};
"undefined"!==typeof module&&module.exports&&(module.exports=sjcl);"function"===typeof define&&define([],function(){return sjcl});
</script>
</div>
<!--~~ Boot kernel prologue ~~-->
<div id="bootKernelPrefix" style="display:none;">
<script data-tiddler-title="$:/boot/bootprefix.js" data-tiddler-type="application/javascript" type="text/javascript">/*\
title: $:/boot/bootprefix.js
type: application/javascript
This file sets up the globals that need to be available when JavaScript modules are executed in the browser. The overall sequence is:
# BootPrefix.js
# <module definitions>
# Boot.js
See Boot.js for further details of the boot process.
\*/
var _bootprefix = (function($tw) {
"use strict";
$tw = $tw || Object.create(null);
$tw.boot = $tw.boot || Object.create(null);
// Detect platforms
if(!("browser" in $tw)) {
$tw.browser = typeof(window) !== "undefined" ? {} : null;
}
if(!("node" in $tw)) {
$tw.node = typeof(process) === "object" ? {} : null;
}
if(!("nodeWebKit" in $tw)) {
$tw.nodeWebKit = $tw.node && global.window && global.window.nwDispatcher ? {} : null;
}
// Set default boot tasks
$tw.boot.tasks = {
trapErrors: !!($tw.browser && !$tw.node),
readBrowserTiddlers: !!($tw.browser && !$tw.node)
};
/*
Information about each module is kept in an object with these members:
moduleType: type of module
definition: object, function or string defining the module; see below
exports: exports of the module, filled in after execution
The `definition` can be of several types:
* An object can be used to directly specify the exports of the module
* A function with the arguments `module,require,exports` that returns `exports`
* A string function body with the same arguments
Each moduleInfo object is stored in two hashmaps: $tw.modules.titles and $tw.modules.types. The first is indexed by title and the second is indexed by type and then title
*/
$tw.modules = {
titles: {}, // hashmap by module name of moduleInfo
types: {} // hashmap by module type and then name of moduleInfo
};
/*
Define a JavaScript tiddler module for later execution
moduleName: name of module being defined
moduleType: type of module
definition: module definition; see discussion above
*/
$tw.modules.define = function(moduleName,moduleType,definition) {
// Create the moduleInfo
var moduleInfo = {
moduleType: moduleType,
definition: definition,
exports: undefined
};
// If the definition is already an object we can use it as the exports
if(typeof moduleInfo.definition === "object") {
moduleInfo.exports = definition;
}
// Store the module in the titles hashmap
if(Object.prototype.hasOwnProperty.call($tw.modules.titles,moduleName)) {
console.log("Warning: Redefined module - " + moduleName);
}
$tw.modules.titles[moduleName] = moduleInfo;
// Store the module in the types hashmap
if(!Object.prototype.hasOwnProperty.call($tw.modules.types,moduleType)) {
$tw.modules.types[moduleType] = {};
}
if(Object.prototype.hasOwnProperty.call($tw.modules.types[moduleType],moduleName)) {
console.log("Warning: Redefined module - " + moduleName);
}
$tw.modules.types[moduleType][moduleName] = moduleInfo;
};
/*
External JavaScript can populate this array before calling boot.js in order to preload tiddlers
*/
$tw.preloadTiddlers = $tw.preloadTiddlers || [];
/*
Convenience function for pushing a tiddler onto the preloading array
*/
$tw.preloadTiddler = function(fields) {
$tw.preloadTiddlers.push(fields);
};
/*
Convenience function for pushing an array of tiddlers onto the preloading array
*/
$tw.preloadTiddlerArray = function(fieldsArray) {
$tw.preloadTiddlers.push.apply($tw.preloadTiddlers,fieldsArray);
};
return $tw;
});
if(typeof(exports) === "undefined") {
// Set up $tw global for the browser
window.$tw = _bootprefix(window.$tw);
} else {
// Export functionality as a module
exports.bootprefix = _bootprefix;
}
</script>
</div>
<!--~~ Boot kernel ~~-->
<div id="bootKernel" style="display:none;">
<script data-tiddler-title="$:/boot/boot.js" data-tiddler-type="application/javascript" type="text/javascript">/*\
title: $:/boot/boot.js
type: application/javascript
The main boot kernel for TiddlyWiki. This single file creates a barebones TW environment that is just sufficient to bootstrap the modules containing the main logic of the application.
On the server this file is executed directly to boot TiddlyWiki. In the browser, this file is packed into a single HTML file.
\*/
var _boot = (function($tw) {
/*jslint node: true, browser: true */
/*global modules: false, $tw: false */
"use strict";
// Include bootprefix if we're not given module data
if(!$tw) {
$tw = require("./bootprefix.js").bootprefix();
}
$tw.utils = $tw.utils || Object.create(null);
/////////////////////////// Standard node.js libraries
var fs, path, vm;
if($tw.node) {
fs = require("fs");
path = require("path");
vm = require("vm");
}
/////////////////////////// Utility functions
$tw.boot.log = function(str) {
$tw.boot.logMessages = $tw.boot.logMessages || [];
$tw.boot.logMessages.push(str);
}
/*
Check if an object has a property
*/
$tw.utils.hop = function(object,property) {
return object ? Object.prototype.hasOwnProperty.call(object,property) : false;
};
/*
Determine if a value is an array
*/
$tw.utils.isArray = function(value) {
return Object.prototype.toString.call(value) == "[object Array]";
};
/*
Check if an array is equal by value and by reference.
*/
$tw.utils.isArrayEqual = function(array1,array2) {
if(array1 === array2) {
return true;
}
array1 = array1 || [];
array2 = array2 || [];
if(array1.length !== array2.length) {
return false;
}
return array1.every(function(value,index) {
return value === array2[index];
});
};
/*
Push entries onto an array, removing them first if they already exist in the array
array: array to modify (assumed to be free of duplicates)
value: a single value to push or an array of values to push
*/
$tw.utils.pushTop = function(array,value) {
var t,p;
if($tw.utils.isArray(value)) {
// Remove any array entries that are duplicated in the new values
if(value.length !== 0) {
if(array.length !== 0) {
if(value.length < array.length) {
for(t=0; t<value.length; t++) {
p = array.indexOf(value[t]);
if(p !== -1) {
array.splice(p,1);
}
}
} else {
for(t=array.length-1; t>=0; t--) {
p = value.indexOf(array[t]);
if(p !== -1) {
array.splice(t,1);
}
}
}
}
// Push the values on top of the main array
array.push.apply(array,value);
}
} else {
p = array.indexOf(value);
if(p !== -1) {
array.splice(p,1);
}
array.push(value);
}
return array;
};
/*
Determine if a value is a date
*/
$tw.utils.isDate = function(value) {
return Object.prototype.toString.call(value) === "[object Date]";
};
/*
Iterate through all the own properties of an object or array. Callback is invoked with (element,title,object)
*/
$tw.utils.each = function(object,callback) {
var next,f,length;
if(object) {
if(Object.prototype.toString.call(object) == "[object Array]") {
for (f=0, length=object.length; f<length; f++) {
next = callback(object[f],f,object);
if(next === false) {
break;
}
}
} else {
var keys = Object.keys(object);
for (f=0, length=keys.length; f<length; f++) {
var key = keys[f];
next = callback(object[key],key,object);
if(next === false) {
break;
}
}
}
}
};
/*
Helper for making DOM elements
tag: tag name
options: see below
Options include:
namespace: defaults to http://www.w3.org/1999/xhtml
attributes: hashmap of attribute values
style: hashmap of styles
text: text to add as a child node
children: array of further child nodes
innerHTML: optional HTML for element
class: class name(s)
document: defaults to current document
eventListeners: array of event listeners (this option won't work until $tw.utils.addEventListeners() has been loaded)
*/
$tw.utils.domMaker = function(tag,options) {
var doc = options.document || document;
var element = doc.createElementNS(options.namespace || "http://www.w3.org/1999/xhtml",tag);
if(options["class"]) {
element.className = options["class"];
}
if(options.text) {
element.appendChild(doc.createTextNode(options.text));
}
$tw.utils.each(options.children,function(child) {
element.appendChild(child);
});
if(options.innerHTML) {
element.innerHTML = options.innerHTML;
}
$tw.utils.each(options.attributes,function(attribute,name) {
element.setAttribute(name,attribute);
});
$tw.utils.each(options.style,function(value,name) {
element.style[name] = value;
});
if(options.eventListeners) {
$tw.utils.addEventListeners(element,options.eventListeners);
}
return element;
};
/*
Display an error and exit
*/
$tw.utils.error = function(err) {
// Prepare the error message
var errHeading = ( $tw.language == undefined ? "Internal JavaScript Error" : $tw.language.getString("InternalJavaScriptError/Title") ),
promptMsg = ( $tw.language == undefined ? "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser" : $tw.language.getString("InternalJavaScriptError/Hint") );
// Log the error to the console
console.error($tw.node ? "\x1b[1;31m" + err + "\x1b[0m" : err);
if($tw.browser && !$tw.node) {
// Display an error message to the user
var dm = $tw.utils.domMaker,
heading = dm("h1",{text: errHeading}),
prompt = dm("div",{text: promptMsg, "class": "tc-error-prompt"}),
message = dm("div",{text: err, "class":"tc-error-message"}),
button = dm("div",{children: [dm("button",{text: ( $tw.language == undefined ? "close" : $tw.language.getString("Buttons/Close/Caption") )})], "class": "tc-error-prompt"}),
form = dm("form",{children: [heading,prompt,message,button], "class": "tc-error-form"});
document.body.insertBefore(form,document.body.firstChild);
form.addEventListener("submit",function(event) {
document.body.removeChild(form);
event.preventDefault();
return false;
},true);
return null;
} else if(!$tw.browser) {
// Exit if we're under node.js
process.exit(1);
}
};
/*
Use our custom error handler if we're in the browser
*/
if($tw.boot.tasks.trapErrors) {
window.onerror = function(errorMsg,url,lineNumber) {
$tw.utils.error(errorMsg);
return false;
};
}
/*
Extend an object with the properties from a list of source objects
*/
$tw.utils.extend = function(object /*, sourceObjectList */) {
$tw.utils.each(Array.prototype.slice.call(arguments,1),function(source) {
if(source) {
for (var p in source) {
object[p] = source[p];
}
}
});
return object;
};
/*
Fill in any null or undefined properties of an object with the properties from a list of source objects. Each property that is an object is called recursively
*/
$tw.utils.deepDefaults = function(object /*, sourceObjectList */) {
$tw.utils.each(Array.prototype.slice.call(arguments,1),function(source) {
if(source) {
for (var p in source) {
if(object[p] === null || object[p] === undefined) {
object[p] = source[p];
}
if(typeof object[p] === "object" && typeof source[p] === "object") {
$tw.utils.deepDefaults(object[p],source[p]);
}
}
}
});
return object;
};
/*
Convert "&amp;" to &, "&nbsp;" to nbsp, "&lt;" to <, "&gt;" to > and "&quot;" to "
*/
$tw.utils.htmlDecode = function(s) {
return s.toString().replace(/&lt;/mg,"<").replace(/&nbsp;/mg,"\xA0").replace(/&gt;/mg,">").replace(/&quot;/mg,"\"").replace(/&amp;/mg,"&");
};
/*
Get the browser location.hash. We don't use location.hash because of the way that Firefox auto-urldecodes it (see http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash)
*/
$tw.utils.getLocationHash = function() {
var href = window.location.href;
var idx = href.indexOf('#');
if(idx === -1) {
return "#";
} else if(idx < href.length-1 && href[idx+1] === '#') {
// Special case: ignore location hash if it itself starts with a #
return "#";
} else {
return href.substring(idx);
}
};
/*
Pad a string to a given length with "0"s. Length defaults to 2
*/
$tw.utils.pad = function(value,length) {
length = length || 2;
var s = value.toString();
if(s.length < length) {
s = "000000000000000000000000000".substr(0,length - s.length) + s;
}
return s;
};
// Convert a date into UTC YYYYMMDDHHMMSSmmm format
$tw.utils.stringifyDate = function(value) {
return value.getUTCFullYear() +
$tw.utils.pad(value.getUTCMonth() + 1) +
$tw.utils.pad(value.getUTCDate()) +
$tw.utils.pad(value.getUTCHours()) +
$tw.utils.pad(value.getUTCMinutes()) +
$tw.utils.pad(value.getUTCSeconds()) +
$tw.utils.pad(value.getUTCMilliseconds(),3);
};
// Parse a date from a UTC YYYYMMDDHHMMSSmmm format string
$tw.utils.parseDate = function(value) {
if(typeof value === "string") {
var negative = 1;
if(value.charAt(0) === "-") {
negative = -1;
value = value.substr(1);
}
var year = parseInt(value.substr(0,4),10) * negative,
d = new Date(Date.UTC(year,
parseInt(value.substr(4,2),10)-1,
parseInt(value.substr(6,2),10),
parseInt(value.substr(8,2)||"00",10),
parseInt(value.substr(10,2)||"00",10),
parseInt(value.substr(12,2)||"00",10),
parseInt(value.substr(14,3)||"000",10)));
d.setUTCFullYear(year); // See https://stackoverflow.com/a/5870822
return d;
} else if($tw.utils.isDate(value)) {
return value;
} else {
return null;
}
};
// Stringify an array of tiddler titles into a list string
$tw.utils.stringifyList = function(value) {
if($tw.utils.isArray(value)) {
var result = new Array(value.length);
for(var t=0, l=value.length; t<l; t++) {
var entry = value[t] || "";
if(entry.indexOf(" ") !== -1) {
result[t] = "[[" + entry + "]]";
} else {
result[t] = entry;
}
}
return result.join(" ");
} else {
return value || "";
}
};
// Parse a string array from a bracketted list. For example "OneTiddler [[Another Tiddler]] LastOne"
$tw.utils.parseStringArray = function(value, allowDuplicate) {
if(typeof value === "string") {
var memberRegExp = /(?:^|[^\S\xA0])(?:\[\[(.*?)\]\])(?=[^\S\xA0]|$)|([\S\xA0]+)/mg,
results = [], names = {},
match;
do {
match = memberRegExp.exec(value);
if(match) {
var item = match[1] || match[2];
if(item !== undefined && (!$tw.utils.hop(names,item) || allowDuplicate)) {
results.push(item);
names[item] = true;
}
}
} while(match);
return results;
} else if($tw.utils.isArray(value)) {
return value;
} else {
return null;
}
};
// Parse a block of name:value fields. The `fields` object is used as the basis for the return value
$tw.utils.parseFields = function(text,fields) {
fields = fields || Object.create(null);
text.split(/\r?\n/mg).forEach(function(line) {
if(line.charAt(0) !== "#") {
var p = line.indexOf(":");
if(p !== -1) {
var field = line.substr(0, p).trim(),
value = line.substr(p+1).trim();
if(field) {
fields[field] = value;
}
}
}
});
return fields;
};
/*
Resolves a source filepath delimited with `/` relative to a specified absolute root filepath.
In relative paths, the special folder name `..` refers to immediate parent directory, and the
name `.` refers to the current directory
*/
$tw.utils.resolvePath = function(sourcepath,rootpath) {
// If the source path starts with ./ or ../ then it is relative to the root
if(sourcepath.substr(0,2) === "./" || sourcepath.substr(0,3) === "../" ) {
var src = sourcepath.split("/"),
root = rootpath.split("/");
// Remove the filename part of the root
root.splice(root.length-1,1);
// Process the source path bit by bit onto the end of the root path
while(src.length > 0) {
var c = src.shift();
if(c === "..") { // Slice off the last root entry for a double dot
if(root.length > 0) {
root.splice(root.length-1,1);
}
} else if(c !== ".") { // Ignore dots
root.push(c); // Copy other elements across
}
}
return root.join("/");
} else {
// If it isn't relative, just return the path
if(rootpath) {
var root = rootpath.split("/");
// Remove the filename part of the root
root.splice(root.length - 1, 1);
return root.join("/") + "/" + sourcepath;
} else {
return sourcepath;
}
}
};
/*
Parse a semantic version string into its constituent parts -- see https://semver.org
*/
$tw.utils.parseVersion = function(version) {
var match = /^v?((\d+)\.(\d+)\.(\d+))(?:-([\dA-Za-z\-]+(?:\.[\dA-Za-z\-]+)*))?(?:\+([\dA-Za-z\-]+(?:\.[\dA-Za-z\-]+)*))?$/.exec(version);
if(match) {
return {
version: match[1],
major: parseInt(match[2],10),
minor: parseInt(match[3],10),
patch: parseInt(match[4],10),
prerelease: match[5],
build: match[6]
};
} else {
return null;
}
};
/*
Returns +1 if the version string A is greater than the version string B, 0 if they are the same, and +1 if B is greater than A.
Missing or malformed version strings are parsed as 0.0.0
*/
$tw.utils.compareVersions = function(versionStringA,versionStringB) {
var defaultVersion = {
major: 0,
minor: 0,
patch: 0
},
versionA = $tw.utils.parseVersion(versionStringA) || defaultVersion,
versionB = $tw.utils.parseVersion(versionStringB) || defaultVersion,
diff = [
versionA.major - versionB.major,
versionA.minor - versionB.minor,
versionA.patch - versionB.patch
];
if((diff[0] > 0) || (diff[0] === 0 && diff[1] > 0) || (diff[0] === 0 & diff[1] === 0 & diff[2] > 0)) {
return +1;
} else if((diff[0] < 0) || (diff[0] === 0 && diff[1] < 0) || (diff[0] === 0 & diff[1] === 0 & diff[2] < 0)) {
return -1;
} else {
return 0;
}
};
/*
Returns true if the version string A is greater than the version string B. Returns true if the versions are the same
*/
$tw.utils.checkVersions = function(versionStringA,versionStringB) {
return $tw.utils.compareVersions(versionStringA,versionStringB) !== -1;
};
/*
Register file type information
options: {flags: flags,deserializerType: deserializerType}
flags:"image" for image types
deserializerType: defaults to type if not specified
*/
$tw.utils.registerFileType = function(type,encoding,extension,options) {
options = options || {};
if($tw.utils.isArray(extension)) {
$tw.utils.each(extension,function(extension) {
$tw.config.fileExtensionInfo[extension] = {type: type};
});
extension = extension[0];
} else {
$tw.config.fileExtensionInfo[extension] = {type: type};
}
$tw.config.contentTypeInfo[type] = {encoding: encoding, extension: extension, flags: options.flags || [], deserializerType: options.deserializerType || type};
};
/*
Given an extension, always access the $tw.config.fileExtensionInfo
using a lowercase extension only.
*/
$tw.utils.getFileExtensionInfo = function(ext) {
return ext ? $tw.config.fileExtensionInfo[ext.toLowerCase()] : null;
}
/*
Given an extension, get the correct encoding for that file.
defaults to utf8
*/
$tw.utils.getTypeEncoding = function(ext) {
var extensionInfo = $tw.utils.getFileExtensionInfo(ext),
type = extensionInfo ? extensionInfo.type : null,
typeInfo = type ? $tw.config.contentTypeInfo[type] : null;
return typeInfo ? typeInfo.encoding : "utf8";
};
/*
Run code globally with specified context variables in scope
*/
$tw.utils.evalGlobal = function(code,context,filename) {
var contextCopy = $tw.utils.extend(Object.create(null),context);
// Get the context variables as a pair of arrays of names and values
var contextNames = [], contextValues = [];
$tw.utils.each(contextCopy,function(value,name) {
contextNames.push(name);
contextValues.push(value);
});
// Add the code prologue and epilogue
code = "(function(" + contextNames.join(",") + ") {(function(){\n" + code + "\n;})();\nreturn exports;\n})\n";
// Compile the code into a function
var fn;
if($tw.browser) {
fn = window["eval"](code + "\n\n//# sourceURL=" + filename);
} else {
fn = vm.runInThisContext(code,filename);
}
// Call the function and return the exports
return fn.apply(null,contextValues);
};
/*
Run code in a sandbox with only the specified context variables in scope
*/
$tw.utils.evalSandboxed = $tw.browser ? $tw.utils.evalGlobal : function(code,context,filename) {
var sandbox = $tw.utils.extend(Object.create(null),context);
vm.runInNewContext(code,sandbox,filename);
return sandbox.exports;
};
/*
Creates a PasswordPrompt object
*/
$tw.utils.PasswordPrompt = function() {
// Store of pending password prompts
this.passwordPrompts = [];
// Create the wrapper
this.promptWrapper = $tw.utils.domMaker("div",{"class":"tc-password-wrapper"});
document.body.appendChild(this.promptWrapper);
// Hide the empty wrapper
this.setWrapperDisplay();
};
/*
Hides or shows the wrapper depending on whether there are any outstanding prompts
*/
$tw.utils.PasswordPrompt.prototype.setWrapperDisplay = function() {
if(this.passwordPrompts.length) {
this.promptWrapper.style.display = "block";
} else {
this.promptWrapper.style.display = "none";
}
};
/*
Adds a new password prompt. Options are:
submitText: text to use for submit button (defaults to "Login")
serviceName: text of the human readable service name
noUserName: set true to disable username prompt
canCancel: set true to enable a cancel button (callback called with null)
repeatPassword: set true to prompt for the password twice
callback: function to be called on submission with parameter of object {username:,password:}. Callback must return `true` to remove the password prompt
*/
$tw.utils.PasswordPrompt.prototype.createPrompt = function(options) {
// Create and add the prompt to the DOM
var self = this,
submitText = options.submitText || "Login",
dm = $tw.utils.domMaker,
children = [dm("h1",{text: options.serviceName})];
if(!options.noUserName) {
children.push(dm("input",{
attributes: {type: "text", name: "username", placeholder: $tw.language.getString("Encryption/Username")}
}));
}
children.push(dm("input",{
attributes: {
type: "password",
name: "password",
placeholder: ( $tw.language == undefined ? "Password" : $tw.language.getString("Encryption/Password") )
}
}));
if(options.repeatPassword) {
children.push(dm("input",{
attributes: {
type: "password",
name: "password2",
placeholder: $tw.language.getString("Encryption/RepeatPassword")
}
}));
}
if(options.canCancel) {
children.push(dm("button",{
text: $tw.language.getString("Encryption/Cancel"),
attributes: {
type: "button"
},
eventListeners: [{
name: "click",
handlerFunction: function(event) {
self.removePrompt(promptInfo);
options.callback(null);
}
}]
}));
}
children.push(dm("button",{
attributes: {type: "submit"},
text: submitText
}));
var form = dm("form",{
attributes: {autocomplete: "off"},
children: children
});
this.promptWrapper.appendChild(form);
window.setTimeout(function() {
form.elements[0].focus();
},10);
// Add a submit event handler
var self = this;
form.addEventListener("submit",function(event) {
// Collect the form data
var data = {},t;
$tw.utils.each(form.elements,function(element) {
if(element.name && element.value) {
data[element.name] = element.value;
}
});
// Check that the passwords match
if(options.repeatPassword && data.password !== data.password2) {
alert($tw.language.getString("Encryption/PasswordNoMatch"));
} else {
// Call the callback
if(options.callback(data)) {
// Remove the prompt if the callback returned true
self.removePrompt(promptInfo);
} else {
// Clear the password if the callback returned false
$tw.utils.each(form.elements,function(element) {
if(element.name === "password" || element.name === "password2") {
element.value = "";
}
});
}
}
event.preventDefault();
return false;
},true);
// Add the prompt to the list
var promptInfo = {
serviceName: options.serviceName,
callback: options.callback,
form: form,
owner: this
};
this.passwordPrompts.push(promptInfo);
// Make sure the wrapper is displayed
this.setWrapperDisplay();
return promptInfo;
};
$tw.utils.PasswordPrompt.prototype.removePrompt = function(promptInfo) {
var i = this.passwordPrompts.indexOf(promptInfo);
if(i !== -1) {
this.passwordPrompts.splice(i,1);
promptInfo.form.parentNode.removeChild(promptInfo.form);
this.setWrapperDisplay();
}
}
/*
Crypto helper object for encrypted content. It maintains the password text in a closure, and provides methods to change
the password, and to encrypt/decrypt a block of text
*/
$tw.utils.Crypto = function() {
var sjcl = $tw.node ? (global.sjcl || require("./sjcl.js")) : window.sjcl,
currentPassword = null,
callSjcl = function(method,inputText,password) {
password = password || currentPassword;
var outputText;
try {
if(password) {
outputText = sjcl[method](password,inputText);
}
} catch(ex) {
console.log("Crypto error:" + ex);
outputText = null;
}
return outputText;
};
this.setPassword = function(newPassword) {
currentPassword = newPassword;
this.updateCryptoStateTiddler();
};
this.updateCryptoStateTiddler = function() {
if($tw.wiki) {
var state = currentPassword ? "yes" : "no",
tiddler = $tw.wiki.getTiddler("$:/isEncrypted");
if(!tiddler || tiddler.fields.text !== state) {
$tw.wiki.addTiddler(new $tw.Tiddler({title: "$:/isEncrypted", text: state}));
}
}
};
this.hasPassword = function() {
return !!currentPassword;
}
this.encrypt = function(text,password) {
return callSjcl("encrypt",text,password);
};
this.decrypt = function(text,password) {
return callSjcl("decrypt",text,password);
};
};
/////////////////////////// Module mechanism
/*
Execute the module named 'moduleName'. The name can optionally be relative to the module named 'moduleRoot'
*/
$tw.modules.execute = function(moduleName,moduleRoot) {
var name = moduleName;
if(moduleName.charAt(0) === ".") {
name = $tw.utils.resolvePath(moduleName,moduleRoot)
}
if(!$tw.modules.titles[name]) {
if($tw.modules.titles[name + ".js"]) {
name = name + ".js";
} else if($tw.modules.titles[name + "/index.js"]) {
name = name + "/index.js";
} else if($tw.modules.titles[moduleName]) {
name = moduleName;
} else if($tw.modules.titles[moduleName + ".js"]) {
name = moduleName + ".js";
} else if($tw.modules.titles[moduleName + "/index.js"]) {
name = moduleName + "/index.js";
}
}
var moduleInfo = $tw.modules.titles[name],
tiddler = $tw.wiki.getTiddler(name),
_exports = {},
sandbox = {
module: {exports: _exports},
//moduleInfo: moduleInfo,
exports: _exports,
console: console,
setInterval: setInterval,
clearInterval: clearInterval,
setTimeout: setTimeout,
clearTimeout: clearTimeout,
Buffer: $tw.browser ? undefined : Buffer,
$tw: $tw,
require: function(title) {
return $tw.modules.execute(title, name);
}
};
Object.defineProperty(sandbox.module, "id", {
value: name,
writable: false,
enumerable: true,
configurable: false
});
if(!$tw.browser) {
$tw.utils.extend(sandbox,{
process: process
});
} else {
/*
CommonJS optional require.main property:
In a browser we offer a fake main module which points back to the boot function
(Theoretically, this may allow TW to eventually load itself as a module in the browser)
*/
Object.defineProperty(sandbox.require, "main", {
value: (typeof(require) !== "undefined") ? require.main : {TiddlyWiki: _boot},
writable: false,
enumerable: true,
configurable: false
});
}
if(!moduleInfo) {
// We could not find the module on this path
// Try to defer to browserify etc, or node
var deferredModule;
if($tw.browser) {
if(window.require) {
try {
return window.require(moduleName);
} catch(e) {}
}
throw "Cannot find module named '" + moduleName + "' required by module '" + moduleRoot + "', resolved to " + name;
} else {
// If we don't have a module with that name, let node.js try to find it
return require(moduleName);
}
}
// Execute the module if we haven't already done so
if(!moduleInfo.exports) {
try {
// Check the type of the definition
if(typeof moduleInfo.definition === "function") { // Function
moduleInfo.exports = _exports;
moduleInfo.definition(moduleInfo,moduleInfo.exports,sandbox.require);
} else if(typeof moduleInfo.definition === "string") { // String
moduleInfo.exports = _exports;
$tw.utils.evalSandboxed(moduleInfo.definition,sandbox,tiddler.fields.title);
if(sandbox.module.exports) {
moduleInfo.exports = sandbox.module.exports; //more codemirror workaround
}
} else { // Object
moduleInfo.exports = moduleInfo.definition;
}
} catch(e) {
if (e instanceof SyntaxError) {
var line = e.lineNumber || e.line; // Firefox || Safari
if (typeof(line) != "undefined" && line !== null) {
$tw.utils.error("Syntax error in boot module " + name + ":" + line + ":\n" + e.stack);
} else if(!$tw.browser) {
// this is the only way to get node.js to display the line at which the syntax error appeared,
// and $tw.utils.error would exit anyway
// cf. https://bugs.chromium.org/p/v8/issues/detail?id=2589
throw e;
} else {
// Opera: line number is included in e.message
// Chrome/IE: there's currently no way to get the line number
$tw.utils.error("Syntax error in boot module " + name + ": " + e.message + "\n" + e.stack);
}
} else {
// line number should be included in e.stack for runtime errors
$tw.utils.error("Error executing boot module " + name + ": " + JSON.stringify(e) + "\n\n" + e.stack);
}
}
}
// Return the exports of the module
return moduleInfo.exports;
};
/*
Apply a callback to each module of a particular type
moduleType: type of modules to enumerate
callback: function called as callback(title,moduleExports) for each module
*/
$tw.modules.forEachModuleOfType = function(moduleType,callback) {
var modules = $tw.modules.types[moduleType];
$tw.utils.each(modules,function(element,title) {
callback(title,$tw.modules.execute(title));
});
};
/*
Get all the modules of a particular type in a hashmap by their `name` field
*/
$tw.modules.getModulesByTypeAsHashmap = function(moduleType,nameField) {
nameField = nameField || "name";
var results = Object.create(null);
$tw.modules.forEachModuleOfType(moduleType,function(title,module) {
results[module[nameField]] = module;
});
return results;
};
/*
Apply the exports of the modules of a particular type to a target object
*/
$tw.modules.applyMethods = function(moduleType,targetObject) {
if(!targetObject) {
targetObject = Object.create(null);
}
$tw.modules.forEachModuleOfType(moduleType,function(title,module) {
$tw.utils.each(module,function(element,title,object) {
targetObject[title] = module[title];
});
});
return targetObject;
};
2022-01-03 21:31:14 +00:00
/*
Return a class created from a modules. The module should export the properties to be added to those of the optional base class
*/
$tw.modules.createClassFromModule = function(moduleExports,baseClass) {
var newClass = function() {};
if(baseClass) {
newClass.prototype = new baseClass();
newClass.prototype.constructor = baseClass;
}
$tw.utils.extend(newClass.prototype,moduleExports);
return newClass;
};
2021-09-21 16:32:33 +00:00
/*
Return an array of classes created from the modules of a specified type. Each module should export the properties to be added to those of the optional base class
*/
$tw.modules.createClassesFromModules = function(moduleType,subType,baseClass) {
var classes = Object.create(null);
$tw.modules.forEachModuleOfType(moduleType,function(title,moduleExports) {
if(!subType || moduleExports.types[subType]) {
2022-01-03 21:31:14 +00:00
classes[moduleExports.name] = $tw.modules.createClassFromModule(moduleExports,baseClass);
2021-09-21 16:32:33 +00:00
}
});
return classes;
};
/////////////////////////// Barebones tiddler object
/*
Construct a tiddler object from a hashmap of tiddler fields. If multiple hasmaps are provided they are merged,
taking precedence to the right
*/
$tw.Tiddler = function(/* [fields,] fields */) {
this.fields = Object.create(null);
this.cache = Object.create(null);
for(var c=0; c<arguments.length; c++) {
var arg = arguments[c],
src = (arg instanceof $tw.Tiddler) ? arg.fields : arg;
for(var t in src) {
if(src[t] === undefined || src[t] === null) {
if(t in this.fields) {
delete this.fields[t]; // If we get a field that's undefined, delete any previous field value
}
} else {
// Parse the field with the associated field module (if any)
var fieldModule = $tw.Tiddler.fieldModules[t],
value;
if(fieldModule && fieldModule.parse) {
value = fieldModule.parse.call(this,src[t]);
} else {
value = src[t];
}
// Freeze the field to keep it immutable
if(value != null && typeof value === "object") {
Object.freeze(value);
}
this.fields[t] = value;
}
}
}
// Freeze the tiddler against modification
Object.freeze(this.fields);
Object.freeze(this);
};
$tw.Tiddler.prototype.hasField = function(field) {
return $tw.utils.hop(this.fields,field);
};
/*
Compare two tiddlers for equality
tiddler: the tiddler to compare
excludeFields: array of field names to exclude from the comparison
*/
$tw.Tiddler.prototype.isEqual = function(tiddler,excludeFields) {
if(!(tiddler instanceof $tw.Tiddler)) {
return false;
}
excludeFields = excludeFields || [];
var self = this,
differences = []; // Fields that have differences
// Add to the differences array
function addDifference(fieldName) {
// Check for this field being excluded
if(excludeFields.indexOf(fieldName) === -1) {
// Save the field as a difference
$tw.utils.pushTop(differences,fieldName);
}
}
// Returns true if the two values of this field are equal
function isFieldValueEqual(fieldName) {
var valueA = self.fields[fieldName],
valueB = tiddler.fields[fieldName];
// Check for identical string values
if(typeof(valueA) === "string" && typeof(valueB) === "string" && valueA === valueB) {
return true;
}
// Check for identical array values
if($tw.utils.isArray(valueA) && $tw.utils.isArray(valueB) && $tw.utils.isArrayEqual(valueA,valueB)) {
return true;
}
// Check for identical date values
if($tw.utils.isDate(valueA) && $tw.utils.isDate(valueB) && valueA.getTime() === valueB.getTime()) {
return true;
}
// Otherwise the fields must be different
return false;
}
// Compare our fields
for(var fieldName in this.fields) {
if(!isFieldValueEqual(fieldName)) {
addDifference(fieldName);
}
}
// There's a difference for every field in the other tiddler that we don't have
for(fieldName in tiddler.fields) {
if(!(fieldName in this.fields)) {
addDifference(fieldName);
}
}
// Return whether there were any differences
return differences.length === 0;
};
/*
Register and install the built in tiddler field modules
*/
$tw.modules.define("$:/boot/tiddlerfields/modified","tiddlerfield",{
name: "modified",
parse: $tw.utils.parseDate,
stringify: $tw.utils.stringifyDate
});
$tw.modules.define("$:/boot/tiddlerfields/created","tiddlerfield",{
name: "created",
parse: $tw.utils.parseDate,
stringify: $tw.utils.stringifyDate
});
$tw.modules.define("$:/boot/tiddlerfields/color","tiddlerfield",{
name: "color",
editTag: "input",
editType: "color"
});
$tw.modules.define("$:/boot/tiddlerfields/tags","tiddlerfield",{
name: "tags",
parse: $tw.utils.parseStringArray,
stringify: $tw.utils.stringifyList
});
$tw.modules.define("$:/boot/tiddlerfields/list","tiddlerfield",{
name: "list",
parse: $tw.utils.parseStringArray,
stringify: $tw.utils.stringifyList
});
/////////////////////////// Barebones wiki store
/*
Wiki constructor. State is stored in private members that only a small number of privileged accessor methods have direct access. Methods added via the prototype have to use these accessors and cannot access the state data directly.
options include:
enableIndexers - Array of indexer names to enable, or null to use all available indexers
*/
$tw.Wiki = function(options) {
options = options || {};
var self = this,
tiddlers = Object.create(null), // Hashmap of tiddlers
tiddlerTitles = null, // Array of tiddler titles
getTiddlerTitles = function() {
if(!tiddlerTitles) {
tiddlerTitles = Object.keys(tiddlers);
}
return tiddlerTitles;
},
pluginTiddlers = [], // Array of tiddlers containing registered plugins, ordered by priority
pluginInfo = Object.create(null), // Hashmap of parsed plugin content
shadowTiddlers = Object.create(null), // Hashmap by title of {source:, tiddler:}
shadowTiddlerTitles = null,
getShadowTiddlerTitles = function() {
if(!shadowTiddlerTitles) {
shadowTiddlerTitles = Object.keys(shadowTiddlers);
}
return shadowTiddlerTitles;
},
enableIndexers = options.enableIndexers || null,
indexers = [],
indexersByName = Object.create(null);
this.addIndexer = function(indexer,name) {
// Bail if this indexer is not enabled
if(enableIndexers && enableIndexers.indexOf(name) === -1) {
return;
}
indexers.push(indexer);
indexersByName[name] = indexer;
indexer.init();
};
this.getIndexer = function(name) {
return indexersByName[name] || null;
};
// Add a tiddler to the store
this.addTiddler = function(tiddler) {
if(!(tiddler instanceof $tw.Tiddler)) {
tiddler = new $tw.Tiddler(tiddler);
}
// Save the tiddler
if(tiddler) {
var title = tiddler.fields.title;
if(title) {
// Uncomment the following line for detailed logs of all tiddler writes
// console.log("Adding",title,tiddler)
// Record the old tiddler state
var updateDescriptor = {
old: {
tiddler: this.getTiddler(title),
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
}
// Save the new tiddler
tiddlers[title] = tiddler;
// Check we've got it's title
if(tiddlerTitles && tiddlerTitles.indexOf(title) === -1) {
tiddlerTitles.push(title);
}
// Record the new tiddler state
updateDescriptor["new"] = {
tiddler: tiddler,
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
// Update indexes
this.clearCache(title);
this.clearGlobalCache();
$tw.utils.each(indexers,function(indexer) {
indexer.update(updateDescriptor);
});
// Queue a change event
this.enqueueTiddlerEvent(title);
}
}
};
// Delete a tiddler
this.deleteTiddler = function(title) {
// Uncomment the following line for detailed logs of all tiddler deletions
// console.log("Deleting",title)
if($tw.utils.hop(tiddlers,title)) {
// Record the old tiddler state
var updateDescriptor = {
old: {
tiddler: this.getTiddler(title),
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
}
// Delete the tiddler
delete tiddlers[title];
// Delete it from the list of titles
if(tiddlerTitles) {
var index = tiddlerTitles.indexOf(title);
if(index !== -1) {
tiddlerTitles.splice(index,1);
2022-01-03 21:31:14 +00:00
}
2021-09-21 16:32:33 +00:00
}
// Record the new tiddler state
updateDescriptor["new"] = {
tiddler: this.getTiddler(title),
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
// Update indexes
this.clearCache(title);
this.clearGlobalCache();
$tw.utils.each(indexers,function(indexer) {
indexer.update(updateDescriptor);
});
// Queue a change event
this.enqueueTiddlerEvent(title,true);
}
};
// Get a tiddler from the store
this.getTiddler = function(title) {
if(title) {
var t = tiddlers[title];
if(t instanceof $tw.Tiddler) {
return t;
} else if(title !== undefined && shadowTiddlers[title]) {
return shadowTiddlers[title].tiddler;
}
return undefined;
}
};
// Get an array of all tiddler titles
this.allTitles = function() {
return getTiddlerTitles().slice(0);
};
// Iterate through all tiddler titles
this.each = function(callback) {
var titles = getTiddlerTitles(),
index,titlesLength,title;
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
callback(tiddlers[title],title);
}
};
// Get an array of all shadow tiddler titles
this.allShadowTitles = function() {
return getShadowTiddlerTitles().slice(0);
};
// Iterate through all shadow tiddler titles
this.eachShadow = function(callback) {
var titles = getShadowTiddlerTitles(),
index,titlesLength,title;
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
2022-01-03 21:31:14 +00:00
if(tiddlers[title]) {
callback(tiddlers[title],title);
} else {
var shadowInfo = shadowTiddlers[title];
callback(shadowInfo.tiddler,title);
}
2021-09-21 16:32:33 +00:00
}
};
// Iterate through all tiddlers and then the shadows
this.eachTiddlerPlusShadows = function(callback) {
var index,titlesLength,title,
titles = getTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
callback(tiddlers[title],title);
}
titles = getShadowTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
if(!tiddlers[title]) {
var shadowInfo = shadowTiddlers[title];
callback(shadowInfo.tiddler,title);
}
}
};
// Iterate through all the shadows and then the tiddlers
this.eachShadowPlusTiddlers = function(callback) {
var index,titlesLength,title,
titles = getShadowTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
if(tiddlers[title]) {
callback(tiddlers[title],title);
} else {
var shadowInfo = shadowTiddlers[title];
callback(shadowInfo.tiddler,title);
}
}
titles = getTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
if(!shadowTiddlers[title]) {
callback(tiddlers[title],title);
}
}
};
// Test for the existence of a tiddler (excludes shadow tiddlers)
this.tiddlerExists = function(title) {
return !!$tw.utils.hop(tiddlers,title);
};
// Determines if a tiddler is a shadow tiddler, regardless of whether it has been overridden by a real tiddler
this.isShadowTiddler = function(title) {
return $tw.utils.hop(shadowTiddlers,title);
};
this.getShadowSource = function(title) {
if($tw.utils.hop(shadowTiddlers,title)) {
return shadowTiddlers[title].source;
}
return null;
};
// Get an array of all the currently recognised plugin types
this.getPluginTypes = function() {
var types = [];
$tw.utils.each(pluginTiddlers,function(pluginTiddler) {
var pluginType = pluginTiddler.fields["plugin-type"];
if(pluginType && types.indexOf(pluginType) === -1) {
types.push(pluginType);
}
});
return types;
};
// Read plugin info for all plugins, or just an array of titles. Returns the number of plugins updated or deleted
this.readPluginInfo = function(titles) {
var results = {
modifiedPlugins: [],
deletedPlugins: []
};
$tw.utils.each(titles || getTiddlerTitles(),function(title) {
var tiddler = tiddlers[title];
if(tiddler) {
if(tiddler.fields.type === "application/json" && tiddler.hasField("plugin-type") && tiddler.fields.text) {
pluginInfo[tiddler.fields.title] = JSON.parse(tiddler.fields.text);
results.modifiedPlugins.push(tiddler.fields.title);
}
} else {
if(pluginInfo[title]) {
2022-01-03 21:31:14 +00:00
delete pluginInfo[title];
2021-09-21 16:32:33 +00:00
results.deletedPlugins.push(title);
}
}
});
return results;
};
// Get plugin info for a plugin
this.getPluginInfo = function(title) {
return pluginInfo[title];
};
// Register the plugin tiddlers of a particular type, or null/undefined for any type, optionally restricting registration to an array of tiddler titles. Return the array of titles affected
this.registerPluginTiddlers = function(pluginType,titles) {
var self = this,
registeredTitles = [],
checkTiddler = function(tiddler,title) {
if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"] && (!pluginType || tiddler.fields["plugin-type"] === pluginType)) {
var disablingTiddler = self.getTiddler("$:/config/Plugins/Disabled/" + title);
if(title === "$:/core" || !disablingTiddler || (disablingTiddler.fields.text || "").trim() !== "yes") {
self.unregisterPluginTiddlers(null,[title]); // Unregister the plugin if it's already registered
pluginTiddlers.push(tiddler);
registeredTitles.push(tiddler.fields.title);
}
}
};
if(titles) {
$tw.utils.each(titles,function(title) {
checkTiddler(self.getTiddler(title),title);
});
} else {
this.each(function(tiddler,title) {
checkTiddler(tiddler,title);
});
}
return registeredTitles;
};
// Unregister the plugin tiddlers of a particular type, or null/undefined for any type, optionally restricting unregistering to an array of tiddler titles. Returns an array of the titles affected
this.unregisterPluginTiddlers = function(pluginType,titles) {
var self = this,
unregisteredTitles = [];
// Remove any previous registered plugins of this type
for(var t=pluginTiddlers.length-1; t>=0; t--) {
var tiddler = pluginTiddlers[t];
if(tiddler.fields["plugin-type"] && (!pluginType || tiddler.fields["plugin-type"] === pluginType) && (!titles || titles.indexOf(tiddler.fields.title) !== -1)) {
unregisteredTitles.push(tiddler.fields.title);
pluginTiddlers.splice(t,1);
}
}
return unregisteredTitles;
};
// Unpack the currently registered plugins, creating shadow tiddlers for their constituent tiddlers
this.unpackPluginTiddlers = function() {
var self = this;
// Sort the plugin titles by the `plugin-priority` field
pluginTiddlers.sort(function(a,b) {
if("plugin-priority" in a.fields && "plugin-priority" in b.fields) {
return a.fields["plugin-priority"] - b.fields["plugin-priority"];
} else if("plugin-priority" in a.fields) {
return -1;
} else if("plugin-priority" in b.fields) {
return +1;
} else if(a.fields.title < b.fields.title) {
return -1;
} else if(a.fields.title === b.fields.title) {
return 0;
} else {
return +1;
}
});
// Now go through the plugins in ascending order and assign the shadows
shadowTiddlers = Object.create(null);
$tw.utils.each(pluginTiddlers,function(tiddler) {
// Extract the constituent tiddlers
if($tw.utils.hop(pluginInfo,tiddler.fields.title)) {
$tw.utils.each(pluginInfo[tiddler.fields.title].tiddlers,function(constituentTiddler,constituentTitle) {
// Save the tiddler object
if(constituentTitle) {
shadowTiddlers[constituentTitle] = {
source: tiddler.fields.title,
tiddler: new $tw.Tiddler(constituentTiddler,{title: constituentTitle})
};
}
});
}
});
shadowTiddlerTitles = null;
this.clearCache(null);
this.clearGlobalCache();
$tw.utils.each(indexers,function(indexer) {
indexer.rebuild();
});
};
if(this.addIndexersToWiki) {
this.addIndexersToWiki();
}
};
// Dummy methods that will be filled in after boot
$tw.Wiki.prototype.clearCache =
$tw.Wiki.prototype.clearGlobalCache =
$tw.Wiki.prototype.enqueueTiddlerEvent = function() {};
// Add an array of tiddlers
$tw.Wiki.prototype.addTiddlers = function(tiddlers) {
for(var t=0; t<tiddlers.length; t++) {
this.addTiddler(tiddlers[t]);
}
};
/*
Define all modules stored in ordinary tiddlers
*/
$tw.Wiki.prototype.defineTiddlerModules = function() {
this.each(function(tiddler,title) {
if(tiddler.hasField("module-type")) {
switch (tiddler.fields.type) {
case "application/javascript":
// We only define modules that haven't already been defined, because in the browser modules in system tiddlers are defined in inline script
if(!$tw.utils.hop($tw.modules.titles,tiddler.fields.title)) {
$tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],tiddler.fields.text);
}
break;
case "application/json":
$tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],JSON.parse(tiddler.fields.text));
break;
case "application/x-tiddler-dictionary":
$tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],$tw.utils.parseFields(tiddler.fields.text));
break;
}
}
});
};
/*
Register all the module tiddlers that have a module type
*/
$tw.Wiki.prototype.defineShadowModules = function() {
var self = this;
this.eachShadow(function(tiddler,title) {
// Don't define the module if it is overidden by an ordinary tiddler
if(!self.tiddlerExists(title) && tiddler.hasField("module-type")) {
// Define the module
$tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],tiddler.fields.text);
}
});
};
/*
Enable safe mode by deleting any tiddlers that override a shadow tiddler
*/
$tw.Wiki.prototype.processSafeMode = function() {
var self = this,
overrides = [];
// Find the overriding tiddlers
this.each(function(tiddler,title) {
if(self.isShadowTiddler(title)) {
console.log(title);
overrides.push(title);
}
});
// Assemble a report tiddler
var titleReportTiddler = "TiddlyWiki Safe Mode",
report = [];
report.push("TiddlyWiki has been started in [[safe mode|https://tiddlywiki.com/static/SafeMode.html]]. All plugins are temporarily disabled. Most customisations have been disabled by renaming the following tiddlers:")
// Delete the overrides
overrides.forEach(function(title) {
var tiddler = self.getTiddler(title),
newTitle = "SAFE: " + title;
self.deleteTiddler(title);
self.addTiddler(new $tw.Tiddler(tiddler, {title: newTitle}));
report.push("* [[" + title + "|" + newTitle + "]]");
});
report.push()
this.addTiddler(new $tw.Tiddler({title: titleReportTiddler, text: report.join("\n\n")}));
// Set $:/DefaultTiddlers to point to our report
this.addTiddler(new $tw.Tiddler({title: "$:/DefaultTiddlers", text: "[[" + titleReportTiddler + "]]"}));
};
/*
Extracts tiddlers from a typed block of text, specifying default field values
*/
$tw.Wiki.prototype.deserializeTiddlers = function(type,text,srcFields,options) {
srcFields = srcFields || Object.create(null);
options = options || {};
var deserializer = $tw.Wiki.tiddlerDeserializerModules[options.deserializer],
fields = Object.create(null);
if(!deserializer) {
deserializer = $tw.Wiki.tiddlerDeserializerModules[type];
}
if(!deserializer && $tw.utils.getFileExtensionInfo(type)) {
// If we didn't find the serializer, try converting it from an extension to a content type
type = $tw.utils.getFileExtensionInfo(type).type;
deserializer = $tw.Wiki.tiddlerDeserializerModules[type];
}
if(!deserializer && $tw.config.contentTypeInfo[type]) {
// see if this type has a different deserializer registered with it
type = $tw.config.contentTypeInfo[type].deserializerType;
deserializer = $tw.Wiki.tiddlerDeserializerModules[type];
}
if(!deserializer) {
// If we still don't have a deserializer, treat it as plain text
deserializer = $tw.Wiki.tiddlerDeserializerModules["text/plain"];
}
for(var f in srcFields) {
fields[f] = srcFields[f];
}
if(deserializer) {
return deserializer.call(this,text,fields,type);
} else {
// Return a raw tiddler for unknown types
fields.text = text;
return [fields];
}
};
/*
Register the built in tiddler deserializer modules
*/
var deserializeHeaderComment = function(text,fields) {
var headerCommentRegExp = new RegExp($tw.config.jsModuleHeaderRegExpString,"mg"),
match = headerCommentRegExp.exec(text);
fields.text = text;
if(match) {
fields = $tw.utils.parseFields(match[1].split(/\r?\n\r?\n/mg)[0],fields);
}
return [fields];
};
$tw.modules.define("$:/boot/tiddlerdeserializer/js","tiddlerdeserializer",{
"application/javascript": deserializeHeaderComment
});
$tw.modules.define("$:/boot/tiddlerdeserializer/css","tiddlerdeserializer",{
"text/css": deserializeHeaderComment
});
$tw.modules.define("$:/boot/tiddlerdeserializer/tid","tiddlerdeserializer",{
"application/x-tiddler": function(text,fields) {
var split = text.split(/\r?\n\r?\n/mg);
if(split.length >= 1) {
fields = $tw.utils.parseFields(split[0],fields);
}
if(split.length >= 2) {
fields.text = split.slice(1).join("\n\n");
}
return [fields];
}
});
$tw.modules.define("$:/boot/tiddlerdeserializer/tids","tiddlerdeserializer",{
"application/x-tiddlers": function(text,fields) {
var titles = [],
tiddlers = [],
match = /\r?\n\r?\n/mg.exec(text);
if(match) {
fields = $tw.utils.parseFields(text.substr(0,match.index),fields);
var lines = text.substr(match.index + match[0].length).split(/\r?\n/mg);
for(var t=0; t<lines.length; t++) {
var line = lines[t];
if(line.charAt(0) !== "#") {
var colonPos= line.indexOf(":");
if(colonPos !== -1) {
var tiddler = $tw.utils.extend(Object.create(null),fields);
tiddler.title = (tiddler.title || "") + line.substr(0,colonPos).trim();
if(titles.indexOf(tiddler.title) !== -1) {
console.log("Warning: .multids file contains multiple definitions for " + tiddler.title);
}
titles.push(tiddler.title);
tiddler.text = line.substr(colonPos + 2).trim();
tiddlers.push(tiddler);
}
}
}
}
return tiddlers;
}
});
$tw.modules.define("$:/boot/tiddlerdeserializer/txt","tiddlerdeserializer",{
"text/plain": function(text,fields,type) {
fields.text = text;
fields.type = type || "text/plain";
return [fields];
}
});
$tw.modules.define("$:/boot/tiddlerdeserializer/html","tiddlerdeserializer",{
"text/html": function(text,fields) {
fields.text = text;
fields.type = "text/html";
return [fields];
}
});
$tw.modules.define("$:/boot/tiddlerdeserializer/json","tiddlerdeserializer",{
"application/json": function(text,fields) {
var isTiddlerValid = function(data) {
// Not valid if it's not an object with a title property
if(typeof(data) !== "object" || !$tw.utils.hop(data,"title")) {
return false;
}
for(var f in data) {
if($tw.utils.hop(data,f)) {
2022-01-03 21:31:14 +00:00
// Check field name doesn't contain control characters
if(typeof(data[f]) !== "string" || /[\x00-\x1F]/.test(f)) {
2021-09-21 16:32:33 +00:00
return false;
}
}
}
return true;
},
isTiddlerArrayValid = function(data) {
for(var t=0; t<data.length; t++) {
if(!isTiddlerValid(data[t])) {
return false;
}
}
return true;
},
2022-01-03 21:31:14 +00:00
data = {};
try {
data = JSON.parse(text);
} catch(e) {
// Ignore JSON parse errors
}
2021-09-21 16:32:33 +00:00
if($tw.utils.isArray(data) && isTiddlerArrayValid(data)) {
return data;
} else if(isTiddlerValid(data)) {
return [data];
} else {
// Plain JSON file
fields.text = text;
fields.type = "application/json";
return [fields];
}
}
});
/////////////////////////// Browser definitions
if($tw.browser && !$tw.node) {
/*
Decrypt any tiddlers stored within the element with the ID "encryptedArea". The function is asynchronous to allow the user to be prompted for a password
callback: function to be called the decryption is complete
*/
$tw.boot.decryptEncryptedTiddlers = function(callback) {
var encryptedArea = document.getElementById("encryptedStoreArea");
if(encryptedArea) {
var encryptedText = encryptedArea.innerHTML,
prompt = "Enter a password to decrypt this TiddlyWiki";
// Prompt for the password
if($tw.utils.hop($tw.boot,"encryptionPrompts")) {
prompt = $tw.boot.encryptionPrompts.decrypt;
}
$tw.passwordPrompt.createPrompt({
serviceName: prompt,
noUserName: true,
submitText: "Decrypt",
callback: function(data) {
// Attempt to decrypt the tiddlers
$tw.crypto.setPassword(data.password);
var decryptedText = $tw.crypto.decrypt(encryptedText);
if(decryptedText) {
var json = JSON.parse(decryptedText);
for(var title in json) {
$tw.preloadTiddler(json[title]);
}
// Call the callback
callback();
// Exit and remove the password prompt
return true;
} else {
// We didn't decrypt everything, so continue to prompt for password
return false;
}
}
});
} else {
// Just invoke the callback straight away if there weren't any encrypted tiddlers
callback();
}
};
/*
Register a deserializer that can extract tiddlers from the DOM
*/
$tw.modules.define("$:/boot/tiddlerdeserializer/dom","tiddlerdeserializer",{
"(DOM)": function(node) {
var extractTextTiddlers = function(node) {
var e = node.firstChild;
while(e && e.nodeName.toLowerCase() !== "pre") {
e = e.nextSibling;
}
var title = node.getAttribute ? node.getAttribute("title") : null;
if(e && title) {
var attrs = node.attributes,
tiddler = {
text: $tw.utils.htmlDecode(e.innerHTML)
};
for(var i=attrs.length-1; i >= 0; i--) {
tiddler[attrs[i].name] = attrs[i].value;
}
return [tiddler];
} else {
return null;
}
},
extractModuleTiddlers = function(node) {
if(node.hasAttribute && node.hasAttribute("data-tiddler-title")) {
var text = node.innerHTML,
s = text.indexOf("{"),
e = text.lastIndexOf("}");
if(node.hasAttribute("data-module") && s !== -1 && e !== -1) {
text = text.substring(s+1,e);
}
var fields = {text: text},
attributes = node.attributes;
for(var a=0; a<attributes.length; a++) {
if(attributes[a].nodeName.substr(0,13) === "data-tiddler-") {
fields[attributes[a].nodeName.substr(13)] = attributes[a].value;
}
}
return [fields];
} else {
return null;
}
},
t,result = [];
if(node) {
2022-01-03 21:31:14 +00:00
var type = (node.getAttribute && node.getAttribute("type")) || null;
if(type) {
// A new-style container with an explicit deserialization type
result = $tw.wiki.deserializeTiddlers(type,node.textContent);
} else {
// An old-style container of classic DIV-based tiddlers
for(t = 0; t < node.childNodes.length; t++) {
2021-09-21 16:32:33 +00:00
var childNode = node.childNodes[t],
tiddlers = extractTextTiddlers(childNode);
tiddlers = tiddlers || extractModuleTiddlers(childNode);
if(tiddlers) {
result.push.apply(result,tiddlers);
}
2022-01-03 21:31:14 +00:00
}
2021-09-21 16:32:33 +00:00
}
}
return result;
}
});
$tw.loadTiddlersBrowser = function() {
// In the browser, we load tiddlers from certain elements
2022-01-03 21:31:14 +00:00
var containerSelectors = [
// IDs for old-style v5.1.x tiddler stores
"#libraryModules",
"#modules",
"#bootKernelPrefix",
"#bootKernel",
"#styleArea",
"#storeArea",
"#systemArea",
// Classes for new-style v5.2.x JSON tiddler stores
"script.tiddlywiki-tiddler-store"
2021-09-21 16:32:33 +00:00
];
2022-01-03 21:31:14 +00:00
for(var t=0; t<containerSelectors.length; t++) {
var nodes = document.querySelectorAll(containerSelectors[t]);
for(var n=0; n<nodes.length; n++) {
$tw.wiki.addTiddlers($tw.wiki.deserializeTiddlers("(DOM)",nodes[n]));
}
2021-09-21 16:32:33 +00:00
}
};
} else {
/////////////////////////// Server definitions
/*
Get any encrypted tiddlers
*/
$tw.boot.decryptEncryptedTiddlers = function(callback) {
// Storing encrypted tiddlers on the server isn't supported yet
callback();
};
} // End of if($tw.browser && !$tw.node)
/////////////////////////// Node definitions
if($tw.node) {
/*
Load the tiddlers contained in a particular file (and optionally extract fields from the accompanying .meta file) returned as {filepath:,type:,tiddlers:[],hasMetaFile:}
*/
$tw.loadTiddlersFromFile = function(filepath,fields) {
var ext = path.extname(filepath),
extensionInfo = $tw.utils.getFileExtensionInfo(ext),
type = extensionInfo ? extensionInfo.type : null,
typeInfo = type ? $tw.config.contentTypeInfo[type] : null,
data = fs.readFileSync(filepath,typeInfo ? typeInfo.encoding : "utf8"),
tiddlers = $tw.wiki.deserializeTiddlers(ext,data,fields),
metadata = $tw.loadMetadataForFile(filepath);
if(metadata) {
if(type === "application/json") {
tiddlers = [{text: data, type: "application/json"}];
}
tiddlers = [$tw.utils.extend({},tiddlers[0],metadata)];
}
return {filepath: filepath, type: type, tiddlers: tiddlers, hasMetaFile: !!metadata};
};
/*
Load the metadata fields in the .meta file corresponding to a particular file
*/
$tw.loadMetadataForFile = function(filepath) {
var metafilename = filepath + ".meta";
if(fs.existsSync(metafilename)) {
return $tw.utils.parseFields(fs.readFileSync(metafilename,"utf8") || "");
} else {
return null;
}
};
/*
A default set of files for TiddlyWiki to ignore during load.
This matches what NPM ignores, and adds "*.meta" to ignore tiddler
metadata files.
*/
$tw.boot.excludeRegExp = /^\.DS_Store$|^.*\.meta$|^\..*\.swp$|^\._.*$|^\.git$|^\.hg$|^\.lock-wscript$|^\.svn$|^\.wafpickle-.*$|^CVS$|^npm-debug\.log$/;
/*
Load all the tiddlers recursively from a directory, including honouring `tiddlywiki.files` files for drawing in external files. Returns an array of {filepath:,type:,tiddlers: [{..fields...}],hasMetaFile:}. Note that no file information is returned for externally loaded tiddlers, just the `tiddlers` property.
*/
$tw.loadTiddlersFromPath = function(filepath,excludeRegExp) {
excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp;
var tiddlers = [];
if(fs.existsSync(filepath)) {
var stat = fs.statSync(filepath);
if(stat.isDirectory()) {
var files = fs.readdirSync(filepath);
// Look for a tiddlywiki.files file
if(files.indexOf("tiddlywiki.files") !== -1) {
Array.prototype.push.apply(tiddlers,$tw.loadTiddlersFromSpecification(filepath,excludeRegExp));
} else {
// If not, read all the files in the directory
$tw.utils.each(files,function(file) {
if(!excludeRegExp.test(file) && file !== "plugin.info") {
tiddlers.push.apply(tiddlers,$tw.loadTiddlersFromPath(filepath + path.sep + file,excludeRegExp));
}
});
}
} else if(stat.isFile()) {
tiddlers.push($tw.loadTiddlersFromFile(filepath,{title: filepath}));
}
}
return tiddlers;
};
/*
Load all the tiddlers defined by a `tiddlywiki.files` specification file
filepath: pathname of the directory containing the specification file
*/
$tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
var tiddlers = [];
// Read the specification
var filesInfo = JSON.parse(fs.readFileSync(filepath + path.sep + "tiddlywiki.files","utf8"));
// Helper to process a file
var processFile = function(filename,isTiddlerFile,fields,isEditableFile) {
var extInfo = $tw.config.fileExtensionInfo[path.extname(filename)],
type = (extInfo || {}).type || fields.type || "text/plain",
typeInfo = $tw.config.contentTypeInfo[type] || {},
pathname = path.resolve(filepath,filename),
text = fs.readFileSync(pathname,typeInfo.encoding || "utf8"),
metadata = $tw.loadMetadataForFile(pathname) || {},
fileTiddlers;
if(isTiddlerFile) {
fileTiddlers = $tw.wiki.deserializeTiddlers(path.extname(pathname),text,metadata) || [];
} else {
fileTiddlers = [$tw.utils.extend({text: text},metadata)];
}
var combinedFields = $tw.utils.extend({},fields,metadata);
$tw.utils.each(fileTiddlers,function(tiddler) {
$tw.utils.each(combinedFields,function(fieldInfo,name) {
if(typeof fieldInfo === "string" || $tw.utils.isArray(fieldInfo)) {
tiddler[name] = fieldInfo;
} else {
var value = tiddler[name];
switch(fieldInfo.source) {
case "filename":
value = path.basename(filename);
break;
case "filename-uri-decoded":
2022-01-03 21:31:14 +00:00
value = $tw.utils.decodeURIComponentSafe(path.basename(filename));
2021-09-21 16:32:33 +00:00
break;
case "basename":
value = path.basename(filename,path.extname(filename));
break;
case "basename-uri-decoded":
2022-01-03 21:31:14 +00:00
value = $tw.utils.decodeURIComponentSafe(path.basename(filename,path.extname(filename)));
2021-09-21 16:32:33 +00:00
break;
case "extname":
value = path.extname(filename);
break;
case "created":
value = new Date(fs.statSync(pathname).birthtime);
break;
case "modified":
value = new Date(fs.statSync(pathname).mtime);
break;
}
if(fieldInfo.prefix) {
value = fieldInfo.prefix + value;
}
if(fieldInfo.suffix) {
value = value + fieldInfo.suffix;
}
tiddler[name] = value;
}
});
});
if(isEditableFile) {
tiddlers.push({filepath: pathname, hasMetaFile: !!metadata && !isTiddlerFile, isEditableFile: true, tiddlers: fileTiddlers});
} else {
tiddlers.push({tiddlers: fileTiddlers});
}
};
// Process the listed tiddlers
$tw.utils.each(filesInfo.tiddlers,function(tidInfo) {
if(tidInfo.prefix && tidInfo.suffix) {
tidInfo.fields.text = {prefix: tidInfo.prefix,suffix: tidInfo.suffix};
} else if(tidInfo.prefix) {
tidInfo.fields.text = {prefix: tidInfo.prefix};
} else if(tidInfo.suffix) {
tidInfo.fields.text = {suffix: tidInfo.suffix};
}
processFile(tidInfo.file,tidInfo.isTiddlerFile,tidInfo.fields);
});
// Process any listed directories
$tw.utils.each(filesInfo.directories,function(dirSpec) {
// Read literal directories directly
if(typeof dirSpec === "string") {
var pathname = path.resolve(filepath,dirSpec);
if(fs.existsSync(pathname) && fs.statSync(pathname).isDirectory()) {
tiddlers.push.apply(tiddlers,$tw.loadTiddlersFromPath(pathname,excludeRegExp));
}
} else {
// Process directory specifier
var dirPath = path.resolve(filepath,dirSpec.path);
if(fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
var files = fs.readdirSync(dirPath),
fileRegExp = new RegExp(dirSpec.filesRegExp || "^.*$"),
metaRegExp = /^.*\.meta$/;
for(var t=0; t<files.length; t++) {
var filename = files[t];
if(filename !== "tiddlywiki.files" && !metaRegExp.test(filename) && fileRegExp.test(filename)) {
processFile(dirPath + path.sep + filename,dirSpec.isTiddlerFile,dirSpec.fields,dirSpec.isEditableFile);
}
}
} else {
console.log("Warning: a directory in a tiddlywiki.files file does not exist.");
2022-01-03 21:31:14 +00:00
console.log("dirPath: " + dirPath);
2021-09-21 16:32:33 +00:00
console.log("tiddlywiki.files location: " + filepath);
}
}
});
return tiddlers;
};
/*
Load the tiddlers from a plugin folder, and package them up into a proper JSON plugin tiddler
*/
$tw.loadPluginFolder = function(filepath,excludeRegExp) {
excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp;
var infoPath = filepath + path.sep + "plugin.info";
if(fs.existsSync(filepath) && fs.statSync(filepath).isDirectory()) {
// Read the plugin information
if(!fs.existsSync(infoPath) || !fs.statSync(infoPath).isFile()) {
console.log("Warning: missing plugin.info file in " + filepath);
return null;
}
var pluginInfo = JSON.parse(fs.readFileSync(infoPath,"utf8"));
// Read the plugin files
var pluginFiles = $tw.loadTiddlersFromPath(filepath,excludeRegExp);
// Save the plugin tiddlers into the plugin info
pluginInfo.tiddlers = pluginInfo.tiddlers || Object.create(null);
for(var f=0; f<pluginFiles.length; f++) {
var tiddlers = pluginFiles[f].tiddlers;
for(var t=0; t<tiddlers.length; t++) {
var tiddler= tiddlers[t];
if(tiddler.title) {
pluginInfo.tiddlers[tiddler.title] = tiddler;
}
}
}
// Give the plugin the same version number as the core if it doesn't have one
if(!("version" in pluginInfo)) {
pluginInfo.version = $tw.packageInfo.version;
}
// Use "plugin" as the plugin-type if we don't have one
if(!("plugin-type" in pluginInfo)) {
pluginInfo["plugin-type"] = "plugin";
}
pluginInfo.dependents = pluginInfo.dependents || [];
pluginInfo.type = "application/json";
// Set plugin text
2022-01-03 21:31:14 +00:00
pluginInfo.text = JSON.stringify({tiddlers: pluginInfo.tiddlers});
2021-09-21 16:32:33 +00:00
delete pluginInfo.tiddlers;
// Deserialise array fields (currently required for the dependents field)
for(var field in pluginInfo) {
if($tw.utils.isArray(pluginInfo[field])) {
pluginInfo[field] = $tw.utils.stringifyList(pluginInfo[field]);
}
}
return pluginInfo;
} else {
return null;
}
};
/*
name: Name of the plugin to find
paths: array of file paths to search for it
Returns the path of the plugin folder
*/
$tw.findLibraryItem = function(name,paths) {
var pathIndex = 0;
do {
var pluginPath = path.resolve(paths[pathIndex],"./" + name)
if(fs.existsSync(pluginPath) && fs.statSync(pluginPath).isDirectory()) {
return pluginPath;
}
} while(++pathIndex < paths.length);
return null;
};
/*
name: Name of the plugin to load
paths: array of file paths to search for it
*/
$tw.loadPlugin = function(name,paths) {
var pluginPath = $tw.findLibraryItem(name,paths);
if(pluginPath) {
var pluginFields = $tw.loadPluginFolder(pluginPath);
if(pluginFields) {
$tw.wiki.addTiddler(pluginFields);
return;
}
}
console.log("Warning: Cannot find plugin '" + name + "'");
};
/*
libraryPath: Path of library folder for these plugins (relative to core path)
envVar: Environment variable name for these plugins
Returns an array of search paths
*/
$tw.getLibraryItemSearchPaths = function(libraryPath,envVar) {
var pluginPaths = [path.resolve($tw.boot.corePath,libraryPath)],
env = process.env[envVar];
if(env) {
env.split(path.delimiter).map(function(item) {
if(item) {
pluginPaths.push(item);
}
});
}
return pluginPaths;
};
/*
plugins: Array of names of plugins (eg, "tiddlywiki/filesystemadaptor")
libraryPath: Path of library folder for these plugins (relative to core path)
envVar: Environment variable name for these plugins
*/
$tw.loadPlugins = function(plugins,libraryPath,envVar) {
if(plugins) {
var pluginPaths = $tw.getLibraryItemSearchPaths(libraryPath,envVar);
for(var t=0; t<plugins.length; t++) {
$tw.loadPlugin(plugins[t],pluginPaths);
}
}
};
/*
path: path of wiki directory
options:
parentPaths: array of parent paths that we mustn't recurse into
readOnly: true if the tiddler file paths should not be retained
*/
$tw.loadWikiTiddlers = function(wikiPath,options) {
options = options || {};
var parentPaths = options.parentPaths || [],
wikiInfoPath = path.resolve(wikiPath,$tw.config.wikiInfo),
wikiInfo,
pluginFields;
// Bail if we don't have a wiki info file
if(fs.existsSync(wikiInfoPath)) {
wikiInfo = JSON.parse(fs.readFileSync(wikiInfoPath,"utf8"));
} else {
return null;
}
// Save the path to the tiddlers folder for the filesystemadaptor
var config = wikiInfo.config || {};
if($tw.boot.wikiPath == wikiPath) {
$tw.boot.wikiTiddlersPath = path.resolve($tw.boot.wikiPath,config["default-tiddler-location"] || $tw.config.wikiTiddlersSubDir);
}
// Load any parent wikis
if(wikiInfo.includeWikis) {
parentPaths = parentPaths.slice(0);
parentPaths.push(wikiPath);
$tw.utils.each(wikiInfo.includeWikis,function(info) {
if(typeof info === "string") {
info = {path: info};
}
var resolvedIncludedWikiPath = path.resolve(wikiPath,info.path);
if(parentPaths.indexOf(resolvedIncludedWikiPath) === -1) {
var subWikiInfo = $tw.loadWikiTiddlers(resolvedIncludedWikiPath,{
parentPaths: parentPaths,
readOnly: info["read-only"]
});
// Merge the build targets
wikiInfo.build = $tw.utils.extend([],subWikiInfo.build,wikiInfo.build);
} else {
$tw.utils.error("Cannot recursively include wiki " + resolvedIncludedWikiPath);
}
});
}
// Load any plugins, themes and languages listed in the wiki info file
$tw.loadPlugins(wikiInfo.plugins,$tw.config.pluginsPath,$tw.config.pluginsEnvVar);
$tw.loadPlugins(wikiInfo.themes,$tw.config.themesPath,$tw.config.themesEnvVar);
$tw.loadPlugins(wikiInfo.languages,$tw.config.languagesPath,$tw.config.languagesEnvVar);
// Load the wiki files, registering them as writable
var resolvedWikiPath = path.resolve(wikiPath,$tw.config.wikiTiddlersSubDir);
$tw.utils.each($tw.loadTiddlersFromPath(resolvedWikiPath),function(tiddlerFile) {
if(!options.readOnly && tiddlerFile.filepath) {
$tw.utils.each(tiddlerFile.tiddlers,function(tiddler) {
$tw.boot.files[tiddler.title] = {
filepath: tiddlerFile.filepath,
type: tiddlerFile.type,
hasMetaFile: tiddlerFile.hasMetaFile,
isEditableFile: config["retain-original-tiddler-path"] || tiddlerFile.isEditableFile || tiddlerFile.filepath.indexOf($tw.boot.wikiTiddlersPath) !== 0
};
});
}
$tw.wiki.addTiddlers(tiddlerFile.tiddlers);
});
if ($tw.boot.wikiPath == wikiPath) {
// Save the original tiddler file locations if requested
var output = {}, relativePath, fileInfo;
for(var title in $tw.boot.files) {
fileInfo = $tw.boot.files[title];
if(fileInfo.isEditableFile) {
relativePath = path.relative($tw.boot.wikiTiddlersPath,fileInfo.filepath);
2022-01-03 21:31:14 +00:00
fileInfo.originalpath = relativePath;
2021-09-21 16:32:33 +00:00
output[title] =
path.sep === "/" ?
relativePath :
relativePath.split(path.sep).join("/");
}
}
if(Object.keys(output).length > 0){
$tw.wiki.addTiddler({title: "$:/config/OriginalTiddlerPaths", type: "application/json", text: JSON.stringify(output)});
}
}
// Load any plugins within the wiki folder
var wikiPluginsPath = path.resolve(wikiPath,$tw.config.wikiPluginsSubDir);
if(fs.existsSync(wikiPluginsPath)) {
var pluginFolders = fs.readdirSync(wikiPluginsPath);
for(var t=0; t<pluginFolders.length; t++) {
pluginFields = $tw.loadPluginFolder(path.resolve(wikiPluginsPath,"./" + pluginFolders[t]));
if(pluginFields) {
$tw.wiki.addTiddler(pluginFields);
}
}
}
// Load any themes within the wiki folder
var wikiThemesPath = path.resolve(wikiPath,$tw.config.wikiThemesSubDir);
if(fs.existsSync(wikiThemesPath)) {
var themeFolders = fs.readdirSync(wikiThemesPath);
for(var t=0; t<themeFolders.length; t++) {
pluginFields = $tw.loadPluginFolder(path.resolve(wikiThemesPath,"./" + themeFolders[t]));
if(pluginFields) {
$tw.wiki.addTiddler(pluginFields);
}
}
}
// Load any languages within the wiki folder
var wikiLanguagesPath = path.resolve(wikiPath,$tw.config.wikiLanguagesSubDir);
if(fs.existsSync(wikiLanguagesPath)) {
var languageFolders = fs.readdirSync(wikiLanguagesPath);
for(var t=0; t<languageFolders.length; t++) {
pluginFields = $tw.loadPluginFolder(path.resolve(wikiLanguagesPath,"./" + languageFolders[t]));
if(pluginFields) {
$tw.wiki.addTiddler(pluginFields);
}
}
}
return wikiInfo;
};
$tw.loadTiddlersNode = function() {
// Load the boot tiddlers
$tw.utils.each($tw.loadTiddlersFromPath($tw.boot.bootPath),function(tiddlerFile) {
$tw.wiki.addTiddlers(tiddlerFile.tiddlers);
});
// Load the core tiddlers
$tw.wiki.addTiddler($tw.loadPluginFolder($tw.boot.corePath));
// Load any extra plugins
$tw.utils.each($tw.boot.extraPlugins,function(name) {
if(name.charAt(0) === "+") { // Relative path to plugin
var pluginFields = $tw.loadPluginFolder(name.substring(1));
if(pluginFields) {
$tw.wiki.addTiddler(pluginFields);
}
} else {
var parts = name.split("/"),
type = parts[0];
if(parts.length === 3 && ["plugins","themes","languages"].indexOf(type) !== -1) {
$tw.loadPlugins([parts[1] + "/" + parts[2]],$tw.config[type + "Path"],$tw.config[type + "EnvVar"]);
2022-01-03 21:31:14 +00:00
}
2021-09-21 16:32:33 +00:00
}
});
// Load the tiddlers from the wiki directory
if($tw.boot.wikiPath) {
$tw.boot.wikiInfo = $tw.loadWikiTiddlers($tw.boot.wikiPath);
}
};
// End of if($tw.node)
}
/////////////////////////// Main startup function called once tiddlers have been decrypted
/*
Startup TiddlyWiki
*/
$tw.boot.initStartup = function(options) {
// Get the URL hash and check for safe mode
$tw.locationHash = "#";
if($tw.browser && !$tw.node) {
if(location.hash === "#:safe") {
$tw.safeMode = true;
} else {
$tw.locationHash = $tw.utils.getLocationHash();
}
}
// Initialise some more $tw properties
$tw.utils.deepDefaults($tw,{
modules: { // Information about each module
titles: Object.create(null), // hashmap by module title of {fn:, exports:, moduleType:}
types: {} // hashmap by module type of hashmap of exports
},
config: { // Configuration overridables
pluginsPath: "../plugins/",
themesPath: "../themes/",
languagesPath: "../languages/",
editionsPath: "../editions/",
wikiInfo: "./tiddlywiki.info",
wikiPluginsSubDir: "./plugins",
wikiThemesSubDir: "./themes",
wikiLanguagesSubDir: "./languages",
wikiTiddlersSubDir: "./tiddlers",
wikiOutputSubDir: "./output",
jsModuleHeaderRegExpString: "^\\/\\*\\\\(?:\\r?\\n)((?:^[^\\r\\n]*(?:\\r?\\n))+?)(^\\\\\\*\\/$(?:\\r?\\n)?)",
fileExtensionInfo: Object.create(null), // Map file extension to {type:}
contentTypeInfo: Object.create(null), // Map type to {encoding:,extension:}
pluginsEnvVar: "TIDDLYWIKI_PLUGIN_PATH",
themesEnvVar: "TIDDLYWIKI_THEME_PATH",
languagesEnvVar: "TIDDLYWIKI_LANGUAGE_PATH",
editionsEnvVar: "TIDDLYWIKI_EDITION_PATH"
},
log: {}, // Log flags
unloadTasks: []
});
if(!$tw.boot.tasks.readBrowserTiddlers) {
// For writable tiddler files, a hashmap of title to {filepath:,type:,hasMetaFile:}
$tw.boot.files = Object.create(null);
// System paths and filenames
$tw.boot.bootPath = options.bootPath || path.dirname(module.filename);
$tw.boot.corePath = path.resolve($tw.boot.bootPath,"../core");
// If there's no arguments then default to `--help`
if($tw.boot.argv.length === 0) {
$tw.boot.argv = ["--help"];
}
// Parse any extra plugin references
$tw.boot.extraPlugins = $tw.boot.extraPlugins || [];
while($tw.boot.argv[0] && $tw.boot.argv[0].indexOf("+") === 0) {
$tw.boot.extraPlugins.push($tw.boot.argv[0].substring(1));
$tw.boot.argv.splice(0,1);
}
// If the first command line argument doesn't start with `--` then we
// interpret it as the path to the wiki folder, which will otherwise default
// to the current folder
if($tw.boot.argv[0] && $tw.boot.argv[0].indexOf("--") !== 0) {
$tw.boot.wikiPath = $tw.boot.argv[0];
$tw.boot.argv = $tw.boot.argv.slice(1);
} else {
$tw.boot.wikiPath = process.cwd();
}
// Read package info
$tw.packageInfo = $tw.packageInfo || require("../package.json");
// Check node version number
if(!$tw.utils.checkVersions(process.version.substr(1),$tw.packageInfo.engines.node.substr(2))) {
$tw.utils.error("TiddlyWiki5 requires node.js version " + $tw.packageInfo.engines.node);
}
}
// Add file extension information
$tw.utils.registerFileType("text/vnd.tiddlywiki","utf8",".tid");
$tw.utils.registerFileType("application/x-tiddler","utf8",".tid");
$tw.utils.registerFileType("application/x-tiddlers","utf8",".multids");
$tw.utils.registerFileType("application/x-tiddler-html-div","utf8",".tiddler");
$tw.utils.registerFileType("text/vnd.tiddlywiki2-recipe","utf8",".recipe");
$tw.utils.registerFileType("text/plain","utf8",".txt");
$tw.utils.registerFileType("text/css","utf8",".css");
$tw.utils.registerFileType("text/html","utf8",[".html",".htm"]);
$tw.utils.registerFileType("application/hta","utf16le",".hta",{deserializerType:"text/html"});
$tw.utils.registerFileType("application/javascript","utf8",".js");
$tw.utils.registerFileType("application/json","utf8",".json");
$tw.utils.registerFileType("application/pdf","base64",".pdf",{flags:["image"]});
$tw.utils.registerFileType("application/zip","base64",".zip");
$tw.utils.registerFileType("application/x-zip-compressed","base64",".zip");
$tw.utils.registerFileType("image/jpeg","base64",[".jpg",".jpeg"],{flags:["image"]});
$tw.utils.registerFileType("image/jpg","base64",[".jpg",".jpeg"],{flags:["image"]});
$tw.utils.registerFileType("image/png","base64",".png",{flags:["image"]});
$tw.utils.registerFileType("image/gif","base64",".gif",{flags:["image"]});
$tw.utils.registerFileType("image/webp","base64",".webp",{flags:["image"]});
$tw.utils.registerFileType("image/heic","base64",".heic",{flags:["image"]});
$tw.utils.registerFileType("image/heif","base64",".heif",{flags:["image"]});
$tw.utils.registerFileType("image/svg+xml","utf8",".svg",{flags:["image"]});
2022-01-03 21:31:14 +00:00
$tw.utils.registerFileType("image/vnd.microsoft.icon","base64",".ico",{flags:["image"]});
2021-09-21 16:32:33 +00:00
$tw.utils.registerFileType("image/x-icon","base64",".ico",{flags:["image"]});
$tw.utils.registerFileType("application/font-woff","base64",".woff");
$tw.utils.registerFileType("application/x-font-ttf","base64",".woff");
$tw.utils.registerFileType("application/font-woff2","base64",".woff2");
$tw.utils.registerFileType("audio/ogg","base64",".ogg");
$tw.utils.registerFileType("video/ogg","base64",[".ogm",".ogv",".ogg"]);
$tw.utils.registerFileType("video/webm","base64",".webm");
$tw.utils.registerFileType("video/mp4","base64",".mp4");
$tw.utils.registerFileType("audio/mp3","base64",".mp3");
$tw.utils.registerFileType("audio/mp4","base64",[".mp4",".m4a"]);
$tw.utils.registerFileType("text/markdown","utf8",[".md",".markdown"],{deserializerType:"text/x-markdown"});
$tw.utils.registerFileType("text/x-markdown","utf8",[".md",".markdown"]);
$tw.utils.registerFileType("application/enex+xml","utf8",".enex");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.wordprocessingml.document","base64",".docx");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","base64",".xlsx");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.presentationml.presentation","base64",".pptx");
$tw.utils.registerFileType("text/x-bibtex","utf8",".bib",{deserializerType:"application/x-bibtex"});
$tw.utils.registerFileType("application/x-bibtex","utf8",".bib");
$tw.utils.registerFileType("application/epub+zip","base64",".epub");
$tw.utils.registerFileType("application/octet-stream","base64",".octet-stream");
// Create the wiki store for the app
$tw.wiki = new $tw.Wiki();
// Install built in tiddler fields modules
$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap("tiddlerfield");
// Install the tiddler deserializer modules
$tw.Wiki.tiddlerDeserializerModules = Object.create(null);
$tw.modules.applyMethods("tiddlerdeserializer",$tw.Wiki.tiddlerDeserializerModules);
// Call unload handlers in the browser
if($tw.browser) {
window.onbeforeunload = function(event) {
event = event || {};
var result;
$tw.utils.each($tw.unloadTasks,function(task) {
var r = task(event);
if(r) {
result = r;
}
});
return result;
}
}
};
$tw.boot.loadStartup = function(options){
// Load tiddlers
if($tw.boot.tasks.readBrowserTiddlers) {
$tw.loadTiddlersBrowser();
} else {
$tw.loadTiddlersNode();
}
// Load any preloaded tiddlers
if($tw.preloadTiddlers) {
$tw.wiki.addTiddlers($tw.preloadTiddlers);
}
// Give hooks a chance to modify the store
$tw.hooks.invokeHook("th-boot-tiddlers-loaded");
}
$tw.boot.execStartup = function(options){
// Unpack plugin tiddlers
$tw.wiki.readPluginInfo();
$tw.wiki.registerPluginTiddlers("plugin",$tw.safeMode ? ["$:/core"] : undefined);
$tw.wiki.unpackPluginTiddlers();
// Process "safe mode"
if($tw.safeMode) {
$tw.wiki.processSafeMode();
}
// Register typed modules from the tiddlers we've just loaded
$tw.wiki.defineTiddlerModules();
// And any modules within plugins
$tw.wiki.defineShadowModules();
// Make sure the crypto state tiddler is up to date
if($tw.crypto) {
$tw.crypto.updateCryptoStateTiddler();
}
// Gather up any startup modules
$tw.boot.remainingStartupModules = []; // Array of startup modules
$tw.modules.forEachModuleOfType("startup",function(title,module) {
if(module.startup) {
$tw.boot.remainingStartupModules.push(module);
}
});
// Keep track of the startup tasks that have been executed
$tw.boot.executedStartupModules = Object.create(null);
$tw.boot.disabledStartupModules = $tw.boot.disabledStartupModules || [];
// Repeatedly execute the next eligible task
$tw.boot.executeNextStartupTask(options.callback);
}
/*
Startup TiddlyWiki
*/
$tw.boot.startup = function(options) {
options = options || {};
// Get the URL hash and check for safe mode
$tw.boot.initStartup(options);
$tw.boot.loadStartup(options);
$tw.boot.execStartup(options);
};
/*
Add another unload task
*/
$tw.addUnloadTask = function(task) {
if($tw.unloadTasks.indexOf(task) === -1) {
$tw.unloadTasks.push(task);
}
}
/*
Execute the remaining eligible startup tasks
*/
$tw.boot.executeNextStartupTask = function(callback) {
// Find the next eligible task
var taskIndex = 0, task,
asyncTaskCallback = function() {
if(task.name) {
$tw.boot.executedStartupModules[task.name] = true;
}
return $tw.boot.executeNextStartupTask(callback);
};
while(taskIndex < $tw.boot.remainingStartupModules.length) {
task = $tw.boot.remainingStartupModules[taskIndex];
if($tw.boot.isStartupTaskEligible(task)) {
// Remove this task from the list
$tw.boot.remainingStartupModules.splice(taskIndex,1);
// Assemble log message
var s = ["Startup task:",task.name];
if(task.platforms) {
s.push("platforms:",task.platforms.join(","));
}
if(task.after) {
s.push("after:",task.after.join(","));
}
if(task.before) {
s.push("before:",task.before.join(","));
}
$tw.boot.log(s.join(" "));
// Execute task
if(!$tw.utils.hop(task,"synchronous") || task.synchronous) {
task.startup();
if(task.name) {
$tw.boot.executedStartupModules[task.name] = true;
}
return $tw.boot.executeNextStartupTask(callback);
} else {
task.startup(asyncTaskCallback);
return true;
}
}
taskIndex++;
}
if(typeof callback === 'function') {
callback();
}
return false;
};
/*
2022-01-03 21:31:14 +00:00
Returns true if we are running on one of the platforms specified in taskModule's
`platforms` array; or if `platforms` property is not defined.
2021-09-21 16:32:33 +00:00
*/
$tw.boot.doesTaskMatchPlatform = function(taskModule) {
var platforms = taskModule.platforms;
if(platforms) {
for(var t=0; t<platforms.length; t++) {
2022-01-03 21:31:14 +00:00
switch (platforms[t]) {
case "browser":
if ($tw.browser) {
return true;
}
break;
case "node":
if ($tw.node) {
return true;
}
break;
default:
$tw.utils.error("Module " + taskModule.name + ": '" + platforms[t] + "' in export.platforms invalid");
2021-09-21 16:32:33 +00:00
}
}
2022-01-03 21:31:14 +00:00
return false;
2021-09-21 16:32:33 +00:00
}
return true;
};
$tw.boot.isStartupTaskEligible = function(taskModule) {
var t;
// Check that the platform is correct
if(!$tw.boot.doesTaskMatchPlatform(taskModule)) {
return false;
}
var name = taskModule.name,
remaining = $tw.boot.remainingStartupModules;
if(name) {
// Fail if this module is disabled
if($tw.boot.disabledStartupModules.indexOf(name) !== -1) {
return false;
}
// Check that no other outstanding tasks must be executed before this one
for(t=0; t<remaining.length; t++) {
var task = remaining[t];
if(task.before && task.before.indexOf(name) !== -1) {
if($tw.boot.doesTaskMatchPlatform(task) || (task.name && $tw.boot.disabledStartupModules.indexOf(name) !== -1)) {
return false;
}
}
}
}
// Check that all of the tasks that we must be performed after has been done
var after = taskModule.after;
if(after) {
for(t=0; t<after.length; t++) {
if(!$tw.boot.executedStartupModules[after[t]]) {
return false;
}
}
}
return true;
};
/*
Global Hooks mechanism which allows plugins to modify default functionality
*/
$tw.hooks = $tw.hooks || { names: {}};
/*
Add hooks to the hashmap
*/
$tw.hooks.addHook = function(hookName,definition) {
if($tw.utils.hop($tw.hooks.names,hookName)) {
$tw.hooks.names[hookName].push(definition);
}
else {
$tw.hooks.names[hookName] = [definition];
}
};
/*
Invoke the hook by key
*/
$tw.hooks.invokeHook = function(hookName /*, value,... */) {
var args = Array.prototype.slice.call(arguments,1);
if($tw.utils.hop($tw.hooks.names,hookName)) {
for (var i = 0; i < $tw.hooks.names[hookName].length; i++) {
args[0] = $tw.hooks.names[hookName][i].apply(null,args);
}
}
return args[0];
};
/////////////////////////// Main boot function to decrypt tiddlers and then startup
$tw.boot.boot = function(callback) {
// Initialise crypto object
$tw.crypto = new $tw.utils.Crypto();
// Initialise password prompter
if($tw.browser && !$tw.node) {
$tw.passwordPrompt = new $tw.utils.PasswordPrompt();
}
// Preload any encrypted tiddlers
$tw.boot.decryptEncryptedTiddlers(function() {
// Startup
$tw.boot.startup({callback: callback});
});
};
/////////////////////////// Autoboot in the browser
if($tw.browser && !$tw.boot.suppressBoot) {
$tw.boot.boot();
}
return $tw;
});
if(typeof(exports) !== "undefined") {
exports.TiddlyWiki = _boot;
} else {
_boot(window.$tw);
}
</script>
</div>
<!--~~ Raw markup for the bottom of the body section ~~-->
</body>
</html>