{
"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-2020, 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": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path 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-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
},
"$:/core/images/add-comment": {
"title": "$:/core/images/add-comment",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"
},
"$:/core/images/advanced-search-button": {
"title": "$:/core/images/advanced-search-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"
},
"$:/core/images/auto-height": {
"title": "$:/core/images/auto-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/blank": {
"title": "$:/core/images/blank",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"
},
"$:/core/images/bold": {
"title": "$:/core/images/bold",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"
},
"$:/core/images/chevron-down": {
"title": "$:/core/images/chevron-down",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"
},
"$:/core/images/chevron-left": {
"title": "$:/core/images/chevron-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"
},
"$:/core/images/chevron-right": {
"title": "$:/core/images/chevron-right",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"
},
"$:/core/images/chevron-up": {
"title": "$:/core/images/chevron-up",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"
},
"$:/core/images/clone-button": {
"title": "$:/core/images/clone-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"
},
"$:/core/images/close-all-button": {
"title": "$:/core/images/close-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"
},
"$:/core/images/close-others-button": {
"title": "$:/core/images/close-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"
},
"$:/core/images/copy-clipboard": {
"title": "$:/core/images/copy-clipboard",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"
},
"$:/core/images/download-button": {
"title": "$:/core/images/download-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"
},
"$:/core/images/erase": {
"title": "$:/core/images/erase",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"
},
"$:/core/images/excise": {
"title": "$:/core/images/excise",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"
},
"$:/core/images/export-button": {
"title": "$:/core/images/export-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"
},
"$:/core/images/file": {
"title": "$:/core/images/file",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"
},
"$:/core/images/fixed-height": {
"title": "$:/core/images/fixed-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/fold-all-button": {
"title": "$:/core/images/fold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"
},
"$:/core/images/fold-button": {
"title": "$:/core/images/fold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"
},
"$:/core/images/fold-others-button": {
"title": "$:/core/images/fold-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/folder": {
"title": "$:/core/images/folder",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"
},
"$:/core/images/full-screen-button": {
"title": "$:/core/images/full-screen-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"
},
"$:/core/images/github": {
"title": "$:/core/images/github",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"
},
"$:/core/images/gitter": {
"title": "$:/core/images/gitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"
},
"$:/core/images/globe": {
"title": "$:/core/images/globe",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"
},
"$:/core/images/heading-1": {
"title": "$:/core/images/heading-1",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"
},
"$:/core/images/heading-2": {
"title": "$:/core/images/heading-2",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"
},
"$:/core/images/heading-3": {
"title": "$:/core/images/heading-3",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"
},
"$:/core/images/heading-4": {
"title": "$:/core/images/heading-4",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"
},
"$:/core/images/heading-5": {
"title": "$:/core/images/heading-5",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"
},
"$:/core/images/heading-6": {
"title": "$:/core/images/heading-6",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"
},
"$:/core/images/help": {
"title": "$:/core/images/help",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"
},
"$:/core/images/home-button": {
"title": "$:/core/images/home-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"
},
"$:/core/images/import-button": {
"title": "$:/core/images/import-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"
},
"$:/core/images/italic": {
"title": "$:/core/images/italic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"
},
"$:/core/images/left-arrow": {
"title": "$:/core/images/left-arrow",
"created": "20150315234410875",
"modified": "20150315235324760",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"
},
"$:/core/images/line-width": {
"title": "$:/core/images/line-width",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"
},
"$:/core/images/link": {
"title": "$:/core/images/link",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"
},
"$:/core/images/linkify": {
"title": "$:/core/images/linkify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"
},
"$:/core/images/list-bullet": {
"title": "$:/core/images/list-bullet",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"
},
"$:/core/images/list-number": {
"title": "$:/core/images/list-number",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"
},
"$:/core/images/list": {
"title": "$:/core/images/list",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"
},
"$:/core/images/locked-padlock": {
"title": "$:/core/images/locked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/mail": {
"title": "$:/core/images/mail",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"
},
"$:/core/images/menu-button": {
"title": "$:/core/images/menu-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"
},
"$:/core/images/mono-block": {
"title": "$:/core/images/mono-block",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"
},
"$:/core/images/mono-line": {
"title": "$:/core/images/mono-line",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"
},
"$:/core/images/new-here-button": {
"title": "$:/core/images/new-here-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"
},
"$:/core/images/new-image-button": {
"title": "$:/core/images/new-image-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"
},
"$:/core/images/new-journal-button": {
"title": "$:/core/images/new-journal-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><<now \"DD\">></tspan></text></g></svg>"
},
"$:/core/images/opacity": {
"title": "$:/core/images/opacity",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"
},
"$:/core/images/open-window": {
"title": "$:/core/images/open-window",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"
},
"$:/core/images/paint": {
"title": "$:/core/images/paint",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"
},
"$:/core/images/palette": {
"title": "$:/core/images/palette",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"
},
"$:/core/images/permalink-button": {
"title": "$:/core/images/permalink-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"
},
"$:/core/images/permaview-button": {
"title": "$:/core/images/permaview-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"
},
"$:/core/images/picture": {
"title": "$:/core/images/picture",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"
},
"$:/core/images/plugin-generic-language": {
"title": "$:/core/images/plugin-generic-language",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-plugin": {
"title": "$:/core/images/plugin-generic-plugin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-theme": {
"title": "$:/core/images/plugin-generic-theme",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"
},
"$:/core/images/preview-closed": {
"title": "$:/core/images/preview-closed",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"
},
"$:/core/images/preview-open": {
"title": "$:/core/images/preview-open",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"
},
"$:/core/images/print-button": {
"title": "$:/core/images/print-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"
},
"$:/core/images/quote": {
"title": "$:/core/images/quote",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"
},
"$:/core/images/refresh-button": {
"title": "$:/core/images/refresh-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"
},
"$:/core/images/right-arrow": {
"title": "$:/core/images/right-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"
},
"$:/core/images/rotate-left": {
"title": "$:/core/images/rotate-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"
},
"$:/core/images/size": {
"title": "$:/core/images/size",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"
},
"$:/core/images/spiral": {
"title": "$:/core/images/spiral",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"
},
"$:/core/images/stamp": {
"title": "$:/core/images/stamp",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"
},
"$:/core/images/star-filled": {
"title": "$:/core/images/star-filled",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"
},
"$:/core/images/storyview-classic": {
"title": "$:/core/images/storyview-classic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-pop": {
"title": "$:/core/images/storyview-pop",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-zoomin": {
"title": "$:/core/images/storyview-zoomin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"
},
"$:/core/images/strikethrough": {
"title": "$:/core/images/strikethrough",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"
},
"$:/core/images/subscript": {
"title": "$:/core/images/subscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/superscript": {
"title": "$:/core/images/superscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/tag-button": {
"title": "$:/core/images/tag-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"
},
"$:/core/images/theme-button": {
"title": "$:/core/images/theme-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"
},
"$:/core/images/timestamp-off": {
"title": "$:/core/images/timestamp-off",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"
},
"$:/core/images/timestamp-on": {
"title": "$:/core/images/timestamp-on",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"
},
"$:/core/images/tip": {
"title": "$:/core/images/tip",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"
},
"$:/core/images/transcludify": {
"title": "$:/core/images/transcludify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"
},
"$:/core/images/twitter": {
"title": "$:/core/images/twitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"
},
"$:/core/images/underline": {
"title": "$:/core/images/underline",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"
},
"$:/core/images/unfold-all-button": {
"title": "$:/core/images/unfold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unfold-button": {
"title": "$:/core/images/unfold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unlocked-padlock": {
"title": "$:/core/images/unlocked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/up-arrow": {
"title": "$:/core/images/up-arrow",
"created": "20150316000544368",
"modified": "20150316000831867",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"
},
"$:/core/images/video": {
"title": "$:/core/images/video",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"
},
"$:/core/images/warning": {
"title": "$:/core/images/warning",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"
},
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "advanced search"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "Advanced search"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "cancel"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "Discard changes to this tiddler"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "clone"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "Clone this tiddler"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "close"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "Close this tiddler"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "close all"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "Close all tiddlers"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "close others"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "Close other tiddlers"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "control panel"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "Open control panel"
},
"$:/language/Buttons/CopyToClipboard/Caption": {
"title": "$:/language/Buttons/CopyToClipboard/Caption",
"text": "copy to clipboard"
},
"$:/language/Buttons/CopyToClipboard/Hint": {
"title": "$:/language/Buttons/CopyToClipboard/Hint",
"text": "Copy this text to the clipboard"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "delete"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "Delete this tiddler"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "edit"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "Edit this tiddler"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "encryption"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "Set or clear a password for saving this wiki"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "clear password"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "Clear the password and save this wiki without encryption"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "set password"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "Set a password for saving this wiki with encryption"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "export all"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "Export all tiddlers"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "export tiddler"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "Export tiddler"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "export tiddlers"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "Export tiddlers"
},
"$:/language/Buttons/SidebarSearch/Hint": {
"title": "$:/language/Buttons/SidebarSearch/Hint",
"text": "Select the sidebar search field"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "fold tiddler"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "Fold the body of this tiddler"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "fold-bar"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "Optional bars to fold and unfold tiddlers"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "unfold tiddler"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "Unfold the body of this tiddler"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "fold other tiddlers"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "Fold the bodies of other opened tiddlers"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "fold all tiddlers"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "Fold the bodies of all opened tiddlers"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "unfold all tiddlers"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "Unfold the bodies of all opened tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "help"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "Show help panel"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import many types of file including text, image, TiddlyWiki or JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "tiddler manager"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "Open tiddler manager"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "new image"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "Create a new image tiddler"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "new Markdown tiddler"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "Create a new Markdown tiddler"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "open in new window"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "Open tiddler in new window"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "palette"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "Choose the colour palette"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "print page"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "Print the current page"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "refresh"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "Perform a full refresh of the wiki"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "ok"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "Confirm changes to this tiddler"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "save changes"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "Save changes"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "storyview"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "Choose the story visualisation"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "hide sidebar"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "Hide sidebar"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "show sidebar"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "Show sidebar"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "tag manager"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "Open tag manager"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "timestamps"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "Choose whether modifications update timestamps"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "timestamps are on"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "Update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "timestamps are off"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "Don't update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "theme"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "Choose the display theme"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "bold"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "Apply bold formatting to selection"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "clear"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "Clear image to solid colour"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "editor height"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "Automatically adjust height to fit content"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "Fixed height:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "Choose the height of the text editor"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "excise"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "Perform excision"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "Macro name:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "Title of new tiddler:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "Replace excised text with:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "macro"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "link"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "transclusion"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "Tag new tiddler with the title of this tiddler"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "Warning: tiddler already exists"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "Excise the selected text into a new tiddler"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "heading 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "Apply heading level 1 formatting to lines containing selection"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "heading 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "Apply heading level 2 formatting to lines containing selection"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "heading 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "Apply heading level 3 formatting to lines containing selection"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "heading 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "Apply heading level 4 formatting to lines containing selection"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "heading 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "Apply heading level 5 formatting to lines containing selection"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "heading 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "Apply heading level 6 formatting to lines containing selection"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "italic"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "Apply italic formatting to selection"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "line width"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "Set line width for painting"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "link"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "Create wikitext link"
},
"$:/language/Buttons/Linkify/Caption": {
"title": "$:/language/Buttons/Linkify/Caption",
"text": "wikilink"
},
"$:/language/Buttons/Linkify/Hint": {
"title": "$:/language/Buttons/Linkify/Hint",
"text": "Wrap selection in square brackets"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "bulleted list"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "Apply bulleted list formatting to lines containing selection"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "numbered list"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "Apply numbered list formatting to lines containing selection"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "monospaced block"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "Apply monospaced block formatting to lines containing selection"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "monospaced"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "Apply monospaced character formatting to selection"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "opacity"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "Set painting opacity"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "paint colour"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "Set painting colour"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "picture"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "Insert picture"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "preview"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "Show preview pane"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "preview type"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "Choose preview type"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "quote"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "Apply quoted text formatting to lines containing selection"
},
"$:/language/Buttons/RotateLeft/Caption": {
"title": "$:/language/Buttons/RotateLeft/Caption",
"text": "rotate left"
},
"$:/language/Buttons/RotateLeft/Hint": {
"title": "$:/language/Buttons/RotateLeft/Hint",
"text": "Rotate image left by 90 degrees"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "image size"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "Height:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "Resize image"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "Width:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "Set image size"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "stamp"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "Add your own"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "Insert a preconfigured snippet of text"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "Name as shown in menu"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "strikethrough"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "Apply strikethrough formatting to selection"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "subscript"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "Apply subscript formatting to selection"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "superscript"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "Apply superscript formatting to selection"
},
"$:/language/Buttons/ToggleSidebar/Hint": {
"title": "$:/language/Buttons/ToggleSidebar/Hint",
"text": "Toggle the sidebar visibility"
},
"$:/language/Buttons/Transcludify/Caption": {
"title": "$:/language/Buttons/Transcludify/Caption",
"text": "transclusion"
},
"$:/language/Buttons/Transcludify/Hint": {
"title": "$:/language/Buttons/Transcludify/Hint",
"text": "Wrap selection in curly brackets"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "underline"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "Apply underline formatting to selection"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration"
},
"$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
"title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
"text": "Default focus field for new tiddlers"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "Text for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "Tags for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
"text": "Title of new tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
"text": "Tags for new tiddlers"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers"
},
"$:/language/ControlPanel/Basics/RemoveTags": {
"title": "$:/language/ControlPanel/Basics/RemoveTags",
"text": "Update to current format"
},
"$:/language/ControlPanel/Basics/RemoveTags/Hint": {
"title": "$:/language/ControlPanel/Basics/RemoveTags/Hint",
"text": "Update the tags configuration to the latest format"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "Editor Types"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "Editor"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "These tiddlers determine which editor is used to edit specific tiddler types."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "Type"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "Info"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "Information about this TiddlyWiki"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "Type shortcut here"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "add shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "Keyboard Shortcuts"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "Manage keyboard shortcut assignments"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "No keyboard shortcuts assigned"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "remove keyboard shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "All platforms"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "Macintosh platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "Non-Macintosh platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Non-Linux platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Non-Windows platforms only"
},
"$:/language/ControlPanel/LayoutSwitcher/Caption": {
"title": "$:/language/ControlPanel/LayoutSwitcher/Caption",
"text": "Layout"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
"title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
"text": "delete this entry from the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
"title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
"text": "Show color names that are not part of the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "Parsing"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "Block Parse Rules"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "Inline Parse Rules"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "Pragma Parse Rules"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "Get more plugins"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "Install plugins from the official library"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/AlsoRequires": {
"title": "$:/language/ControlPanel/Plugins/AlsoRequires",
"text": "Also requires:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "disable"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "Disable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(disabled)"
},
"$:/language/ControlPanel/Plugins/Downgrade/Caption": {
"title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
"text": "downgrade"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "None"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "enable"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "Enable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "install"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "Currently installed plugins:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "Language pack plugins"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "This plugin is not currently installed"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "open plugin library"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "close plugin library"
},
"$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
"title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
"text": "(requires reload)"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "reinstall"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "Themes"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "Theme plugins"
},
"$:/language/ControlPanel/Plugins/Update/Caption": {
"title": "$:/language/ControlPanel/Plugins/Update/Caption",
"text": "update"
},
"$:/language/ControlPanel/Plugins/Updates/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/Caption",
"text": "Updates"
},
"$:/language/ControlPanel/Plugins/Updates/Hint": {
"title": "$:/language/ControlPanel/Plugins/Updates/Hint",
"text": "Available updates to installed plugins"
},
"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
"text": "Update <<update-count>> plugins"
},
"$:/language/ControlPanel/Plugins/SubPluginPrompt": {
"title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
"text": "With <<count>> sub-plugins available"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "Permit automatic saving for the download saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "Enable Autosave for Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "These settings apply to the HTML5-compatible download saver"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "General"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "These settings apply to all the loaded savers"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
},
"$:/language/ControlPanel/Saving/GitService/Branch": {
"title": "$:/language/ControlPanel/Saving/GitService/Branch",
"text": "Target branch for saving"
},
"$:/language/ControlPanel/Saving/GitService/CommitMessage": {
"title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
"text": "Saved by TiddlyWiki"
},
"$:/language/ControlPanel/Saving/GitService/Description": {
"title": "$:/language/ControlPanel/Saving/GitService/Description",
"text": "These settings are only used when saving to <<service-name>>"
},
"$:/language/ControlPanel/Saving/GitService/Filename": {
"title": "$:/language/ControlPanel/Saving/GitService/Filename",
"text": "Filename of target file (e.g. `index.html`)"
},
"$:/language/ControlPanel/Saving/GitService/Path": {
"title": "$:/language/ControlPanel/Saving/GitService/Path",
"text": "Path to target file (e.g. `/wiki/`)"
},
"$:/language/ControlPanel/Saving/GitService/Repo": {
"title": "$:/language/ControlPanel/Saving/GitService/Repo",
"text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
},
"$:/language/ControlPanel/Saving/GitService/ServerURL": {
"title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
"text": "Server API URL"
},
"$:/language/ControlPanel/Saving/GitService/UserName": {
"title": "$:/language/ControlPanel/Saving/GitService/UserName",
"text": "Username"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
"text": "~GitHub Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
"text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
"text": "~GitLab Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
"text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
"text": "Gitea Saver"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
"text": "Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel",
"text": "~TiddlySpot Control Panel"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot Saver"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly",
"text": "The ~TiddlySpot service is currently only available in read-only form. Please see http://tiddlyspot.com/ for the latest details. The ~TiddlySpot saver can still be used to save to compatible servers."
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "Autosave"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "Do not save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "Save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "Attempt to automatically save changes during editing when using a supporting saver"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case Wiki Links"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "Enable automatic ~CamelCase linking"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "Enable or disable the editor toolbar:"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "Show editor toolbar"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "Tiddler Info Panel Mode"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "Control when the tiddler info panel closes:"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "Tiddler info panel closes automatically"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "Tiddler info panel stays open until explicitly closed"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "These settings let you customise the behaviour of TiddlyWiki."
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "Navigation Address Bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "Behaviour of the browser address bar when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "Do not update the address bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "Include the target tiddler"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "Include the target tiddler and the current story sequence"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "Navigation History"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "Update browser history when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "Do not update history"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "Update history"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
"text": "Permalink/permaview Mode"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
"text": "Choose how permalink/permaview is handled:"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
"text": "Copy permalink/permaview URL to clipboard"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
"text": "Update address bar with permalink/permaview URL"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "Performance Instrumentation"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "Enable performance instrumentation"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "Toolbar Button Style"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "Choose the style for toolbar buttons:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "Borderless"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "Boxed"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "Rounded"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "Default Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "Specify which sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
"text": "Default More Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
"text": "Specify which More sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "Tiddler Opening Behaviour"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "Navigation from //within// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "Navigation from //outside// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "Open above the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "Open below the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "Open at the top of the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "Open at the bottom of the story river"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "Tiddler Titles"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "Optionally display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "Do not display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "Display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "Wiki Links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "Choose whether to link to tiddlers that do not exist yet"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "Enable links to missing tiddlers"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Stylesheets/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Caption",
"text": "Stylesheets"
},
"$:/language/ControlPanel/Stylesheets/Expand/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
"text": "Expand All"
},
"$:/language/ControlPanel/Stylesheets/Hint": {
"title": "$:/language/ControlPanel/Stylesheets/Hint",
"text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
},
"$:/language/ControlPanel/Stylesheets/Restore/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
"text": "Restore"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "Toolbars"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "Edit Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "Select which toolbar buttons are displayed"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "Page Toolbar"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "View Toolbar"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "st"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "nd"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "rd"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "th"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "th"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "th"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "th"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "th"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "th"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "th"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "th"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "th"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "th"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "th"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "th"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "th"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "th"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "th"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "th"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "th"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "st"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "nd"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "rd"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "th"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "th"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "th"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "th"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "th"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "th"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "th"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "st"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "Sunday"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "Monday"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "Tuesday"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "Wednesday"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "Thursday"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "Friday"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "Saturday"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "January"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "February"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "March"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "April"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "May"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "June"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "July"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "August"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "September"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "October"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "November"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "December"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "am"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "pm"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "Sun"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "Mon"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "Tue"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "Wed"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "Thu"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "Fri"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "Sat"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "Jan"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "Feb"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "Mar"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "Apr"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "May"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "Jun"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "Jul"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "Aug"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "Sep"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "Oct"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "Nov"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "Dec"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> days from now"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> hours from now"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> minutes from now"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> months from now"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 second from now"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> seconds from now"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> years from now"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> days ago"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> hours ago"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> minutes ago"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> months ago"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 second ago"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> seconds ago"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> years ago"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "A sub-operator for the ''all'' filter operator."
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/authenticator": {
"title": "$:/language/Docs/ModuleTypes/authenticator",
"text": "Defines how requests are authenticated by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "A bitmap editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "Generic module type for general purpose JavaScript modules."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/route": {
"title": "$:/language/Docs/ModuleTypes/route",
"text": "Defines how individual URL patterns are handled by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "A text editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "Applies upgrade processing to tiddlers during an upgrade/import."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "Alert background"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "Alert border"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "Alert highlight"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "Alert muted foreground"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "General background"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "Blockquote bar"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "Default button background"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "Default button border"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "Default button foreground"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "Unsaved changes indicator"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "Code background"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "Code border"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "Code foreground"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "Download button background"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "Download button foreground"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "Dragger background"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "Dragger foreground"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "Dropdown background"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "Dropdown border"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "Dropdown tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "Dropdown tab background"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "Dropzone background"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "External link background hover"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "External link background visited"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "External link background"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "External link foreground hover"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "External link foreground visited"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "External link foreground"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "General foreground"
},
"$:/language/Docs/PaletteColours/menubar-background": {
"title": "$:/language/Docs/PaletteColours/menubar-background",
"text": "Menu bar background"
},
"$:/language/Docs/PaletteColours/menubar-foreground": {
"title": "$:/language/Docs/PaletteColours/menubar-foreground",
"text": "Menu bar foreground"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "Message box background"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "Message box border"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "Message box foreground"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "Modal backdrop"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "Modal background"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "Modal border"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "Modal footer background"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "Modal footer border"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "Modal header border"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "General muted foreground"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "Notification background"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "Notification border"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "Page background"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "Preformatted code background"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "Preformatted code border"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "General primary"
},
"$:/language/Docs/PaletteColours/select-tag-background": {
"title": "$:/language/Docs/PaletteColours/select-tag-background",
"text": "`<select>` element background"
},
"$:/language/Docs/PaletteColours/select-tag-foreground": {
"title": "$:/language/Docs/PaletteColours/select-tag-foreground",
"text": "`<select>` element text"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "Sidebar button foreground"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "Sidebar controls foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "Sidebar controls foreground"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "Sidebar foreground shadow"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "Sidebar foreground"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "Sidebar muted foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "Sidebar muted foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "Sidebar tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "Sidebar tab background"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "Sidebar tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "Sidebar tab border"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "Sidebar tab divider"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "Sidebar tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "Sidebar tab foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "Sidebar tiddler link foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "Sidebar tiddler link foreground"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "Site title foreground"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "Static alert foreground"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "Tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "Tab background"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "Tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "Tab border"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "Tab divider"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "Tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "Tab foreground"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "Table border"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "Table footer background"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "Table header background"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "Tag background"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "Tag foreground"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "Tiddler background"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "Tiddler border"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "Tiddler controls foreground hover"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "Tiddler controls foreground for selected controls"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "Tiddler controls foreground"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "Tiddler editor background"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "Tiddler editor border image"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "Tiddler editor border"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "Tiddler editor background for even fields"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "Tiddler editor background for odd fields"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "Tiddler info panel background"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "Tiddler info panel border"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "Tiddler info panel tab background"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "Tiddler link background"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "Tiddler link foreground"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "Tiddler subtitle foreground"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "Tiddler title foreground"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "Toolbar 'new tiddler' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "Toolbar 'options' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "Toolbar 'save' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "Toolbar 'info' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "Toolbar 'edit' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "Toolbar 'close' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "Toolbar 'delete' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "Toolbar 'cancel' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "Toolbar 'done' button foreground"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "Untagged pill background"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "Very muted foreground"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "output"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/Field/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Field/Dropdown/Caption",
"text": "field list"
},
"$:/language/EditTemplate/Field/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Field/Dropdown/Hint",
"text": "Show field list"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
"text": "Add the new field to the tiddler"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "System fields"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "User fields"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
"text": "add tag"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Tags/ClearInput/Caption": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Caption",
"text": "clear input"
},
"$:/language/EditTemplate/Tags/ClearInput/Hint": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Hint",
"text": "Clear tag input"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "tag list"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "Show tag list"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "Target tiddler already exists"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "The following references to this tiddler will not be automatically updated:"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "content type list"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "Show content type list"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "delete content type"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "Delete content type"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "Static HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON file"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV file"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" file"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "The full URI of an external image tiddler"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hide-body": {
"title": "$:/language/Docs/Fields/hide-body",
"text": "The view template will hide bodies of tiddlers if set to: ''yes''"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/throttle.refresh": {
"title": "$:/language/Docs/Fields/throttle.refresh",
"text": "If present, throttles refreshes of this tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/toc-link": {
"title": "$:/language/Docs/Fields/toc-link",
"text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"$:/language/Docs/Fields/_is_skinny": {
"title": "$:/language/Docs/Fields/_is_skinny",
"text": "If present, indicates that the tiddler text field must be loaded from the server"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "All tiddlers except system tiddlers"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "Recently modified tiddlers, including system tiddlers"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "Recently modified tiddlers"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "All tags except system tags"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "Missing tiddlers"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "Draft tiddlers"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "Orphan tiddlers"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "System tiddlers"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "Shadow tiddlers"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "Overridden shadow tiddlers"
},
"$:/language/Filters/SessionTiddlers": {
"title": "$:/language/Filters/SessionTiddlers",
"text": "Tiddlers modified since the wiki was loaded"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "System tags"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "Non wiki-text tiddlers"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "Automatically run configured commands",
"text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "Clear a password for subsequent crypto operations",
"text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/deletetiddlers": {
"title": "$:/language/Help/deletetiddlers",
"description": "Deletes a group of tiddlers",
"text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "Lists the available editions of TiddlyWiki",
"text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "Fetch tiddlers from wiki by URL",
"text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "Import tiddlers from a file",
"text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
},
"$:/language/Help/listen": {
"title": "$:/language/Help/listen",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "Construct library plugin required by upgrade process",
"text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "Set the base output directory for subsequent commands",
"text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "Renders individual tiddlers to files",
"text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers '<filter>' <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "Saves individual raw tiddlers to files",
"text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "Saves a group of raw tiddlers to a directory",
"text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/savewikifolder": {
"title": "$:/language/Help/savewikifolder",
"description": "Saves a wiki to a new wiki folder",
"text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
"text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "Prepares external tiddlers for use",
"text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "The following tiddlers were imported:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/Listing/Preview": {
"title": "$:/language/Import/Listing/Preview",
"text": "Preview:"
},
"$:/language/Import/Listing/Preview/Text": {
"title": "$:/language/Import/Listing/Preview/Text",
"text": "Text"
},
"$:/language/Import/Listing/Preview/TextRaw": {
"title": "$:/language/Import/Listing/Preview/TextRaw",
"text": "Text (Raw)"
},
"$:/language/Import/Listing/Preview/Fields": {
"title": "$:/language/Import/Listing/Preview/Fields",
"text": "Fields"
},
"$:/language/Import/Listing/Preview/Diff": {
"title": "$:/language/Import/Listing/Preview/Diff",
"text": "Diff"
},
"$:/language/Import/Listing/Preview/DiffFields": {
"title": "$:/language/Import/Listing/Preview/DiffFields",
"text": "Diff (Fields)"
},
"$:/language/Import/Listing/Rename/Tooltip": {
"title": "$:/language/Import/Listing/Rename/Tooltip",
"text": "Rename tiddler before importing"
},
"$:/language/Import/Listing/Rename/Prompt": {
"title": "$:/language/Import/Listing/Rename/Prompt",
"text": "Rename to:"
},
"$:/language/Import/Listing/Rename/ConfirmRename": {
"title": "$:/language/Import/Listing/Rename/ConfirmRename",
"text": "Rename tiddler"
},
"$:/language/Import/Listing/Rename/CancelRename": {
"title": "$:/language/Import/Listing/Rename/CancelRename",
"text": "Cancel"
},
"$:/language/Import/Listing/Rename/OverwriteWarning": {
"title": "$:/language/Import/Listing/Rename/OverwriteWarning",
"text": "A tiddler with this title already exists."
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "Blocked incompatible or obsolete plugin."
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "Blocked plugin (due to incoming <<incoming>> not being newer than existing <<existing>>)."
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "Upgraded plugin from <<incoming>> to <<upgraded>>."
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "Blocked temporary state tiddler."
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "Blocked system tiddler."
},
"$:/language/Import/Upgrader/System/Warning": {
"title": "$:/language/Import/Upgrader/System/Warning",
"text": "Core module tiddler."
},
"$:/language/Import/Upgrader/System/Alert": {
"title": "$:/language/Import/Upgrader/System/Alert",
"text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable."
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "Migrated theme tweak from <$text text=<<from>>/>."
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "upgrade"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "Recent:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmAction": {
"title": "$:/language/ConfirmAction",
"text": "Do you wish to proceed?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "count"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "New Tiddler"
},
"$:/language/Diffs/CountMessage": {
"title": "$:/language/Diffs/CountMessage",
"text": "<<diff-count>> differences"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "Drop here (or use the 'Escape' key to cancel)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "Cancel"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "Set a new password for this TiddlyWiki"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "Username"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "Password"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "Repeat password"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "Passwords do not match"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "Set password"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "Error"
},
"$:/language/Error/EditConflict": {
"title": "$:/language/Error/EditConflict",
"text": "File changed on server"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "Filter error"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "Syntax error in filter expression"
},
"$:/language/Error/FilterRunPrefix": {
"title": "$:/language/Error/FilterRunPrefix",
"text": "Filter Error: Unknown prefix for filter run"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "Filter Error: Unknown operand for the 'is' filter operator"
},
"$:/language/Error/FormatFilterOperator": {
"title": "$:/language/Error/FormatFilterOperator",
"text": "Filter Error: Unknown suffix for the 'format' filter operator"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "Error loading plugin library"
},
"$:/language/Error/NetworkErrorAlert": {
"title": "$:/language/Error/NetworkErrorAlert",
"text": "`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "Recursive transclusion error in transclude widget"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "Error retrieving skinny tiddler list"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "Error saving to TWEdit"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "Error while saving"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest error code"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "Internal JavaScript Error"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/LayoutSwitcher/Description": {
"title": "$:/language/LayoutSwitcher/Description",
"text": "Open the layout switcher"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "Login to TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(none)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "Filter by tag:"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "Reverse order"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "Search"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "Search:"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "tags"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "tiddlers"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "Show:"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "Sort by:"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "Colour"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "Fields"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(none)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "Icon"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "Raw text"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "Tags"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "Tools"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified text"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "No"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "Official ~TiddlyWiki Plugin Library"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
},
"$:/language/PageTemplate/Description": {
"title": "$:/language/PageTemplate/Description",
"text": "the default ~TiddlyWiki layout"
},
"$:/language/PageTemplate/Name": {
"title": "$:/language/PageTemplate/Name",
"text": "Default ~PageTemplate"
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/Shortcuts/Input/AdvancedSearch/Hint": {
"title": "$:/language/Shortcuts/Input/AdvancedSearch/Hint",
"text": "Open the ~AdvancedSearch panel from within the sidebar search field"
},
"$:/language/Shortcuts/Input/Accept/Hint": {
"title": "$:/language/Shortcuts/Input/Accept/Hint",
"text": "Accept the selected item"
},
"$:/language/Shortcuts/Input/AcceptVariant/Hint": {
"title": "$:/language/Shortcuts/Input/AcceptVariant/Hint",
"text": "Accept the selected item (variant)"
},
"$:/language/Shortcuts/Input/Cancel/Hint": {
"title": "$:/language/Shortcuts/Input/Cancel/Hint",
"text": "Clear the input field"
},
"$:/language/Shortcuts/Input/Down/Hint": {
"title": "$:/language/Shortcuts/Input/Down/Hint",
"text": "Select the next item"
},
"$:/language/Shortcuts/Input/Tab-Left/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Left/Hint",
"text": "Select the previous Tab"
},
"$:/language/Shortcuts/Input/Tab-Right/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Right/Hint",
"text": "Select the next Tab"
},
"$:/language/Shortcuts/Input/Up/Hint": {
"title": "$:/language/Shortcuts/Input/Up/Hint",
"text": "Select the previous item"
},
"$:/language/Shortcuts/SidebarLayout/Hint": {
"title": "$:/language/Shortcuts/SidebarLayout/Hint",
"text": "Change the sidebar layout"
},
"$:/language/Switcher/Subtitle/theme": {
"title": "$:/language/Switcher/Subtitle/theme",
"text": "Switch Theme"
},
"$:/language/Switcher/Subtitle/layout": {
"title": "$:/language/Switcher/Subtitle/layout",
"text": "Switch Layout"
},
"$:/language/Switcher/Subtitle/language": {
"title": "$:/language/Switcher/Subtitle/language",
"text": "Switch Language"
},
"$:/language/Switcher/Subtitle/palette": {
"title": "$:/language/Switcher/Subtitle/palette",
"text": "Switch Palette"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "This is a system tiddler"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "Include system tiddlers"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "Colour"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "Count"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "Icon"
},
"$:/language/TagManager/Icons/None": {
"title": "$:/language/TagManager/Icons/None",
"text": "None"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "Info"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "Tag"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "DDth MMM YYYY at hh12:0mmam"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "Yes"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "DDth MMM YYYY"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "Journal\n"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Notifications/CopiedToClipboard/Succeeded": {
"title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
"text": "Copied to clipboard!"
},
"$:/language/Notifications/CopiedToClipboard/Failed": {
"title": "$:/language/Notifications/CopiedToClipboard/Failed",
"text": "Failed to copy to clipboard!"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "List"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "All matches:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "Title matches:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "Search"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "Search text too short"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "Standard"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "Search for standard tiddlers"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "Contents"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "Explorer"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "List of tiddlers by tag",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Macro definition",
"text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table with 4 columns by 3 rows",
"text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table of Contents",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "Theme Tweaks"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "You can tweak certain aspects of the ''Vanilla'' theme."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "Options"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "Sidebar layout"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "Fixed story, fluid sidebar"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "Fluid story, fixed sidebar"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "Sticky titles"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "Causes tiddler titles to \"stick\" to the top of the browser window"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "Wrap long lines in code blocks"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "Settings"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "Font family"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "Code font family"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "Editor font family"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "Page background image"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "Page background image attachment"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "Scroll with tiddlers"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "Fixed to window"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "Page background image size"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "Auto"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "Cover"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "Contain"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "Sizes"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "Font size"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "Line height"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "Font size for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "Line height for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "Story left position"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "Story top position"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "how far the top margin of the story river<br>is from the top of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "Story right"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "how far the left margin of the sidebar <br>is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "Story width"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "the overall width of the story river"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "Tiddler width"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "within the story river"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "Sidebar breakpoint"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "Sidebar width"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "the width of the sidebar in fluid-fixed layout"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "Backlinks"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "Tools"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript code",
"name": "application/javascript",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML markup",
"name": "text/html",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/languages/en-GB/icon": {
"title": "$:/languages/en-GB/icon",
"type": "image/svg+xml",
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"title": "$:/core/modules/commander.js",
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/build.js": {
"title": "$:/core/modules/commands/build.js",
"text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/clearpassword.js": {
"title": "$:/core/modules/commands/clearpassword.js",
"text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/deletetiddlers.js": {
"title": "$:/core/modules/commands/deletetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/editions.js": {
"title": "$:/core/modules/commands/editions.js",
"text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/fetch.js": {
"title": "$:/core/modules/commands/fetch.js",
"text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = this.commander.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t \t\t\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/help.js": {
"title": "$:/core/modules/commands/help.js",
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/import.js": {
"title": "$:/core/modules/commands/import.js",
"text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"title": "$:/core/modules/commands/init.js",
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/listen.js": {
"title": "$:/core/modules/commands/listen.js",
"text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"title": "$:/core/modules/commands/load.js",
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/makelibrary.js": {
"title": "$:/core/modules/commands/makelibrary.js",
"text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/output.js": {
"title": "$:/core/modules/commands/output.js",
"text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"title": "$:/core/modules/commands/password.js",
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/render.js": {
"title": "$:/core/modules/commands/render.js",
"text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"title": "$:/core/modules/commands/rendertiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"title": "$:/core/modules/commands/rendertiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/save.js": {
"title": "$:/core/modules/commands/save.js",
"text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savelibrarytiddlers.js": {
"title": "$:/core/modules/commands/savelibrarytiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <tiddler-filter> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe tiddler filter specifies the plugins to be included.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!self.commander.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"title": "$:/core/modules/commands/savetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddlers.js": {
"title": "$:/core/modules/commands/savetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savewikifolder.js": {
"title": "$:/core/modules/commands/savewikifolder.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type] || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\twiki: this.wiki\n\t});\n\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"title": "$:/core/modules/commands/server.js",
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/setfield.js": {
"title": "$:/core/modules/commands/setfield.js",
"text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/unpackplugin.js": {
"title": "$:/core/modules/commands/unpackplugin.js",
"text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"title": "$:/core/modules/commands/verbose.js",
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"title": "$:/core/modules/commands/version.js",
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"title": "$:/core/modules/config.js",
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"title": "$:/core/modules/deserializers.js",
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/editor/engines/framed.js": {
"title": "$:/core/modules/editor/engines/framed.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\t\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"},\n\t\t{name: \"focus\",handlerObject: this,handlerMethod: \"handleFocusEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nFramedEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a focus event\n*/\nFramedEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\t\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/engines/simple.js": {
"title": "$:/core/modules/editor/engines/simple.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nSimpleEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\n\t}\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/factory.js": {
"title": "$:/core/modules/editor/factory.js",
"text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\") === \"yes\";\n\t\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\t\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\t\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE] || changedAttributes.disabled) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if (changedTiddlers[this.editRefreshTitle]) {\n\t\t\tthis.engine.updateDomNodeText(this.getEditInfo().value);\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/operations/bitmap/clear.js": {
"title": "$:/core/modules/editor/operations/bitmap/clear.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/resize.js": {
"title": "$:/core/modules/editor/operations/bitmap/resize.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/rotate-left.js": {
"title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/text/excise.js": {
"title": "$:/core/modules/editor/operations/text/excise.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/make-link.js": {
"title": "$:/core/modules/editor/operations/text/make-link.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/prefix-lines.js": {
"title": "$:/core/modules/editor/operations/text/prefix-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\tvar targetCount = parseInt(event.paramObject.count + \"\",10);\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,targetCount);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== targetCount) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-all.js": {
"title": "$:/core/modules/editor/operations/text/replace-all.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-selection.js": {
"title": "$:/core/modules/editor/operations/text/replace-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/save-selection.js": {
"title": "$:/core/modules/editor/operations/text/save-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-lines.js": {
"title": "$:/core/modules/editor/operations/text/wrap-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-selection.js": {
"title": "$:/core/modules/editor/operations/text/wrap-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/filterrunprefixes/all.js": {
"title": "$:/core/modules/filterrunprefixes/all.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/all.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nUnion of sets without de-duplication.\nEquivalent to = filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.all = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.push.apply(results, operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/and.js": {
"title": "$:/core/modules/filterrunprefixes/and.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/and.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nIntersection of sets.\nEquivalent to + filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.and = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\tsource = options.wiki.makeTiddlerIterator(results.toArray());\n\t\tresults.clear();\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/else.js": {
"title": "$:/core/modules/filterrunprefixes/else.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/else.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to ~ filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.else = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length === 0) {\n\t\t\t// Main result so far is empty\n\t\t\tresults.pushTop(operationSubFunction(source,widget));\n\t\t}\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/except.js": {
"title": "$:/core/modules/filterrunprefixes/except.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/except.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nDifference of sets.\nEquivalent to - filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.except = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.remove(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/filter.js": {
"title": "$:/core/modules/filterrunprefixes/filter.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/filter.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar resultsToRemove = [];\n\t\t\tresults.each(function(result) {\n\t\t\t\tvar filtered = operationSubFunction(options.wiki.makeTiddlerIterator([result]),widget);\n\t\t\t\tif(filtered.length === 0) {\n\t\t\t\t\tresultsToRemove.push(result);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresults.remove(resultsToRemove);\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/intersection.js": {
"title": "$:/core/modules/filterrunprefixes/intersection.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/intersection.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.intersection = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length !== 0) {\n\t\t\tvar secondRunResults = operationSubFunction(source,widget);\n\t\t\tvar firstRunResults = results.toArray();\n\t\t\tresults.clear();\n\t\t\t$tw.utils.each(firstRunResults,function(title) {\n\t\t\t\tif(secondRunResults.indexOf(title) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/or.js": {
"title": "$:/core/modules/filterrunprefixes/or.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/or.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to a filter run with no prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.or = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/reduce.js": {
"title": "$:/core/modules/filterrunprefixes/reduce.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/reduce.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.reduce = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar accumulator = \"\";\n\t\t\tvar index = 0;\n\t\t\tresults.each(function(title) {\n\t\t\t\tvar list = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\t\t\treturn \"\" + (results.length - 1 - index);\n\t\t\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn widget.getVariable(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\tif(list.length > 0) {\n\t\t\t\t\taccumulator = \"\" + list[0];\n\t\t\t\t}\n\t\t\t\t++index;\n\t\t\t});\n\t\t\tresults.clear();\n\t\t\tresults.push(accumulator);\t\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filters/addprefix.js": {
"title": "$:/core/modules/filters/addprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/addsuffix.js": {
"title": "$:/core/modules/filters/addsuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/after.js": {
"title": "$:/core/modules/filters/after.js",
"text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/all/current.js": {
"title": "$:/core/modules/filters/all/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/missing.js": {
"title": "$:/core/modules/filters/all/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/orphans.js": {
"title": "$:/core/modules/filters/all/orphans.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/shadows.js": {
"title": "$:/core/modules/filters/all/shadows.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tags.js": {
"title": "$:/core/modules/filters/all/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tiddlers.js": {
"title": "$:/core/modules/filters/all/tiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all.js": {
"title": "$:/core/modules/filters/all.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/backlinks.js": {
"title": "$:/core/modules/filters/backlinks.js",
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/before.js": {
"title": "$:/core/modules/filters/before.js",
"text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"title": "$:/core/modules/filters/commands.js",
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/compare.js": {
"title": "$:/core/modules/filters/compare.js",
"text": "/*\\\ntitle: $:/core/modules/filters/compare.js\ntype: application/javascript\nmodule-type: filteroperator\n\nGeneral purpose comparison operator\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.compare = function(source,operator,options) {\n\tvar suffixes = operator.suffixes || [],\n\t\ttype = (suffixes[0] || [])[0],\n\t\tmode = (suffixes[1] || [])[0],\n\t\ttypeFn = $tw.utils.makeCompareFunction(type,{defaultType: \"number\"}),\n\t\tmodeFn = modes[mode] || modes.eq,\n\t\tinvert = operator.prefix === \"!\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tif(modeFn(typeFn(title,operator.operand)) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nvar modes = {\n\t\"eq\": function(value) {return value === 0;},\n\t\"ne\": function(value) {return value !== 0;},\n\t\"gteq\": function(value) {return value >= 0;},\n\t\"gt\": function(value) {return value > 0;},\n\t\"lteq\": function(value) {return value <= 0;},\n\t\"lt\": function(value) {return value < 0;}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/contains.js": {
"title": "$:/core/modules/filters/contains.js",
"text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/count.js": {
"title": "$:/core/modules/filters/count.js",
"text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/days.js": {
"title": "$:/core/modules/filters/days.js",
"text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/duplicateslugs.js": {
"title": "$:/core/modules/filters/duplicateslugs.js",
"text": "/*\\\ntitle: $:/core/modules/filters/duplicateslugs.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter function for [duplicateslugs[]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.duplicateslugs = function(source,operator,options) {\n\tvar slugs = Object.create(null), // Hashmap by slug of title, replaced with \"true\" if the duplicate title has already been output\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tvar slug = options.wiki.slugify(title);\n\t\tif(slug in slugs) {\n\t\t\tif(slugs[slug] !== true) {\n\t\t\t\tresults.push(slugs[slug]);\n\t\t\t\tslugs[slug] = true;\n\t\t\t}\n\t\t\tresults.push(title);\n\t\t} else {\n\t\t\tslugs[slug] = title;\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"title": "$:/core/modules/filters/each.js",
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"title": "$:/core/modules/filters/eachday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editiondescription.js": {
"title": "$:/core/modules/filters/editiondescription.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editions.js": {
"title": "$:/core/modules/filters/editions.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\t\tresults.push(name);\n\t\t\t});\n\t\t}\n\t\tresults.sort();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/else.js": {
"title": "$:/core/modules/filters/else.js",
"text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/decodeuricomponent.js": {
"title": "$:/core/modules/filters/decodeuricomponent.js",
"text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push(CSS.escape(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/enlist.js": {
"title": "$:/core/modules/filters/enlist.js",
"text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"title": "$:/core/modules/filters/field.js",
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"title": "$:/core/modules/filters/fields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName,\n\t\tsuffixes = (operator.suffixes || [])[0] || [],\n\t\toperand = $tw.utils.parseStringArray(operator.operand);\n\t\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(suffixes.indexOf(\"include\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? $tw.utils.pushTop(results,fieldName) : \"\";\n\t\t\t\t}\n\t\t\t} else if (suffixes.indexOf(\"exclude\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? \"\" : $tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else if\n\t\t\telse {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else\n\t\t} // if (tiddler)\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/filter.js": {
"title": "$:/core/modules/filters/filter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/filter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning those input titles that pass a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(source,operator,options) {\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\tresults = [],\n\t\ttarget = operator.prefix !== \"!\";\n\tsource(function(tiddler,title) {\n\t\tvar list = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]));\n\t\tif((list.length > 0) === target) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/format/date.js": {
"title": "$:/core/modules/filters/format/date.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format/date.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.date = function(source,operand,options) {\n\tvar results = [];\t\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.formatDateString(value,operand || \"YYYY MM DD 0hh:0mm\"));\n\t\t}\n\t});\t\n\treturn results;\n};\n\n})();",
"type": "application/javascript",
"module-type": "formatfilteroperator"
},
"$:/core/modules/filters/format/relativedate.js": {
"title": "$:/core/modules/filters/format/relativedate.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format/relativedate.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.relativedate = function(source,operand,options) {\n\tvar results = [];\t\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.getRelativeDate((new Date()) - (new Date(value))).description);\n\t\t}\n\t});\t\n\treturn results;\n};\n\n})();",
"type": "application/javascript",
"module-type": "formatfilteroperator"
},
"$:/core/modules/filters/format.js": {
"title": "$:/core/modules/filters/format.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format.js\ntype: application/javascript\nmodule-type: filteroperator\nFilter operator for formatting strings\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar formatFilterOperators;\n\nfunction getFormatFilterOperators() {\n\tif(!formatFilterOperators) {\n\t\tformatFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"formatfilteroperator\",formatFilterOperators);\n\t}\n\treturn formatFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.format = function(source,operator,options) {\n\t// Dispatch to the correct formatfilteroperator\n\tvar formatFilterOperators = getFormatFilterOperators();\n\tif(operator.suffix) {\n\t\tvar formatFilterOperator = formatFilterOperators[operator.suffix];\n\t\tif(formatFilterOperator) {\n\t\t\treturn formatFilterOperator(source,operator.operand,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/FormatFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all unchanged if the suffix is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/get.js": {
"title": "$:/core/modules/filters/get.js",
"text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getindex.js": {
"title": "$:/core/modules/filters/getindex.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getvariable.js": {
"title": "$:/core/modules/filters/getvariable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"title": "$:/core/modules/filters/has.js",
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field or index\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if(operator.suffix === \"index\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && (tiddler.fields[operator.operand].length !== 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/haschanged.js": {
"title": "$:/core/modules/filters/haschanged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"title": "$:/core/modules/filters/indexes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/insertbefore.js": {
"title": "$:/core/modules/filters/insertbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/binary.js": {
"title": "$:/core/modules/filters/is/binary.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/binary.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[binary]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.binary = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/blank.js": {
"title": "$:/core/modules/filters/is/blank.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/current.js": {
"title": "$:/core/modules/filters/is/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/draft.js": {
"title": "$:/core/modules/filters/is/draft.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/draft.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[draft]] analagous to [has[draft.of]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.draft = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,\"draft.of\")) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,\"draft.of\") && (tiddler.fields[\"draft.of\"].length !== 0)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\t\t\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"title": "$:/core/modules/filters/is/image.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"title": "$:/core/modules/filters/is/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"title": "$:/core/modules/filters/is/orphan.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"title": "$:/core/modules/filters/is/shadow.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"title": "$:/core/modules/filters/is/system.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tag.js": {
"title": "$:/core/modules/filters/is/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"title": "$:/core/modules/filters/is/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/variable.js": {
"title": "$:/core/modules/filters/is/variable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"title": "$:/core/modules/filters/is.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"title": "$:/core/modules/filters/limit.js",
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"title": "$:/core/modules/filters/links.js",
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"title": "$:/core/modules/filters/list.js",
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"title": "$:/core/modules/filters/listed.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"title": "$:/core/modules/filters/listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/lookup.js": {
"title": "$:/core/modules/filters/lookup.js",
"text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || operator.suffix);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/match.js": {
"title": "$:/core/modules/filters/match.js",
"text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/math.js": {
"title": "$:/core/modules/filters/math.js",
"text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.power = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.pow(a,b);}\n);\n\nexports.log = makeNumericBinaryOperator(\n\tfunction(a,b) {\n\t\tif(b) {\n\t\t\treturn Math.log(a)/Math.log(b);\n\t\t} else {\n\t\t\treturn Math.log(a);\n\t\t}\n\t}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = $tw.utils.parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericReducingOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [$tw.utils.stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,$tw.utils.parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/minlength.js": {
"title": "$:/core/modules/filters/minlength.js",
"text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"title": "$:/core/modules/filters/modules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"title": "$:/core/modules/filters/moduletypes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"title": "$:/core/modules/filters/next.js",
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/plugintiddlers.js": {
"title": "$:/core/modules/filters/plugintiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"title": "$:/core/modules/filters/prefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"title": "$:/core/modules/filters/previous.js",
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/range.js": {
"title": "$:/core/modules/filters/range.js",
"text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/reduce.js": {
"title": "$:/core/modules/filters/reduce.js",
"text": "/*\\\ntitle: $:/core/modules/filters/reduce.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator evaluates a subfilter for each item, making the running total available in the variable `accumulator`, and the current index available in the variable `index`\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.reduce = function(source,operator,options) {\n\t// Accumulate the list\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Run the filter over each item\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\taccumulator = operator.operands[1] || \"\";\n\tfor(var index=0; index<results.length; index++) {\n\t\tvar title = results[index],\n\t\t\tlist = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\treturn \"\" + (results.length - 1 - index);\n\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\tif(list.length > 0) {\n\t\t\taccumulator = \"\" + list[0];\n\t\t}\n\t}\n\tif(results.length > 0) {\n\t\treturn [accumulator];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/regexp.js": {
"title": "$:/core/modules/filters/regexp.js",
"text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removeprefix.js": {
"title": "$:/core/modules/filters/removeprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removesuffix.js": {
"title": "$:/core/modules/filters/removesuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"title": "$:/core/modules/filters/sameday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"title": "$:/core/modules/filters/search.js",
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/shadowsource.js": {
"title": "$:/core/modules/filters/shadowsource.js",
"text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/slugify.js": {
"title": "$:/core/modules/filters/slugify.js",
"text": "/*\\\ntitle: $:/core/modules/filters/slugify.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for slugifying a tiddler title\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.slugify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.slugify(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"title": "$:/core/modules/filters/sort.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sortsub.js": {
"title": "$:/core/modules/filters/sortsub.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sortsub.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting by a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sortsub = function(source,operator,options) {\n\t// Compile the subfilter\n\tvar filterFn = options.wiki.compileFilter(operator.operand);\n\t// Collect the input titles and the corresponding sort keys\n\tvar inputTitles = [],\n\t\tsortKeys = [];\n\tsource(function(tiddler,title) {\n\t\tinputTitles.push(title);\n\t\tvar r = filterFn.call(options.wiki,function(iterator) {\n\t\t\titerator(options.wiki.getTiddler(title),title);\n\t\t},{\n\t\t\tgetVariable: function(name) {\n\t\t\t\tif(name === \"currentTiddler\") {\n\t\t\t\t\treturn title;\n\t\t\t\t} else {\n\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tsortKeys.push(r[0] || \"\");\n\t});\n\t// Rather than sorting the titles array, we'll sort the indexes so that we can consult both arrays\n\tvar indexes = new Array(inputTitles.length);\n\tfor(var t=0; t<inputTitles.length; t++) {\n\t\tindexes[t] = t;\n\t}\n\t// Sort the indexes\n\tvar compareFn = $tw.utils.makeCompareFunction(operator.suffix,{defaultType: \"string\",invert: operator.prefix === \"!\"});\n\tindexes = indexes.sort(function(a,b) {\n\t\treturn compareFn(sortKeys[a],sortKeys[b]);\n\t});\n\t// Make the results array in order\n\tvar results = [];\n\t$tw.utils.each(indexes,function(index) {\n\t\tresults.push(inputTitles[index]);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/splitbefore.js": {
"title": "$:/core/modules/filters/splitbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/storyviews.js": {
"title": "$:/core/modules/filters/storyviews.js",
"text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/strings.js": {
"title": "$:/core/modules/filters/strings.js",
"text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\toperand = (operator.operand || \"\"),\n\t\tfnCalc;\n\tif(suffix === \"prefix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimPrefix(a,b)];}\n\t} else if(suffix === \"suffix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix(a,b)];}\n\t} else {\n\t\tif(operand === \"\") {\n\t\t\tfnCalc = function(a) {return [$tw.utils.trim(a)];}\n\t\t} else {\n\t\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix($tw.utils.trimPrefix(a,b),b)];}\n\t\t}\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,fnCalc(title,operand));\n\t});\n\treturn result;\n};\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports[\"enlist-input\"] = makeStringBinaryOperator(\n\tfunction(a,o,s) {return $tw.utils.parseStringArray(\"\" + a,(s === \"raw\"));}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\",operator.suffix || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\tif(result.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue) || \"\"];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\t\t\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\t\t\n\treturn result;\n};\n\nexports[\"search-replace\"] = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = operator.suffixes || [],\n\t\tflagSuffix = (suffixes[0] ? (suffixes[0][0] || \"\") : \"\"),\n\t\tflags = (flagSuffix.indexOf(\"g\") !== -1 ? \"g\" : \"\") + (flagSuffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tisRegExp = (suffixes[1] && suffixes[1][0] === \"regexp\") ? true : false,\n\t\tsearchTerm,\n\t\tregExp;\n\t\n\tsource(function(tiddler,title) {\n\t\tif(title && (operator.operands.length > 1)) {\n\t\t\t//Escape regexp characters if the operand is not a regular expression\n\t\t\tsearchTerm = isRegExp ? operator.operand : $tw.utils.escapeRegExp(operator.operand);\n\t\t\ttry {\n\t\t\t\tregExp = new RegExp(searchTerm,flags);\n\t\t\t} catch(ex) {\n\t\t\t\treturn [\"RegExp error: \" + ex];\n\t\t\t}\n\t\t\tresults.push(\n\t\t\t\ttitle.replace(regExp,operator.operands[1])\n\t\t\t);\n\t\t} else {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nexports.pad = function(source,operator,options) {\n\tvar results = [],\n\t\ttargetLength = operator.operand ? parseInt(operator.operand) : 0,\n\t\tfill = operator.operands[1] || \"0\";\n\n\tsource(function(tiddler,title) {\n\t\tif(title && title.length) {\n\t\t\tif(title.length >= targetLength) {\n\t\t\t\tresults.push(title);\n\t\t\t} else {\n\t\t\t\tvar padString = \"\",\n\t\t\t\t\tpadStringLength = targetLength - title.length;\n\t\t\t\twhile (padStringLength > padString.length) {\n\t\t\t\t\tpadString += fill;\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t//make sure we do not exceed the specified length\n\t\t\t\tpadString = padString.slice(0,padStringLength);\n\t\t\t\tif(operator.suffix && (operator.suffix === \"suffix\")) {\n\t\t\t\t\ttitle = title + padString;\n\t\t\t\t} else {\n\t\t\t\t\ttitle = padString + title;\n\t\t\t\t}\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subfilter.js": {
"title": "$:/core/modules/filters/subfilter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subtiddlerfields.js": {
"title": "$:/core/modules/filters/subtiddlerfields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/suffix.js": {
"title": "$:/core/modules/filters/suffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"title": "$:/core/modules/filters/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"title": "$:/core/modules/filters/tagging.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"title": "$:/core/modules/filters/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/then.js": {
"title": "$:/core/modules/filters/then.js",
"text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"title": "$:/core/modules/filters/title.js",
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"title": "$:/core/modules/filters/untagged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/variables.js": {
"title": "$:/core/modules/filters/variables.js",
"text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/wikiparserrules.js": {
"title": "$:/core/modules/filters/wikiparserrules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/x-listops.js": {
"title": "$:/core/modules/filters/x-listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\n\t/*\n\tFetch titles from the current list\n\t*/\n\tvar prepare_results = function (source) {\n\tvar results = [];\n\t\tsource(function (tiddler, title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list before the item named in the operand\n\t*/\n\texports.putbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list after the item named in the operand\n\t*/\n\texports.putafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tReplaces the item named in the operand with a number of items from the tail of the current list\n\t*/\n\texports.replace = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -count) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list to the head of the list\n\t*/\n\texports.putfirst = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(-count).concat(results.slice(0, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the head of the current list to the tail of the list\n\t*/\n\texports.putlast = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(count).concat(results.slice(0, count));\n\t};\n\n\t/*\n\tMoves the item named in the operand a number of places forward or backward in the list\n\t*/\n\texports.move = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1),\n\t\t\tmarker = results.splice(index, 1),\n\t\t\toffset = (index + count) > 0 ? index + count : 0;\n\t\treturn results.slice(0, offset).concat(marker).concat(results.slice(offset));\n\t};\n\n\t/*\n\tReturns the items from the current list that are after the item named in the operand\n\t*/\n\texports.allafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(index) :\n\t\t\tresults.slice(index + 1);\n\t};\n\n\t/*\n\tReturns the items from the current list that are before the item named in the operand\n\t*/\n\texports.allbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(0, index + 1) :\n\t\t\tresults.slice(0, index);\n\t};\n\n\t/*\n\tAppends the items listed in the operand array to the tail of the current list\n\t*/\n\texports.append = function (source, operator) {\n\t\tvar append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || append.length;\n\t\treturn (append.length === 0) ? results :\n\t\t\t(operator.prefix) ? results.concat(append.slice(-count)) :\n\t\t\tresults.concat(append.slice(0, count));\n\t};\n\n\t/*\n\tPrepends the items listed in the operand array to the head of the current list\n\t*/\n\texports.prepend = function (source, operator) {\n\t\tvar prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,prepend.length);\n\t\treturn (prepend.length === 0) ? results :\n\t\t\t(operator.prefix) ? prepend.slice(-count).concat(results) :\n\t\t\tprepend.slice(0, count).concat(results);\n\t};\n\n\t/*\n\tReturns all items from the current list except the items listed in the operand array\n\t*/\n\texports.remove = function (source, operator) {\n\t\tvar array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || array.length,\n\t\t\tp,\n\t\t\tlen,\n\t\t\tindex;\n\t\tlen = array.length - 1;\n\t\tfor (p = 0; p < count; ++p) {\n\t\t\tif (operator.prefix) {\n\t\t\t\tindex = results.indexOf(array[len - p]);\n\t\t\t} else {\n\t\t\t\tindex = results.indexOf(array[p]);\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tresults.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t};\n\n\t/*\n\tReturns all items from the current list sorted in the order of the items in the operand array\n\t*/\n\texports.sortby = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tif (!results || results.length < 2) {\n\t\t\treturn results;\n\t\t}\n\t\tvar lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n\t\tresults.sort(function (a, b) {\n\t\t\treturn lookup.indexOf(a) - lookup.indexOf(b);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tRemoves all duplicate items from the current list\n\t*/\n\texports.unique = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tvar set = results.reduce(function (a, b) {\n\t\t\tif (a.indexOf(b) < 0) {\n\t\t\t\ta.push(b);\n\t\t\t}\n\t\t\treturn a;\n\t\t}, []);\n\t\treturn set;\n\t};\n\n\tvar cycleValueInArray = function(results,operands,stepSize) {\n\t\tvar resultsIndex,\n\t\t\tstep = stepSize || 1,\n\t\t\ti = 0,\n\t\t\topLength = operands.length,\n\t\t\tnextOperandIndex;\t\t\n\t\tfor(i; i < opLength; i++) {\n\t\t\tresultsIndex = results.indexOf(operands[i]);\n\t\t\tif(resultsIndex !== -1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif(resultsIndex !== -1) {\n\t\t\ti = i + step;\n\t\t\tnextOperandIndex = (i < opLength ? i : i - opLength);\n\t\t\tif(operands.length > 1) {\n\t\t\t\tresults.splice(resultsIndex,1,operands[nextOperandIndex]);\n\t\t\t} else {\n\t\t\t\tresults.splice(resultsIndex,1);\n\t\t\t}\n\t\t} else {\n\t\t\tresults.push(operands[0]);\n\t\t}\n\t\treturn results;\t\t\n\t}\n\n\t/*\n\tToggles an item in the current list.\n\t*/\t\n\texports.toggle = function(source,operator) {\n\t\treturn cycleValueInArray(prepare_results(source),operator.operands);\n\t}\n\n\texports.cycle = function(source,operator) {\n\t\tvar results = prepare_results(source),\n\t\t\toperands = (operator.operand.length ? $tw.utils.parseStringArray(operator.operand, \"true\") : [\"\"]),\n\t\t\tstep = $tw.utils.getInt(operator.operands[1]||\"\",1);\n\t\tif(step < 0) {\n\t\t\toperands.reverse();\n\t\t\tstep = Math.abs(step);\n\t\t}\t\n\t\treturn cycleValueInArray(results,operands,step);\n\t}\n\t\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"title": "$:/core/modules/filters.js",
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\t\toperator.operands = [];\n\t\tfunction parseOperand(bracketType) {\n\t\t\tvar operand = {};\n\t\t\tswitch (bracketType) {\n\t\t\t\tcase \"{\": // Curly brackets\n\t\t\t\t\toperand.indirect = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[\": // Square brackets\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"<\": // Angle brackets\n\t\t\t\t\toperand.variable = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"/\": // regexp brackets\n\t\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\t\tif(rexMatch) {\n\t\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n\t// DEPRECATION WARNING\n\tconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(nextBracketPos === -1) {\n\t\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t\t}\n\t\t\tif(!operator.regexp) {\n\t\t\t\toperand.text = filterString.substring(p,nextBracketPos);\n\t\t\t\toperator.operands.push(operand);\n\t\t\t}\n\t\t\tp = nextBracketPos + 1;\n\t\t}\n\t\t\n\t\tp = nextBracketPos + 1;\n\t\tparseOperand(bracket);\n\t\t\n\t\t// Check for multiple operands\n\t\twhile(filterString.charAt(p) === \",\") {\n\t\t\tp++;\n\t\t\tif(/^[\\[\\{<\\/]/.test(filterString.substring(p))) {\n\t\t\t\tnextBracketPos = p;\n\t\t\t\tp++;\n\t\t\t\tparseOperand(filterString.charAt(nextBracketPos));\n\t\t\t} else {\n\t\t\t\tthrow \"Missing [ in filter expression\";\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=|\\:(\\w+))?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp = p + operation.prefix.length;\n\t\t\t\tif(match[2]) {\n\t\t\t\t\toperation.namedPrefix = match[2];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(match[3]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[4] || match[5] || match[6]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operands: [{text: match[4] || match[5] || match[6]}]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.getFilterRunPrefixes = function() {\n\tif(!this.filterRunPrefixes) {\n\t\t$tw.Wiki.prototype.filterRunPrefixes = {};\n\t\t$tw.modules.applyMethods(\"filterrunprefix\",this.filterRunPrefixes);\n\t}\n\treturn this.filterRunPrefixes;\n}\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operands = [],\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$tw.utils.each(operator.operands,function(operand) {\n\t\t\t\t\tif(operand.indirect) {\n\t\t\t\t\t\toperand.value = self.getTextReference(operand.text,\"\",currTiddlerTitle);\n\t\t\t\t\t} else if(operand.variable) {\n\t\t\t\t\t\toperand.value = widget.getVariable(operand.text,{defaultValue: \"\"});\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperand.value = operand.text;\n\t\t\t\t\t}\n\t\t\t\t\toperands.push(operand.value);\n\t\t\t\t});\n\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operands.length > 0 ? operands[0] : undefined,\n\t\t\t\t\t\t\toperands: operands,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\tvar filterRunPrefixes = self.getFilterRunPrefixes();\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tvar options = {wiki: self};\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn filterRunPrefixes[\"or\"](operationSubFunction, options);\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn filterRunPrefixes[\"all\"](operationSubFunction, options);\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn filterRunPrefixes[\"except\"](operationSubFunction, options);\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn filterRunPrefixes[\"and\"](operationSubFunction, options);\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn filterRunPrefixes[\"else\"](operationSubFunction, options);\n\t\t\t\tdefault: \n\t\t\t\t\tif(operation.namedPrefix && filterRunPrefixes[operation.namedPrefix]) {\n\t\t\t\t\t\treturn filterRunPrefixes[operation.namedPrefix](operationSubFunction, options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t\tresults.clear();\n\t\t\t\t\t\t\tresults.push($tw.language.getString(\"Error/FilterRunPrefix\"));\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = new $tw.utils.LinkedList();\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results.toArray();\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/indexers/backlinks-indexer.js": {
"title": "$:/core/modules/indexers/backlinks-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/backlinks-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers' backlinks\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\n\nfunction BacklinksIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nBacklinksIndexer.prototype.init = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype.rebuild = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype._getLinks = function(tiddler) {\n\tvar parser = this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\n\tif(parser) {\n\t\treturn this.wiki.extractLinks(parser.tree);\n\t}\n\treturn [];\n}\n\nBacklinksIndexer.prototype.update = function(updateDescriptor) {\n\tif(!this.index) {\n\t\treturn;\n\t}\n\tvar newLinks = [],\n\t oldLinks = [],\n\t self = this;\n\tif(updateDescriptor.old.exists) {\n\t\toldLinks = this._getLinks(updateDescriptor.old.tiddler);\n\t}\n\tif(updateDescriptor.new.exists) {\n\t\tnewLinks = this._getLinks(updateDescriptor.new.tiddler);\n\t}\n\n\t$tw.utils.each(oldLinks,function(link) {\n\t\tif(self.index[link]) {\n\t\t\tdelete self.index[link][updateDescriptor.old.tiddler.fields.title];\n\t\t}\n\t});\n\t$tw.utils.each(newLinks,function(link) {\n\t\tif(!self.index[link]) {\n\t\t\tself.index[link] = Object.create(null);\n\t\t}\n\t\tself.index[link][updateDescriptor.new.tiddler.fields.title] = true;\n\t});\n}\n\nBacklinksIndexer.prototype.lookup = function(title) {\n\tif(!this.index) {\n\t\tthis.index = Object.create(null);\n\t\tvar self = this;\n\t\tthis.wiki.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self._getLinks(tiddler);\n\t\t\t$tw.utils.each(links, function(link) {\n\t\t\t\tif(!self.index[link]) {\n\t\t\t\t\tself.index[link] = Object.create(null);\n\t\t\t\t}\n\t\t\t\tself.index[link][title] = true;\n\t\t\t});\n\t\t});\n\t}\n\tif(this.index[title]) {\n\t\treturn Object.keys(this.index[title]);\n\t} else {\n\t\treturn [];\n\t}\n}\n\nexports.BacklinksIndexer = BacklinksIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/field-indexer.js": {
"title": "$:/core/modules/indexers/field-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/tag-indexer.js": {
"title": "$:/core/modules/indexers/tag-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\t\t\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\t\t\t\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/info/platform.js": {
"title": "$:/core/modules/info/platform.js",
"text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tinfoTiddlerFields.push({title: \"$:/info/startup-timestamp\", text: $tw.utils.stringifyDate(new Date())});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n \t\t// Dark mode through event listener on MediaQueryList\n \t\tvar mqList = window.matchMedia(\"(prefers-color-scheme: dark)\"),\n \t\t\tgetDarkModeTiddler = function() {return {title: \"$:/info/darkmode\", text: mqList.matches ? \"yes\" : \"no\"};};\n \t\tinfoTiddlerFields.push(getDarkModeTiddler());\n \t\tmqList.addListener(function(event) {\n \t\t\tupdateInfoTiddlersCallback([getDarkModeTiddler()]);\n \t\t});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/core/modules/keyboard.js": {
"title": "$:/core/modules/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getEventModifierKeyDescriptor = function(event) {\n\treturn event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey ? \"ctrl\" : \n\t\tevent.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey ? \"shift\" : \n\t\tevent.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey ? \"ctrl-shift\" : \n\t\tevent.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt\" : \n\t\tevent.altKey && event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt-shift\" : \n\t\tevent.altKey && event.ctrlKey && !event.shiftKey && !event.metaKey ? \"ctrl-alt\" : \n\t\tevent.altKey && event.shiftKey && event.ctrlKey && !event.metaKey ? \"ctrl-alt-shift\" : \n\t\tevent.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta\" : \n\t\tevent.metaKey && event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta-ctrl\" :\n\t\tevent.metaKey && event.ctrlKey && event.shiftKey && !event.altKey ? \"meta-ctrl-shift\" :\n\t\tevent.metaKey && event.ctrlKey & event.shiftKey && event.altKey ? \"meta-ctrl-alt-shift\" : \"normal\";\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/language.js": {
"title": "$:/core/modules/language.js",
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/macros/changecount.js": {
"title": "$:/core/modules/macros/changecount.js",
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/contrastcolour.js": {
"title": "$:/core/modules/macros/contrastcolour.js",
"text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/csvtiddlers.js": {
"title": "$:/core/modules/macros/csvtiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/displayshortcuts.js": {
"title": "$:/core/modules/macros/displayshortcuts.js",
"text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddler.js": {
"title": "$:/core/modules/macros/jsontiddler.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddlers.js": {
"title": "$:/core/modules/macros/jsontiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"spaces\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,spaces) {\n\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"title": "$:/core/modules/macros/makedatauri.js",
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"},\n\t{name: \"_canonical_uri\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type,_canonical_uri) {\n\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/now.js": {
"title": "$:/core/modules/macros/now.js",
"text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"title": "$:/core/modules/macros/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/resolvepath.js": {
"title": "$:/core/modules/macros/resolvepath.js",
"text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/unusedtitle.js": {
"title": "$:/core/modules/macros/unusedtitle.js",
"text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"options\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName, options) {\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\treturn this.wiki.generateNewTitle(baseName, options);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"title": "$:/core/modules/macros/version.js",
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/audioparser.js": {
"title": "$:/core/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/binaryparser.js": {
"title": "$:/core/modules/parsers/binaryparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar BinaryParser = function(type,text,options) {\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on binary tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!title\"}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to external or internal data URI\n\tif(options._canonical_uri) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: options._canonical_uri\n\t\t};\n\t} else if(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/csvparser.js": {
"title": "$:/core/modules/parsers/csvparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/htmlparser.js": {
"title": "$:/core/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"title": "$:/core/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/utils/parseutils.js": {
"title": "$:/core/modules/utils/parseutils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/parsers/pdfparser.js": {
"title": "$:/core/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/textparser.js": {
"title": "$:/core/modules/parsers/textparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/videoparser.js": {
"title": "$:/core/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/ogg\"] = VideoParser;\nexports[\"video/webm\"] = VideoParser;\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/image.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/image.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/import.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/import.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"div\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/syslink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar target;\n\tif(type === \"only\") {\n\t\ttarget = true;\n\t} else if(type === \"except\") {\n\t\ttarget = false;\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif((names.indexOf(ruleArray[t].rule.name) === -1) === target) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"title": "$:/core/modules/pluginswitcher.js",
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Read the plugin info for the incoming plugins\n\tvar changes = $tw.wiki.readPluginInfo(plugins);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && ($tw.config.disableAutoSave || this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\")) {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tvar self = this;\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\t$tw.utils.toggleClass(win.document.body,\"tc-dirty\",self.isDirty());\n\t\t});\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"title": "$:/core/modules/savers/andtidwiki.js",
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback,options) {\n\tvar filename = options && options.variables ? options.variables.filename : null;\n\tif (method === \"download\") {\n\t\t// Support download\n\t\tif (window.twi.saveDownload) {\n\t\t\ttry {\n\t\t\t\twindow.twi.saveDownload(text,filename);\n\t\t\t} catch(err) {\n\t\t\t\tif (err.message === \"Method not found\") {\n\t\t\t\t\twindow.twi.saveDownload(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar link = document.createElement(\"a\");\n\t\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t\t\tif (filename) {\n\t\t\t link.setAttribute(\"download\",filename);\n\t\t\t}\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\t} else if (window.twi.saveWiki) {\n\t\t// Direct save in Tiddloid\n\t\twindow.twi.saveWiki(text);\n\t} else {\n\t\t// Get the pathname of this document\n\t\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t\t// Strip the file://\n\t\tif(pathname.indexOf(\"file://\") === 0) {\n\t\t\tpathname = pathname.substr(7);\n\t\t}\n\t\t// Strip any query or location part\n\t\tvar p = pathname.indexOf(\"?\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\tp = pathname.indexOf(\"#\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\t// Save the file\n\t\twindow.twi.saveFile(pathname,text);\n\t}\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/beaker.js": {
"title": "$:/core/modules/savers/beaker.js",
"text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/custom.js": {
"title": "$:/core/modules/savers/custom.js",
"text": "/*\\\ntitle: $:/core/modules/savers/custom.js\ntype: application/javascript\nmodule-type: saver\n\nLooks for `window.$tw.customSaver` first on the current window, then\non the parent window (of an iframe). If present, the saver must define\n\tsave: function(text,method,callback) { ... }\nand the saver may define\n\tpriority: number\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar findSaver = function(window) {\n\ttry {\n\t\treturn window && window.$tw && window.$tw.customSaver;\n\t} catch (err) {\n\t\t// Catching the exception is the most reliable way to detect cross-origin iframe errors.\n\t\t// For example, instead of saying that `window.parent.$tw` is undefined, Firefox will throw\n\t\t// Uncaught DOMException: Permission denied to access property \"$tw\" on cross-origin object\n\t\tconsole.log({ msg: \"custom saver is disabled\", reason: err });\n\t\treturn null;\n\t}\n}\nvar saver = findSaver(window) || findSaver(window.parent) || {};\n\nvar CustomSaver = function(wiki) {\n};\n\nCustomSaver.prototype.save = function(text,method,callback) {\n\treturn saver.save(text, method, callback);\n};\n\n/*\nInformation about this saver\n*/\nCustomSaver.prototype.info = {\n\tname: \"custom\",\n\tpriority: saver.priority || 4000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!(saver.save);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new CustomSaver(wiki);\n};\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"title": "$:/core/modules/savers/download.js",
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"title": "$:/core/modules/savers/fsosaver.js",
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitea.js": {
"title": "$:/core/modules/savers/gitea.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitea.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the gitea\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GiteaSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGiteaSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/Gitea/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"Gitea\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/Gitea/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/Gitea/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/Gitea/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/Gitea/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/Gitea/ServerURL\") || \"https://gitea\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"token \" + password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar use_put = true;\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(sha === \"\"){\n\t\t\t\t\tuse_put = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: endpoint + \"/repos/\" + repo + \"/branches/\" + branch,\n\t\t\t\ttype: \"GET\",\n\t\t\t\theaders: headers,\n\t\t\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\t\t\tif(xhr.status === 404) {\n\t\t\t\t\t\tcallback(\"Please ensure the branch in the Gitea repo exists\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdata[\"branch\"] = branch;\n\t\t\t\t\t\tself.upload(uri + filename, use_put?\"PUT\":\"POST\", headers, data, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\nGiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: method,\n\t\theaders: headers,\n\t\tdata: JSON.stringify(data),\n\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nInformation about this saver\n*/\nGiteaSaver.prototype.info = {\n\tname: \"Gitea\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GiteaSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/github.js": {
"title": "$:/core/modules/savers/github.js",
"text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"main\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password),\n\t\t\t\"If-None-Match\": \"\"\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitlab.js": {
"title": "$:/core/modules/savers/gitlab.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/?path=\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')) + \"&branch=\" + encodeURIComponent(branch.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/hyperdrive.js": {
"title": "$:/core/modules/savers/hyperdrive.js",
"text": "/*\\\ntitle: $:/core/modules/savers/hyperdrive.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Hyperdrive Protocol (https://hypercore-protocol.org/#hyperdrive) Beaker browser beta-1.0 and later (https://beakerbrowser.com)\nCompatible with beaker >= V1.0.0\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar HyperdriveSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nHyperdriveSaver.prototype.save = function(text,method,callback) {\n\tvar dat = beaker.hyperdrive.drive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Hyperdrive Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Hyperdrive Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nHyperdriveSaver.prototype.info = {\n\tname: \"beaker-1.x\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.beaker && !!beaker.hyperdrive && location.protocol===\"hyper:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new HyperdriveSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"title": "$:/core/modules/savers/manualdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"title": "$:/core/modules/savers/msdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/put.js": {
"title": "$:/core/modules/savers/put.js",
"text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"title": "$:/core/modules/savers/tiddlyfox.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"title": "$:/core/modules/savers/tiddlyie.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"title": "$:/core/modules/savers/twedit.js",
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"title": "$:/core/modules/savers/upload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/server/authenticators/basic.js": {
"title": "$:/core/modules/server/authenticators/basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve(this.server.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/authenticators/header.js": {
"title": "$:/core/modules/server/authenticators/header.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\") ? server.get(\"authenticated-user-header\").toLowerCase() : undefined;\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/routes/delete-tiddler.js": {
"title": "$:/core/modules/server/routes/delete-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-favicon.js": {
"title": "$:/core/modules/server/routes/get-favicon.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-file.js": {
"title": "$:/core/modules/server/routes/get-file.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\"),\n\t\tsuppliedFilename = decodeURIComponent(state.params[0]),\n\t\tfilename = path.resolve(state.boot.wikiPath,\"files\",suppliedFilename),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tconsole.log(\"Error accessing file \" + filename + \": \" + err.toString());\n\t\t\tstatus = 404;\n\t\t\tcontent = \"File '\" + suppliedFilename + \"' not found\";\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-index.js": {
"title": "$:/core/modules/server/routes/get-index.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require(\"zlib\");\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers[\"accept-encoding\"];\n\tif(!acceptEncoding) {\n\t\tacceptEncoding = \"\";\n\t}\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\tresponse.writeHead(200,responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-login-basic.js": {
"title": "$:/core/modules/server/routes/get-login-basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-status.js": {
"title": "$:/core/modules/server/routes/get-status.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler-html.js": {
"title": "$:/core/modules/server/routes/get-tiddler-html.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler.js": {
"title": "$:/core/modules/server/routes/get-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.bag = \"default\";\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddlers-json.js": {
"title": "$:/core/modules/server/routes/get-tiddlers-json.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers.json?filter=<filter>\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_FILTER = \"[all[tiddlers]!is[system]sort[title]]\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tvar filter = state.queryParameters.filter || DEFAULT_FILTER;\n\tif(state.wiki.getTiddlerText(\"$:/config/Server/AllowAllExternalFilters\") !== \"yes\") {\n\t\tif(state.wiki.getTiddlerText(\"$:/config/Server/ExternalFilters/\" + filter) !== \"yes\") {\n\t\t\tconsole.log(\"Blocked attempt to GET /recipes/default/tiddlers.json with filter: \" + filter);\n\t\t\tresponse.writeHead(403);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tif(state.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"no\") {\n\t\tfilter += \"+[!is[system]]\";\n\t}\n\tvar excludeFields = (state.queryParameters.exclude || \"text\").split(\",\"),\n\t\ttitles = state.wiki.filterTiddlers(filter);\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\t$tw.utils.each(titles,function(title) {\n\t\tvar tiddler = state.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar tiddlerFields = tiddler.getFieldStrings({exclude: excludeFields});\n\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\ttiddlers.push(tiddlerFields);\n\t\t}\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/put-tiddler.js": {
"title": "$:/core/modules/server/routes/put-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/server.js": {
"title": "$:/core/modules/server/server.js",
"text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\tquerystring = require(\"querystring\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.boot = options.boot || $tw.boot;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(state.pathPrefix) {\n\t\t\tif(pathname.substr(0,state.pathPrefix.length) === state.pathPrefix) {\n\t\t\t\tpathname = pathname.substr(state.pathPrefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response,options) {\n\toptions = options || {};\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = options.wiki || self.wiki;\n\tstate.boot = options.boot || self.boot;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\tstate.queryParameters = querystring.parse(state.urlInfo.query);\n\tstate.pathPrefix = options.pathPrefix || this.get(\"path-prefix\") || \"\";\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\tvar self = this;\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t// Warn if required plugins are missing\n\tif(!this.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !this.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Create the server\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\t// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)\n\tserver.on(\"listening\",function() {\n\t\tvar address = server.address();\n\t\t$tw.utils.log(\"Serving on \" + self.protocol + \"://\" + address.address + \":\" + address.port + prefix,\"brown/orange\");\n\t\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t});\n\t// Listen\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/browser-messaging.js": {
"title": "$:/core/modules/browser-messaging.js",
"text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/commands.js": {
"title": "$:/core/modules/startup/commands.js",
"text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/CSSescape.js": {
"title": "$:/core/modules/startup/CSSescape.js",
"text": "/*\\\ntitle: $:/core/modules/startup/CSSescape.js\ntype: application/javascript\nmodule-type: startup\n\nPolyfill for CSS.escape()\n\n\\*/\n(function(root,factory){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"css-escape\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n// https://github.com/umdjs/umd/blob/master/returnExports.js\nexports.startup = factory(root);\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\n}));\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/favicon.js": {
"title": "$:/core/modules/startup/favicon.js",
"text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",$tw.utils.makeDataUri(tiddler.fields.text,tiddler.fields.type,tiddler.fields._canonical_uri));\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/info.js": {
"title": "$:/core/modules/startup/info.js",
"text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_INFO_PLUGIN = \"$:/temp/info-plugin\";\n\nexports.startup = function() {\n\t// Function to bake the info plugin with new tiddlers\n\tvar updateInfoPlugin = function(tiddlerFieldsArray) {\n\t\t// Get the existing tiddlers\n\t\tvar json = $tw.wiki.getTiddlerData(TITLE_INFO_PLUGIN,{tiddlers: {}});\n\t\t// Add the new ones\n\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\tif(fields && fields.title) {\n\t\t\t\tjson.tiddlers[fields.title] = fields;\n\t\t\t}\n\t\t});\n\t\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \"info\" because ordinary plugins are only registered asynchronously after being loaded dynamically\n\t\tvar fields = {\n\t\t\ttitle: TITLE_INFO_PLUGIN,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"info\",\n\t\t\ttext: JSON.stringify(json,null,$tw.config.preferences.jsonSpaces)\n\t\t};\n\t\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\n\t};\n\t// Collect up the info tiddlers\n\tvar tiddlerFieldsArray = [];\n\t// Give each info module a chance to provide as many info tiddlers as they want as an array, and give them a callback for dynamically updating them\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tArray.prototype.push.apply(tiddlerFieldsArray,moduleExports.getInfoTiddlerFields(updateInfoPlugin));\n\t\t}\n\t});\n\tupdateInfoPlugin(tiddlerFieldsArray);\n\tvar changes = $tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]);\n\t$tw.wiki.registerPluginTiddlers(\"info\",[TITLE_INFO_PLUGIN]);\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/load-modules.js": {
"title": "$:/core/modules/startup/load-modules.js",
"text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/password.js": {
"title": "$:/core/modules/startup/password.js",
"text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/plugins.js": {
"title": "$:/core/modules/startup/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/startup/plugins.js\ntype: application/javascript\nmodule-type: startup\n\nStartup logic concerned with managing plugins\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"plugins\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = \"$:/status/RequireReloadDueToPluginChange\";\n\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = \"$:/config/RegisterPluginType/\";\n\nexports.startup = function() {\n\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"no\"});\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Work out which of the changed tiddlers are plugins that we need to reregister\n\t\tvar changesToProcess = [],\n\t\t\trequireReloadDueToPluginChange = false;\n\t\t$tw.utils.each(Object.keys(changes),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\t\trequiresReload = $tw.wiki.doesPluginRequireReload(title);\n\t\t\tif(requiresReload) {\n\t\t\t\trequireReloadDueToPluginChange = true;\n\t\t\t} else if(tiddler) {\n\t\t\t\tvar pluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields[\"plugin-type\"] || \"\"),\"no\") === \"yes\") {\n\t\t\t\t\tchangesToProcess.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t// Issue warning if any of the tiddlers require a reload\n\t\tif(requireReloadDueToPluginChange) {\n\t\t\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"yes\"});\n\t\t}\n\t\t// Read or delete the plugin info of the changed tiddlers\n\t\tif(changesToProcess.length > 0) {\n\t\t\tvar changes = $tw.wiki.readPluginInfo(changesToProcess);\n\t\t\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\n\t\t\t\tvar changedShadowTiddlers = {};\n\t\t\t\t// Collect the shadow tiddlers of any deleted plugins\n\t\t\t\t$tw.utils.each(changes.deletedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = true;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Collect the shadow tiddlers of any modified plugins\n\t\t\t\t$tw.utils.each(changes.modifiedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// (Re-)register any modified plugins\n\t\t\t\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\n\t\t\t\t// Unregister any deleted plugins\n\t\t\t\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\n\t\t\t\t// Unpack the shadow tiddlers\n\t\t\t\t$tw.wiki.unpackPluginTiddlers();\n\t\t\t\t// Queue change events for the changed shadow tiddlers\n\t\t\t\t$tw.utils.each(Object.keys(changedShadowTiddlers),function(title) {\n\t\t\t\t\t$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title]);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/render.js": {
"title": "$:/core/modules/startup/render.js",
"text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/RootTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar THROTTLE_REFRESH_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget, recursionMarker: \"no\"});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only tiddlers that are throttled have changed\n\t\tvar onlyThrottledTiddlersHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !(tiddler.hasField(\"draft.of\") || tiddler.hasField(\"throttle.refresh\"))) {\n\t\t\t\tonlyThrottledTiddlersHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyThrottledTiddlersHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = THROTTLE_REFRESH_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n\t// Run any post-render startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/PostRender\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/rootwidget.js": {
"title": "$:/core/modules/startup/rootwidget.js",
"text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-show-switcher\",function(event) {\n\t\t$tw.modal.display(\"$:/core/ui/SwitcherModal\",{variables: event.paramObject, event: event});\n\t});\t\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup.js": {
"title": "$:/core/modules/startup.js",
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t}\n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/story.js": {
"title": "$:/core/modules/startup/story.js",
"text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tvar story = new $tw.Story({\n\t\twiki: $tw.wiki,\n\t\tstoryTitle: DEFAULT_STORY_TITLE,\n\t\thistoryTitle: DEFAULT_HISTORY_TITLE\n\t});\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\tstory.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\tstory.addToHistory(storyList[0]);\n\t\t}\t\t\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/windows.js": {
"title": "$:/core/modules/startup/windows.js",
"text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\n$tw.windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\t$tw.windows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete $tw.windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t\tsrcWindow.document.documentElement.addEventListener(\"click\",$tw.popup,true);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/story.js": {
"title": "$:/core/modules/story.js",
"text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/storyviews/classic.js": {
"title": "$:/core/modules/storyviews/classic.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\t\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"title": "$:/core/modules/storyviews/pop.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"title": "$:/core/modules/storyviews/zoomin.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"title": "$:/core/modules/syncer.js",
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \"sync adaptor\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSyncDisableLazyLoading = \"$:/config/SyncDisableLazyLoading\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.titleSyncThrottleInterval = \"$:/config/SyncThrottleInterval\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.errorRetryInterval = 5 * 1000; // Interval to retry after an error\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Save parameters\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\"\"),10) || this.throttleInterval;\n\tthis.errorRetryInterval = options.errorRetryInterval || this.errorRetryInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging,\n\t\tsaveHistory: true\n\t});\n\t// Make another logger for connection errors\n\tthis.loggerConnection = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\") + \"-connection\",{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging\n\t});\n\t// Ask the syncadaptor to use the main logger\n\tif(this.syncadaptor.setLoggerSaveBuffer) {\n\t\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\tthis.titlesToBeLoaded = {}; // Hashmap of titles of tiddlers that need loading from the server\n\tthis.titlesHaveBeenLazyLoaded = {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\n\t// Timers\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Number of outstanding requests\n\tthis.numTasksInProgress = 0;\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Filter the changes to just include ones that are being synced\n\t\tvar filteredChanges = self.getSyncedTiddlers(function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t\tif(filteredChanges.length > 0) {\n\t\t\tself.processTaskQueue();\n\t\t} else {\n\t\t\t// Look for deletions of tiddlers we're already syncing\t\n\t\t\tvar outstandingDeletion = false\n\t\t\t$tw.utils.each(changes,function(change,title,object) {\n\t\t\t\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\n\t\t\t\t\toutstandingDeletion = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(outstandingDeletion) {\n\t\t\t\tself.processTaskQueue();\n\t\t\t}\n\t\t}\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function(event) {\n\t\t\tvar username = event && event.paramObject && event.paramObject.username,\n\t\t\t\tpassword = event && event.paramObject && event.paramObject.password;\n\t\t\tif(username && password) {\n\t\t\t\t// Login with username and password\n\t\t\t\tself.login(username,password,function() {});\n\t\t\t} else {\n\t\t\t\t// No username and password, so we display a prompt\n\t\t\t\tself.handleLoginEvent();\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-copy-syncer-logs-to-clipboard\",function() {\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \"\\n\\nLog:\\n\" + self.logger.getBuffer());\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI && this.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) !== \"yes\") {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nShow a generic network error alert\n*/\nSyncer.prototype.displayError = function(msg,err) {\n\tif(err === ($tw.language.getString(\"Error/XMLHttpRequest\") + \": 0\")) {\n\t\tthis.loggerConnection.alert($tw.language.getString(\"Error/NetworkErrorAlert\"));\n\t\tthis.logger.log(msg + \":\",err);\n\t} else {\n\t\tthis.logger.alert(msg + \":\",err);\n\t}\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getSyncedTiddlers = function(source) {\n\treturn this.filterFn.call(this.wiki,source);\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getTiddlerRevision = function(title) {\n\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\n\t\treturn this.syncadaptor.getTiddlerRevision(title);\n\t} else {\n\t\treturn this.wiki.getTiddler(title).fields.revision;\t\n\t} \n};\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\t// \"revision\" is the revision of the tiddler last seen on the server, and \"changecount\" is the corresponding local changecount\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.getSyncedTiddlers();\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tself.tiddlerInfo[title] = {\n\t\t\t\trevision: self.getTiddlerRevision(title),\n\t\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t\t};\n\t\t}\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\tthis.logger.log(\"Checking dirty status\");\n\t// Check tiddlers that are in the store and included in the filter function\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(this.wiki.tiddlerExists(title)) {\n\t\t\tif(tiddlerInfo) {\n\t\t\t\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\n\t\t\t\tif(this.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the tiddler isn't known on the server then it needs to be saved to the server\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\t// Check tiddlers that are known from the server but not currently in the store\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\tif(!this.wiki.tiddlerExists(titles[index])) {\n\t\t\t// There must be a pending delete\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\tvar dirty = this.isDirty();\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",dirty);\n\t\tif(!dirty) {\n\t\t\tthis.loggerConnection.clearAlerts();\n\t\t}\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: this.getTiddlerRevision(tiddlerFields.title),\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\t// Set the various status tiddlers\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\t\tif(isLoggedIn) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tvar self = this,\n\t\tcancelNextSync = function() {\n\t\t\tif(self.pollTimerId) {\n\t\t\t\tclearTimeout(self.pollTimerId);\n\t\t\t\tself.pollTimerId = null;\n\t\t\t}\n\t\t},\n\t\ttriggerNextSync = function() {\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t},\n\t\tsyncSystemFromServer = (self.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"yes\" ? true : false);\n\tif(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) {\n\t\tthis.logger.log(\"Retrieving updated tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getUpdatedTiddlers(self,function(err,updates) {\n\t\t\ttriggerNextSync();\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(updates) {\n\t\t\t\t$tw.utils.each(updates.modifications,function(title) {\n\t\t\t\t\tself.titlesToBeLoaded[title] = true;\n\t\t\t\t});\n\t\t\t\t$tw.utils.each(updates.deletions,function(title) {\n\t\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(updates.modifications.length > 0 || updates.deletions.length > 0) {\n\t\t\t\t\tself.processTaskQueue();\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t} else if(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\ttriggerNextSync();\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep track of which tiddlers we already know about have been reported this time\n\t\t\tvar previousTitles = Object.keys(self.tiddlerInfo);\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.tiddlerExists(tiddlerFields.title) && self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null,\n\t\t\t\t\tindexInPreviousTitles = previousTitles.indexOf(tiddlerFields.title);\n\t\t\t\tif(indexInPreviousTitles !== -1) {\n\t\t\t\t\tpreviousTitles.splice(indexInPreviousTitles,1);\n\t\t\t\t}\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Only load the skinny version if we don't already have a fat version of the tiddler\n\t\t\t\t\tif(!tiddler || tiddler.fields.text === undefined) {\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\tself.titlesToBeLoaded[tiddlerFields.title] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Delete any tiddlers that were previously reported but missing this time\n\t\t\t$tw.utils.each(previousTitles,function(title) {\n\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.processTaskQueue();\n\t\t});\n\t}\n};\n\n/*\nForce load a tiddler from the server\n*/\nSyncer.prototype.enqueueLoadTiddler = function(title) {\n\tthis.titlesToBeLoaded[title] = true;\n\tthis.processTaskQueue();\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Ignore if the syncadaptor doesn't handle it\n\tif(!this.syncadaptor.supportsLazyLoading) {\n\t\treturn;\n\t}\n\t// Don't lazy load the same tiddler twice\n\tif(!this.titlesHaveBeenLazyLoaded[title]) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.getSyncedTiddlers().indexOf(title) !== -1) {\n\t\t\t// Mark the tiddler as needing loading, and having already been lazily loaded\n\t\t\tthis.titlesToBeLoaded[title] = true;\n\t\t\tthis.titlesHaveBeenLazyLoaded[title] = true;\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!err && !isLoggedIn) {\n\t\t\tif(self.syncadaptor && self.syncadaptor.displayLoginPrompt) {\n\t\t\t\tself.syncadaptor.displayLoginPrompt(self);\n\t\t\t} else {\n\t\t\t\tself.displayLoginPrompt();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nDispay a password prompt\n*/\nSyncer.prototype.displayLoginPrompt = function() {\n\tvar self = this;\n\tvar promptInfo = $tw.passwordPrompt.createPrompt({\n\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\tcallback: function(data) {\n\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\tself.syncFromServer();\n\t\t\t});\n\t\t\treturn true; // Get rid of the password prompt\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(err,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nProcess the next task\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing\n\t// a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(typeof task === \"object\" && task !== null) {\n\t\t\tthis.numTasksInProgress += 1;\n\t\t\ttask.run(function(err) {\n\t\t\t\tself.numTasksInProgress -= 1;\n\t\t\t\tif(err) {\n\t\t\t\t\tself.displayError(\"Sync error while processing \" + task.type + \" of '\" + task.title + \"'\",err);\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\tself.triggerTimeout(self.errorRetryInterval);\n\t\t\t\t} else {\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\t// Process the next task\n\t\t\t\t\tself.processTaskQueue.call(self);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// No task is ready so update the status\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// And trigger a timeout if there is a pending task\n\t\t\tif(task === true) {\n\t\t\t\tthis.triggerTimeout();\t\t\t\t\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.updateDirtyStatus();\t\t\n\t}\n};\n\nSyncer.prototype.triggerTimeout = function(interval) {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},interval || self.taskTimerInterval);\n\t}\n};\n\n/*\nChoose the next sync task. We prioritise saves, then deletes, then loads from the server\n\nReturns either a task object, null if there's no upcoming tasks, or the boolean true if there are pending tasks that aren't yet due\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar thresholdLastSaved = (new Date()) - this.throttleInterval,\n\t\thavePending = null;\n\t// First we look for tiddlers that have been modified locally and need saving back to the server\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(tiddler) {\n\t\t\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\n\t\t\tvar hasChanged = !tiddlerInfo || this.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\n\t\t\t\tisReadyToSave = !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved < thresholdLastSaved;\n\t\t\tif(hasChanged) {\n\t\t\t\tif(isReadyToSave) {\n\t\t\t\t\treturn new SaveTiddlerTask(this,title); \t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\thavePending = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Second, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\ttitle = titles[index];\n\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\treturn new DeleteTiddlerTask(this,title);\n\t\t}\n\t}\n\t// Check for tiddlers that need loading\n\ttitle = Object.keys(this.titlesToBeLoaded)[0];\n\tif(title) {\n\t\tdelete this.titlesToBeLoaded[title];\n\t\treturn new LoadTiddlerTask(this,title);\n\t}\n\t// No tasks are ready\n\treturn havePending;\n};\n\nfunction SaveTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"save\";\n}\n\nSaveTiddlerTask.prototype.run = function(callback) {\n\tvar self = this,\n\t\tchangeCount = this.syncer.wiki.getChangeCount(this.title),\n\t\ttiddler = this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\n\tthis.syncer.logger.log(\"Dispatching 'save' task:\",this.title);\n\tif(tiddler) {\n\t\tthis.syncer.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t// If there's an error, exit without changing any internal state\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Adjust the info stored about this tiddler\n\t\t\tself.syncer.tiddlerInfo[self.title] = {\n\t\t\t\tchangeCount: changeCount,\n\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\trevision: revision,\n\t\t\t\ttimestampLastSaved: new Date()\n\t\t\t};\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.syncer.tiddlerInfo[self.title]\n\t\t});\n\t} else {\n\t\tthis.syncer.logger.log(\" Not Dispatching 'save' task:\",this.title,\"tiddler does not exist\");\n\t\t$tw.utils.nextTick(callback(null));\n\t}\n};\n\nfunction DeleteTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"delete\";\n}\n\nDeleteTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'delete' task:\",this.title);\n\tthis.syncer.syncadaptor.deleteTiddler(this.title,function(err) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Remove the info stored about this tiddler\n\t\tdelete self.syncer.tiddlerInfo[self.title];\n\t\tif($tw.boot.files){\n\t\t\t// Remove the tiddler from $tw.boot.files\n\t\t\tdelete $tw.boot.files[self.title];\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t},{\n\t\ttiddlerInfo: self.syncer.tiddlerInfo[this.title]\n\t});\n};\n\nfunction LoadTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"load\";\n}\n\nLoadTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'load' task:\",this.title);\n\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Update the info stored about this tiddler\n\t\tif(tiddlerFields) {\n\t\t\tself.syncer.storeTiddler(tiddlerFields);\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"title": "$:/core/modules/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/upgraders/plugins.js": {
"title": "$:/core/modules/upgraders/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin contains JS modules\n\t\t\tvar requiresReload = wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? (wiki.getTiddlerText(\"$:/language/ControlPanel/Plugins/PluginWillRequireReload\") + \" \") : \"\";\n\t\t\tmessages[title] = requiresReload;\n\t\t\tif(incomingTiddler.version) {\n\t\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/system.js": {
"title": "$:/core/modules/upgraders/system.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/Import\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/themetweaks.js": {
"title": "$:/core/modules/upgraders/themetweaks.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
"text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)if((e=r.charCodeAt(t))<128)o+=String.fromCharCode(e);else if(e>127&&e<2048)o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128);else if(e>55295&&e<57344&&r.length>t+1){var i=e,n=r.charCodeAt(t+1);t++;var d=65536+(i-55296<<10|n-56320);o+=String.fromCharCode(d>>18|240),o+=String.fromCharCode(d>>12&63|128),o+=String.fromCharCode(d>>6&63|128),o+=String.fromCharCode(63&d|128)}else o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128);return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)if((t=r.charCodeAt(o))<128)e+=String.fromCharCode(t),o++;else if(t>191&&t<224)e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2;else if(t>223&&t<240)e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3;else{var i=(7&t)<<18|(63&r.charCodeAt(o+1))<<12|(63&r.charCodeAt(o+2))<<6|63&r.charCodeAt(o+3);e+=String.fromCharCode(55296+(i-65536>>10))+String.fromCharCode(56320+(i-65536&1023)),o+=4}return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var i=0;i<t.length;i++)o[t[i]]=o.require(t[i]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,i,n,d,f,a,h,C=\"\",c=0;c<r.length;)d=(t=r.charCodeAt(c++))>>2,f=(3&t)<<4|(i=r.charCodeAt(c++))>>4,a=(15&i)<<2|(n=r.charCodeAt(c++))>>6,h=63&n,isNaN(i)?a=h=64:isNaN(n)&&(h=64),C+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return C},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,i,n,d,f,a,h=\"\",C=0;C<r.length;)t=o.indexOf(r.charAt(C++))<<2|(d=o.indexOf(r.charAt(C++)))>>4,i=(15&d)<<4|(f=o.indexOf(r.charAt(C++)))>>2,n=(3&f)<<6|(a=o.indexOf(r.charAt(C++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(i)),64!=a&&(h+=String.fromCharCode(n));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
"module-type": "library"
},
"$:/core/modules/utils/crypto.js": {
"title": "$:/core/modules/utils/crypto.js",
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/csv.js": {
"title": "$:/core/modules/utils/csv.js",
"text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
"text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&\").replace(d,\"<\").replace(e,\">\").replace(f,\"¶<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
"module-type": "library"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"title": "$:/core/modules/utils/dom/animations/slide.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"title": "$:/core/modules/utils/dom/animator.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"title": "$:/core/modules/utils/dom/browser.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"title": "$:/core/modules/utils/dom/csscolorparser.js",
"text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"title": "$:/core/modules/utils/dom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.hasAttribute && el.hasAttribute(\"class\") && el.getAttribute(\"class\").split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/dragndrop.js": {
"title": "$:/core/modules/utils/dom/dragndrop.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"title": "$:/core/modules/utils/dom/http.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\turl = options.url,\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\thasHeader = function(targetHeader) {\n\t\t\ttargetHeader = targetHeader.toLowerCase();\n\t\t\tvar result = false;\n\t\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\t\tif(headerTitle.toLowerCase() === targetHeader) {\n\t\t\t\t\tresult = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tif(type === \"GET\" || type === \"HEAD\") {\n\t\t\t\turl += \"?\" + results.join(\"&\");\n\t\t\t} else {\n\t\t\t\tdata = results.join(\"&\");\n\t\t\t}\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !hasHeader(\"Content-Type\")) {\n\t\trequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!hasHeader(\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"title": "$:/core/modules/utils/dom/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"title": "$:/core/modules/utils/dom/modal.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\nvar navigator = require(\"$:/core/modules/widgets/navigator.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({\n\t\t\tcurrentTiddler: title,\n\t\t\t\"tv-story-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-story-list\") : \"\"),\n\t\t\t\"tv-history-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-history-list\") : \"\")\n\t\t},options.variables);\n\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\tif(tiddler.fields && tiddler.fields.class) {\n\t\t$tw.utils.addClass(wrapper,tiddler.fields.class);\n\t}\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\tvar navigatorTree = {\n\t\t\"type\": \"navigator\",\n\t\t\"attributes\": {\n\t\t\t\"story\": {\n\t\t\t\t\"name\": \"story\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-story-list\"]\n\t\t\t},\n\t\t\t\"history\": {\n\t\t\t\t\"name\": \"history\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-history-list\"]\n\t\t\t}\n\t\t},\n\t\t\"tag\": \"$navigator\",\n\t\t\"isBlock\": true,\n\t\t\"children\": []\n\t};\n\tvar navigatorWidgetNode = new navigator.navigator(navigatorTree, {\n\t\twiki: this.wiki,\n\t\tdocument : this.srcDocument,\n\t\tparentWidget: $tw.rootWidget\n\t});\n\tnavigatorWidgetNode.render(modalBody,null);\n\t\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"title": "$:/core/modules/utils/dom/notifier.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"title": "$:/core/modules/utils/dom/popup.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tif(popup.noStateReference) {\n\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t} else {\n\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n \t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"title": "$:/core/modules/utils/dom/scroller.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\tif(event.paramObject && event.paramObject.selector) {\n\t\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t\t} else {\n\t\t\tthis.scrollIntoView(event.target);\t\t\t\n\t\t}\n\t\treturn false; // Event was handled\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nPageScroller.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\t\t\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/edition-info.js": {
"title": "$:/core/modules/utils/edition-info.js",
"text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/fakedom.js": {
"title": "$:/core/modules/utils/fakedom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_Node = function (){\n\tthrow TypeError(\"Illegal constructor\");\n};\n\nObject.defineProperty(TW_Node.prototype, 'ELEMENT_NODE', {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nObject.defineProperty(TW_Node.prototype, 'TEXT_NODE', {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nTW_TextNode.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.TEXT_NODE;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nTW_Element.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.ELEMENT_NODE;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"title": "$:/core/modules/utils/filesystem.js",
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nReturn the subdirectories of a path\n*/\nexports.getSubdirectories = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn null;\n\t}\n\tvar subdirs = [];\n\t$tw.utils.each(fs.readdirSync(dirPath),function(item) {\n\t\tif($tw.utils.isDirectory(path.resolve(dirPath,item))) {\n\t\t\tsubdirs.push(item);\n\t\t}\n\t});\n\treturn subdirs;\n}\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = path.resolve($tw.utils.removeTrailingSeparator(srcPath));\n\tdstPath = path.resolve($tw.utils.removeTrailingSeparator(dstPath));\n\t// Check that neither director is within the other\n\tif(srcPath.substring(0,dstPath.length) === dstPath || dstPath.substring(0,srcPath.length) === srcPath) {\n\t\treturn \"Cannot copy nested directories\";\n\t}\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file on disk (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n\tisEditableFile: true if the tiddler was loaded via non-standard options & marked editable\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\textFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters,\n\tfileInfo: an existing fileInfo to check against\n\toriginalpath: a preferred filepath if no pathFilters match\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {}, metaExt;\n\t// Propagate the isEditableFile flag\n\tif(options.fileInfo) {\n\t\tfileInfo.isEditableFile = options.fileInfo.isEditableFile || false;\n\t}\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t\tif(options.extFilters) {\n\t\t\t// Check for extension override\n\t\t\tmetaExt = $tw.utils.generateTiddlerExtension(tiddler.fields.title,{\n\t\t\t\textFilters: options.extFilters,\n\t\t\t\twiki: options.wiki\n\t\t\t});\n\t\t\tif(metaExt){\n\t\t\t\tif(metaExt === \".tid\") {\n\t\t\t\t\t// Overriding to the .tid extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else if (metaExt === \".json\") {\n\t\t\t\t\t// Overriding to the .json extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/json\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else {\n\t\t\t\t\t//If the new type matches a known extention, use that MIME type's encoding\n\t\t\t\t\tvar extInfo = $tw.utils.getFileExtensionInfo(metaExt);\n\t\t\t\t\tfileInfo.type = extInfo ? extInfo.type : null;\n\t\t\t\t\tfileInfo.encoding = $tw.utils.getTypeEncoding(metaExt);\n\t\t\t\t\tfileInfo.hasMetaFile = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type or metaExt\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: metaExt || contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki,\n\t\tfileInfo: options.fileInfo,\n\t\toriginalpath: options.originalpath\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the file extension for saving a tiddler\nOptions include:\n\textFilters: optional array of filters to be used to generate the extention\n\twiki: optional wiki for evaluating the extFilters\n*/\nexports.generateTiddlerExtension = function(title,options) {\n\tvar self = this,\n\t\textension;\n\t// Check if any of the extFilters applies\n\tif(options.extFilters && options.wiki) { \n\t\t$tw.utils.each(options.extFilters,function(filter) {\n\t\t\tif(!extension) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\textension = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn extension;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n\tfileInfo: an existing fileInfo object to check against\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar self = this,\n\t\tdirectory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\toriginalpath = options.originalpath || \"\",\n\t\tfilepath;\t\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tif(!filepath && originalpath !== \"\") {\n\t\t//Use the originalpath without the extension\n\t\tvar ext = path.extname(originalpath);\n\t\tfilepath = originalpath.substring(0,originalpath.length - ext.length);\n\t} else if(!filepath) {\n\t\tfilepath = title;\n\t\t// If the filepath already ends in the extension then remove it\n\t\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t\t}\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t//If the path does not start with \".\" or \"..\" and a path seperator, then\n\tif(!/^\\.{1,2}[/\\\\]/g.test(filepath)) {\n\t\t// Don't let the filename start with any dots because such files are invisible on *nix\n\t\tfilepath = filepath.replace(/^\\.+/g,\"_\");\n\t}\n\t// Remove any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|~|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation characters)\n\tif(!filepath) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\t\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath, oldPath = (options.fileInfo) ? options.fileInfo.filepath : undefined,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tif(oldPath && oldPath == fullPath) {\n\t\t\tbreak;\n\t\t}\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// If the last write failed with an error, or if path does not start with:\n\t//\tthe resolved options.directory, the resolved wikiPath directory, or the wikiTiddlersPath directory, \n\t//\tthen encodeURIComponent() and resolve to tiddler directory\n\tvar newPath = fullPath,\n\t\tencode = (options.fileInfo || {writeError: false}).writeError == true;\n\tif(!encode){\n\t\tencode = !(fullPath.indexOf(path.resolve(directory)) == 0 ||\n\t\t\tfullPath.indexOf(path.resolve($tw.boot.wikiPath)) == 0 ||\n\t\t\tfullPath.indexOf($tw.boot.wikiTiddlersPath) == 0);\n\t\t}\n\tif(encode){\n\t\tfullPath = path.resolve(directory, encodeURIComponent(fullPath));\n\t}\n\t// Call hook to allow plugins to modify the final path\n\tfullPath = $tw.hooks.invokeHook(\"th-make-tiddler-path\", newPath, fullPath);\n\t// Return the full path to the file\n\treturn fullPath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",callback);\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",callback);\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",callback);\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n};\n\n/*\nDelete a file described by the fileInfo if it exits\n*/\nexports.deleteTiddlerFile = function(fileInfo, callback) {\n\t//Only attempt to delete files that exist on disk\n\tif(!fileInfo.filepath || !fs.existsSync(fileInfo.filepath)) {\n\t\treturn callback(null);\n\t}\n\t// Delete the file\n\tfs.unlink(fileInfo.filepath,function(err) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\t\n\t\t// Delete the metafile if present\n\t\tif(fileInfo.hasMetaFile && fs.existsSync(fileInfo.filepath + \".meta\")) {\n\t\t\tfs.unlink(fileInfo.filepath + \".meta\",function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t\t});\n\t\t} else {\n\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t}\n\t});\n};\n\n/*\nCleanup old files on disk, by comparing the options values:\n\tadaptorInfo from $tw.syncer.tiddlerInfo\n\tbootInfo from $tw.boot.files\n*/\nexports.cleanupTiddlerFiles = function(options, callback) {\n\tvar adaptorInfo = options.adaptorInfo || {},\n\tbootInfo = options.bootInfo || {},\n\ttitle = options.title || \"undefined\";\n\tif(adaptorInfo.filepath && bootInfo.filepath && adaptorInfo.filepath !== bootInfo.filepath) {\n\t\treturn $tw.utils.deleteTiddlerFile(adaptorInfo, function(err){\n\t\t\tif(err) {\n\t\t\t\tif ((err.code == \"EPERM\" || err.code == \"EACCES\") && err.syscall == \"unlink\") {\n\t\t\t\t\t// Error deleting the previous file on disk, should fail gracefully\n\t\t\t\t\t$tw.syncer.displayError(\"Server desynchronized. Error cleaning up previous file for tiddler: \"+title, err);\n\t\t\t\t\treturn callback(null);\n\t\t\t\t} else {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn callback(null);\n\t\t});\n\t} else {\n\t\treturn callback(null);\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/linkedlist.js": {
"title": "$:/core/modules/utils/linkedlist.js",
"text": "/*\\\nmodule-type: utils\ntitle: $:/core/modules/utils/linkedlist.js\ntype: application/javascript\n\nThis is a doubly-linked indexed list intended for manipulation, particularly\npushTop, which it does with significantly better performance than an array.\n\n\\*/\n(function(){\n\nfunction LinkedList() {\n\tthis.clear();\n};\n\nLinkedList.prototype.clear = function() {\n\tthis.index = Object.create(null);\n\t// LinkedList performs the duty of both the head and tail node\n\tthis.next = this;\n\tthis.prev = this;\n\tthis.length = 0;\n};\n\nLinkedList.prototype.remove = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t} else {\n\t\t_removeOne(this,value);\n\t}\n};\n\nLinkedList.prototype.push = function(/* values */) {\n\tfor(var i = 0; i < arguments.length; i++) {\n\t\tvar value = arguments[i];\n\t\tvar node = {value: value};\n\t\tvar preexistingNode = this.index[value];\n\t\t_linkToEnd(this,node);\n\t\tif(preexistingNode) {\n\t\t\t// We want to keep pointing to the first instance, but we want\n\t\t\t// to have that instance (or chain of instances) point to the\n\t\t\t// new one.\n\t\t\twhile (preexistingNode.copy) {\n\t\t\t\tpreexistingNode = preexistingNode.copy;\n\t\t\t}\n\t\t\tpreexistingNode.copy = node;\n\t\t} else {\n\t\t\tthis.index[value] = node;\n\t\t}\n\t}\n};\n\nLinkedList.prototype.pushTop = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t\tthis.push.apply(this,value);\n\t} else {\n\t\tvar node = _removeOne(this,value);\n\t\tif(!node) {\n\t\t\tnode = {value: value};\n\t\t\tthis.index[value] = node;\n\t\t} else {\n\t\t\t// Put this node at the end of the copy chain.\n\t\t\tvar preexistingNode = node;\n\t\t\twhile(preexistingNode.copy) {\n\t\t\t\tpreexistingNode = preexistingNode.copy;\n\t\t\t}\n\t\t\t// The order of these three statements is important,\n\t\t\t// because sometimes preexistingNode == node.\n\t\t\tpreexistingNode.copy = node;\n\t\t\tthis.index[value] = node.copy;\n\t\t\tnode.copy = undefined;\n\t\t}\n\t\t_linkToEnd(this,node);\n\t}\n};\n\nLinkedList.prototype.each = function(callback) {\n\tfor(var ptr = this.next; ptr !== this; ptr = ptr.next) {\n\t\tcallback(ptr.value);\n\t}\n};\n\nLinkedList.prototype.toArray = function() {\n\tvar output = [];\n\tfor(var ptr = this.next; ptr !== this; ptr = ptr.next) {\n\t\toutput.push(ptr.value);\n\t}\n\treturn output;\n};\n\nfunction _removeOne(list,value) {\n\tvar node = list.index[value];\n\tif(node) {\n\t\tnode.prev.next = node.next;\n\t\tnode.next.prev = node.prev;\n\t\tlist.length -= 1;\n\t\t// Point index to the next instance of the same value, maybe nothing.\n\t\tlist.index[value] = node.copy;\n\t}\n\treturn node;\n};\n\nfunction _linkToEnd(list,node) {\n\t// Sticks the given node onto the end of the list.\n\tlist.prev.next = node;\n\tnode.prev = list.prev;\n\tlist.prev = node;\n\tnode.next = list;\n\tlist.length += 1;\n};\n\nexports.LinkedList = LinkedList;\n\n})();\n",
"module-type": "utils",
"type": "application/javascript"
},
"$:/core/modules/utils/logger.js": {
"title": "$:/core/modules/utils/logger.js",
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n\tthis.save = \"save\" in options ? options.save : true;\n\tthis.saveLimit = options.saveLimit || 100 * 1024;\n\tthis.saveBufferLogger = this;\n\tthis.buffer = \"\";\n\tthis.alertCount = 0;\n}\n\nLogger.prototype.setSaveBuffer = function(logger) {\n\tthis.saveBufferLogger = logger;\n};\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tvar self = this;\n\tif(this.enable) {\n\t\tif(this.saveBufferLogger.save) {\n\t\t\tthis.saveBufferLogger.buffer += $tw.utils.formatDateString(new Date(),\"YYYY MM DD 0hh:0mm:0ss.0XXX\") + \":\";\n\t\t\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\n\t\t\t\tself.saveBufferLogger.buffer += \" \" + arg;\n\t\t\t});\n\t\t\tthis.saveBufferLogger.buffer += \"\\n\";\n\t\t\tthis.saveBufferLogger.buffer = this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\t\t\t\n\t\t}\n\t\tif(console !== undefined && console.log !== undefined) {\n\t\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t\t}\n\t} \n};\n\n/*\nRead the message buffer\n*/\nLogger.prototype.getBuffer = function() {\n\treturn this.saveBufferLogger.buffer;\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t\tthis.alertCount += 1;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\n/*\nClear outstanding alerts\n*/\nLogger.prototype.clearAlerts = function() {\n\tvar self = this;\n\tif($tw.browser && this.alertCount > 0) {\n\t\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.component === self.componentName) {\n\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t}\n\t\t});\n\t\tthis.alertCount = 0;\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"title": "$:/core/modules/utils/parsetree.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/performance.js": {
"title": "$:/core/modules/utils/performance.js",
"text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\t\t\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/pluginmaker.js": {
"title": "$:/core/modules/utils/pluginmaker.js",
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/transliterate.js": {
"title": "$:/core/modules/utils/transliterate.js",
"text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"title": "$:/core/modules/utils/utils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nLog a table of name: value pairs\n*/\nexports.logTable = function(data) {\n\tif(console.table) {\n\t\tconsole.table(data);\n\t} else {\n\t\t$tw.utils.each(data,function(value,name) {\n\t\t\tconsole.log(name + \": \" + value);\n\t\t});\n\t}\n}\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimPrefix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/^\\s\\s*/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('^(' + unwanted + ')+');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimSuffix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/\\s\\s*$/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('(' + unwanted + ')+$');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\t\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date),4);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear(),4);\n\t\t\t}],\n\t\t\t[/^aYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(Math.abs(date.getFullYear()),4);\n\t\t\t}],\n\t\t\t[/^\\{era:([^,\\|}]*)\\|([^}\\|]*)\\|([^}]*)\\}/, function(match) {\n\t\t\t\tvar year = date.getFullYear();\n\t\t\t\treturn year === 0 ? match[2] : (year < 0 ? match[1] : match[3]);\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds(),3);\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call(null,match);\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s, rawUnicode) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(regex, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s, rawUnicode) {\n\t// See http://www.json.org/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/\\x08/g, '\\\\b') // backspace\n\t\t.replace(/\\x0c/g, '\\\\f') // formfeed\n\t\t.replace(/\\t/g, '\\\\t') // tab\n\t\t.replace(regex,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type,_canonical_uri) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tif(_canonical_uri) {\n\t\tparts.push(_canonical_uri);\n\t} else {\n\t\tparts.push(\"data:\");\n\t\tparts.push(type);\n\t\tparts.push(isBase64 ? \";base64\" : \"\");\n\t\tparts.push(\",\");\n\t\tparts.push(isBase64 ? text : encodeURIComponent(text));\t\t\n\t}\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n/*\nReturn system information useful for debugging\n*/\nexports.getSystemInfo = function(str,ending,position) {\n\tvar results = [],\n\t\tsave = function(desc,value) {\n\t\t\tresults.push(desc + \": \" + value);\n\t\t};\n\tif($tw.browser) {\n\t\tsave(\"User Agent\",navigator.userAgent);\n\t\tsave(\"Online Status\",window.navigator.onLine);\n\t}\n\tif($tw.node) {\n\t\tsave(\"Node Version\",process.version);\n\t}\n\treturn results.join(\"\\n\");\n};\n\nexports.parseNumber = function(str) {\n\treturn parseFloat(str) || 0;\n};\n\nexports.parseInt = function(str) {\n\treturn parseInt(str,10) || 0;\n};\n\nexports.stringifyNumber = function(num) {\n\treturn num + \"\";\n};\n\nexports.makeCompareFunction = function(type,options) {\n\toptions = options || {};\n\tvar gt = options.invert ? -1 : +1,\n\t\tlt = options.invert ? +1 : -1,\n\t\tcompare = function(a,b) {\n\t\t\tif(a > b) {\n\t\t\t\treturn gt ;\n\t\t\t} else if(a < b) {\n\t\t\t\treturn lt;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\ttypes = {\n\t\t\t\"number\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\n\t\t\t},\n\t\t\t\"integer\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\n\t\t\t},\n\t\t\t\"string\": function(a,b) {\n\t\t\t\treturn compare(\"\" + a,\"\" +b);\n\t\t\t},\n\t\t\t\"date\": function(a,b) {\n\t\t\t\tvar dateA = $tw.utils.parseDate(a),\n\t\t\t\t\tdateB = $tw.utils.parseDate(b);\n\t\t\t\tif(!isFinite(dateA)) {\n\t\t\t\t\tdateA = new Date(0);\n\t\t\t\t}\n\t\t\t\tif(!isFinite(dateB)) {\n\t\t\t\t\tdateB = new Date(0);\n\t\t\t\t}\n\t\t\t\treturn compare(dateA,dateB);\n\t\t\t},\n\t\t\t\"version\": function(a,b) {\n\t\t\t\treturn $tw.utils.compareVersions(a,b);\n\t\t\t}\n\t\t};\n\treturn (types[type] || types[options.defaultType] || types.number);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/action-confirm.js": {
"title": "$:/core/modules/widgets/action-confirm.js",
"text": "/*\\\n\ntitle: $:/core/modules/widgets/action-confirm.js\ntype: application/javascript\nmodule-type: widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ConfirmWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nConfirmWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nConfirmWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.parentDomNode = parent;\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nConfirmWidget.prototype.execute = function() {\n\tthis.message = this.getAttribute(\"$message\",$tw.language.getString(\"ConfirmAction\"));\n\tthis.prompt = (this.getAttribute(\"$prompt\",\"yes\") == \"no\" ? false : true);\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nConfirmWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$message\"] || changedAttributes[\"$prompt\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nConfirmWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar invokeActions = true,\n\t\thandled = true;\n\tif(this.prompt) {\n\t\tinvokeActions = confirm(this.message);\n\t}\n\tif(invokeActions) {\n\t\thandled = this.invokeActions(triggeringWidget,event);\n\t}\n\treturn handled;\n};\n\nConfirmWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nexports[\"action-confirm\"] = ConfirmWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-createtiddler.js": {
"title": "$:/core/modules/widgets/action-createtiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw:false, require:false, exports:false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.hasBase = !!this.actionBaseTitle;\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n\t//Following params are new since 5.1.22\n\tthis.actionTemplate = this.getAttribute(\"$template\");\n\tthis.useTemplate = !!this.actionTemplate;\n\tthis.actionOverwrite = this.getAttribute(\"$overwrite\",\"no\");\n\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.getTiddlerText(\"$:/language/DefaultNewTiddlerTitle\"), // Get the initial new-tiddler title\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tif(this.hasBase && this.actionOverwrite === \"no\") {\n\t\ttitle = this.wiki.generateNewTitle(this.actionBaseTitle);\n\t} else if (this.hasBase && this.actionOverwrite === \"yes\") {\n\t\ttitle = this.actionBaseTitle\n\t}\n\t// NO $basetitle BUT $template parameter is available\n\t// the title MUST be unique, otherwise the template would be overwritten\n\tif (!this.hasBase && this.useTemplate) {\n\t\ttitle = this.wiki.generateNewTitle(this.actionTemplate);\n\t} else if (!this.hasBase && !this.useTemplate) {\n\t\t// If NO $basetitle AND NO $template use initial title\n\t\t// DON'T overwrite any stuff\n\t\ttitle = this.wiki.generateNewTitle(title);\n\t}\n\tvar templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {};\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,this.wiki.generateDraftTitle(title),this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletefield.js": {
"title": "$:/core/modules/widgets/action-deletefield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletetiddler.js": {
"title": "$:/core/modules/widgets/action-deletetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-listops.js": {
"title": "$:/core/modules/widgets/action-listops.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-log.js": {
"title": "$:/core/modules/widgets/action-log.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-log.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LogWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLogWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLogWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\nLogWidget.prototype.execute = function(){\n\tthis.message = this.getAttribute(\"$$message\",\"debug\");\n\tthis.logAll = this.getAttribute(\"$$all\",\"no\") === \"yes\" ? true : false;\n\tthis.filter = this.getAttribute(\"$$filter\");\n}\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nLogWidget.prototype.refresh = function(changedTiddlers) {\n\tthis.refreshSelf();\n\treturn true;\n};\n\n/*\nInvoke the action associated with this widget\n*/\nLogWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tthis.log();\n\treturn true; // Action was invoked\n};\n\nLogWidget.prototype.log = function() {\n\tvar data = {},\n\t\tdataCount,\n\t\tallVars = {},\n\t\tfilteredVars;\n\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.substring(0,2) !== \"$$\") {\n\t\t\tdata[name] = attribute;\n\t\t}\t\t\n\t});\n\n\tfor(var v in this.variables) {\n\t\tallVars[v] = this.getVariable(v,{defaultValue:\"\"});\n\t}\t\n\tif(this.filter) {\n\t\tfilteredVars = this.wiki.compileFilter(this.filter).call(this.wiki,this.wiki.makeTiddlerIterator(allVars));\n\t\t$tw.utils.each(filteredVars,function(name) {\n\t\t\tdata[name] = allVars[name];\n\t\t});\t\t\n\t}\n\tdataCount = $tw.utils.count(data);\n\n\tconsole.group(this.message);\n\tif(dataCount > 0) {\n\t\t$tw.utils.logTable(data);\n\t}\n\tif(this.logAll || !dataCount) {\n\t\tconsole.groupCollapsed(\"All variables\");\n\t\t$tw.utils.logTable(allVars);\n\t\tconsole.groupEnd();\n\t}\n\tconsole.groupEnd();\n}\n\nexports[\"action-log\"] = LogWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-navigate.js": {
"title": "$:/core/modules/widgets/action-navigate.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-popup.js": {
"title": "$:/core/modules/widgets/action-popup.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-popup.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to trigger a popup.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ActionPopupWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nActionPopupWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nActionPopupWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nActionPopupWidget.prototype.execute = function() {\n\tthis.actionState = this.getAttribute(\"$state\");\n\tthis.actionCoords = this.getAttribute(\"$coords\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nActionPopupWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$state\"] || changedAttributes[\"$coords\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Trigger the popup\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(this.actionCoords || \"\");\n\tif(match) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: null,\n\t\t\tdomNodeRect: {\n\t\t\t\tleft: parseFloat(match[1]),\n\t\t\t\ttop: parseFloat(match[2]),\n\t\t\t\twidth: parseFloat(match[3]),\n\t\t\t\theight: parseFloat(match[4])\n\t\t\t},\n\t\t\ttitle: this.actionState,\n\t\t\twiki: this.wiki\n\t\t});\n\t} else {\n\t\t$tw.popup.cancel(0);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-popup\"] = ActionPopupWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-sendmessage.js": {
"title": "$:/core/modules/widgets/action-sendmessage.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-setfield.js": {
"title": "$:/core/modules/widgets/action-setfield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/browse.js": {
"title": "$:/core/modules/widgets/browse.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\tif(this.accept) {\n\t\tdomNode.setAttribute(\"accept\",this.accept);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.accept = this.getAttribute(\"accept\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"title": "$:/core/modules/widgets/button.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = \"button\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tdomNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tself.invokeActionString(self.actions,self,event,{modifier: modifierKey});\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nButtonWidget.prototype.updateDomNodeClasses = function() {\n\tvar domNodeClasses = this.domNode.className.split(\" \"),\n\t\toldClasses = this.class.split(\" \"),\n\t\tnewClasses;\t\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tnewClasses = this.class.split(\" \");\n\t//Remove classes assigned from the old value of class attribute\n\t$tw.utils.each(oldClasses,function(oldClass){\n\t\tvar i = domNodeClasses.indexOf(oldClass);\n\t\tif(i !== -1) {\n\t\t\tdomNodeClasses.splice(i,1);\n\t\t}\n\t});\n\t//Add new classes from updated class attribute.\n\t$tw.utils.pushTop(domNodeClasses,newClasses);\n\tthis.domNode.className = domNodeClasses.join(\" \");\n}\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.updateDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"title": "$:/core/modules/widgets/checkbox.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"title": "$:/core/modules/widgets/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"title": "$:/core/modules/widgets/count.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = \"0\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/diff-text.js": {
"title": "$:/core/modules/widgets/diff-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/draggable.js": {
"title": "$:/core/modules/widgets/draggable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/droppable.js": {
"title": "$:/core/modules/widgets/droppable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = this.parseTreeNode.isBlock ? \"div\" : \"span\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\t// Add event handlers\n\tif(this.droppableEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t\t]);\t\t\n\t} else {\n\t\t$tw.utils.addClass(this.domNode,this.disabledClass);\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\tif(this.domNodes[0]) {\n\t\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t\t}\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.disabledClass = this.getAttribute(\"disabledClass\",\"\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nDroppableWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tthis.domNode.className = classes.join(\" \");\t\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes.enable || changedAttributes.disabledClass || changedAttributes.actions || changedAttributes.effect) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"title": "$:/core/modules/widgets/dropzone.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = this.dropzoneClass || \"tc-dropzone\";\n\t// Add event handlers\n\tif(this.dropzoneEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\t\t\n\t}\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields]), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneClass = this.getAttribute(\"class\");\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\tthis.dropzoneEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.autoOpenOnImport = this.getAttribute(\"autoOpenOnImport\");\n\tthis.importTitle = this.getAttribute(\"importTitle\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.enable || changedAttributes.autoOpenOnImport || changedAttributes.importTitle || changedAttributes.deserializer || changedAttributes.class) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-binary.js": {
"title": "$:/core/modules/widgets/edit-binary.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Get our parameters\n\tvar editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tvar tiddler = this.wiki.getTiddler(editTitle);\n\tvar type = tiddler.fields.type;\n\tvar text = tiddler.fields.text;\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on draft tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!draft.title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!draft.title\"}\n\t\t},\n\t\tchildren: [{\n\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to internal data URI (no external)\n\tif(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets([element]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"title": "$:/core/modules/widgets/edit-bitmap.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\t\t\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-shortcut.js": {
"title": "$:/core/modules/widgets/edit-shortcut.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"title": "$:/core/modules/widgets/edit-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"title": "$:/core/modules/widgets/edit.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\tthis.editFocus = this.getAttribute(\"focus\",\"\");\n\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\");\n\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: this.parseTreeNode.attributes,\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"title": "$:/core/modules/widgets/element.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\t// Neuter blacklisted elements\n\tthis.tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(this.tag) !== -1) {\n\t\tthis.tag = \"safe-\" + this.tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(this.tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\tthis.tag = \"h\" + headingLevel;\n\t}\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Invoke the th-rendering-element hook\n\tvar parseTreeNodes = $tw.hooks.invokeHook(\"th-rendering-element\",null,this);\n\tthis.isReplaced = !!parseTreeNodes;\n\tif(parseTreeNodes) {\n\t\t// Use the parse tree nodes provided by the hook\n\t\tthis.makeChildWidgets(parseTreeNodes);\n\t\tthis.renderChildren(this.parentDomNode,null);\n\t\treturn;\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n\t// Create the DOM node and render children\n\tvar domNode = this.document.createElementNS(this.namespace,this.tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\tif(!this.isReplaced) {\n\t\t\t// Update our attributes\n\t\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\t\t\t\n\t\t} else {\n\t\t\t// If we were replaced then completely refresh ourselves\n\t\t\treturn this.refreshSelf();\n\t\t}\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"title": "$:/core/modules/widgets/encrypt.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"title": "$:/core/modules/widgets/entity.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/eventcatcher.js": {
"title": "$:/core/modules/widgets/eventcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/eventcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nEvent handler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EventWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEventWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEventWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.elementTag && $tw.config.htmlUnsafeElements.indexOf(this.elementTag) === -1) {\n\t\ttag = this.elementTag;\n\t}\t\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tthis.assignDomNodeClasses();\t\n\t// Add our event handler\n\t$tw.utils.each(this.types,function(type) {\n\t\tdomNode.addEventListener(type,function(event) {\n\t\t\tvar selector = self.getAttribute(\"selector\"),\n\t\t\t\tactions = self.getAttribute(\"actions-\"+type),\n\t\t\t\tselectedNode = event.target,\n\t\t\t\tselectedNodeRect,\n\t\t\t\tcatcherNodeRect,\n\t\t\t\tvariables = {};\n\t\t\tif(selector) {\n\t\t\t\t// Search ancestors for a node that matches the selector\n\t\t\t\twhile(!selectedNode.matches(selector) && selectedNode !== domNode) {\n\t\t\t\t\tselectedNode = selectedNode.parentNode;\n\t\t\t\t}\n\t\t\t\t// If we found one, copy the attributes as variables, otherwise exit\n\t\t\t\tif(selectedNode.matches(selector)) {\n\t\t\t\t\t$tw.utils.each(selectedNode.attributes,function(attribute) {\n\t\t\t\t\t\tvariables[\"dom-\" + attribute.name] = attribute.value.toString();\n\t\t\t\t\t});\n\t\t\t\t\t//Add a variable with a popup coordinate string for the selected node\n\t\t\t\t\tvariables[\"tv-popup-coords\"] = \"(\" + selectedNode.offsetLeft + \",\" + selectedNode.offsetTop +\",\" + selectedNode.offsetWidth + \",\" + selectedNode.offsetHeight + \")\";\n\t\t\t\t\t\n\t\t\t\t\t//Add variables for offset of selected node\n\t\t\t\t\tvariables[\"tv-selectednode-posx\"] = selectedNode.offsetLeft.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-posy\"] = selectedNode.offsetTop.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-width\"] = selectedNode.offsetWidth.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-height\"] = selectedNode.offsetHeight.toString();\n\n\t\t\t\t\t//Add variables for event X and Y position relative to selected node\n\t\t\t\t\tselectedNodeRect = selectedNode.getBoundingClientRect();\t\t\t\t\n\t\t\t\t\tvariables[\"event-fromselected-posx\"] = (event.clientX - selectedNodeRect.left).toString();\n\t\t\t\t\tvariables[\"event-fromselected-posy\"] = (event.clientY - selectedNodeRect.top).toString();\n\n\t\t\t\t\t//Add variables for event X and Y position relative to event catcher node\n\t\t\t\t\tcatcherNodeRect = self.domNode.getBoundingClientRect();\n\t\t\t\t\tvariables[\"event-fromcatcher-posx\"] = (event.clientX - catcherNodeRect.left).toString();\n\t\t\t\t\tvariables[\"event-fromcatcher-posy\"] = (event.clientY - catcherNodeRect.top).toString();\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Execute our actions with the variables\n\t\t\tif(actions) {\n\t\t\t\t// Add a variable for the modifier key\n\t\t\t\tvariables.modifier = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\t\t// Add a variable for the mouse button\n\t\t\t\tif(\"button\" in event) {\n\t\t\t\t\tif(event.button === 0) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"left\";\n\t\t\t\t\t} else if(event.button === 1) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"middle\";\n\t\t\t\t\t} else if(event.button === 2) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"right\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvariables[\"event-type\"] = event.type.toString();\n\t\t\t\tif(typeof event.detail === \"object\" && !!event.detail) {\n\t\t\t\t\t$tw.utils.each(event.detail,function(detailValue,detail) {\n\t\t\t\t\t\tvariables[\"event-detail-\" + detail] = detailValue.toString();\n\t\t\t\t\t});\n\t\t\t\t} else if(!!event.detail) {\n\t\t\t\t\tvariables[\"event-detail\"] = event.detail.toString();\n\t\t\t\t}\n\t\t\t\tself.invokeActionString(actions,self,event,variables);\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},false);\n\t});\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEventWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes that require a refresh on change\n\tthis.types = this.getAttribute(\"events\",\"\").split(\" \");\n\tthis.elementTag = this.getAttribute(\"tag\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nEventWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-eventcatcher\");\n\tthis.domNode.className = classes.join(\" \");\t\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEventWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"events\"] || changedAttributes[\"tag\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.eventcatcher = EventWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"title": "$:/core/modules/widgets/fieldmangler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"title": "$:/core/modules/widgets/fields.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.sort = this.getAttribute(\"sort\",\"yes\") === \"yes\";\n\tthis.sortReverse = this.getAttribute(\"sortReverse\",\"no\") === \"yes\";\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.include = this.getAttribute(\"include\",null);\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\n\t// Get the inclusion and exclusion list\n\tvar excludeArr = (this.exclude) ? this.exclude.split(\" \") : [\"text\"];\n\t// Include takes precedence\n\tvar includeArr = (this.include) ? this.include.split(\" \") : null;\n\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tif (includeArr) { // Include takes precedence\n\t\t\tfor(var i=0; i<includeArr.length; i++) {\n\t\t\t\tif(tiddler.fields[includeArr[i]]) {\n\t\t\t\t\tfields.push(includeArr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\tif(excludeArr.indexOf(fieldName) === -1) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.sort) fields.sort();\n\t\tif (this.sortReverse) fields.reverse();\n\t\tfor(var f=0, fmax=fields.length; f<fmax; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tvar row = this.template,\n\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\tif(reMatch) {\n\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\ttext.push(row);\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\n\t\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\n\t\tchangedTiddlers[this.tiddlerTitle] || changedAttributes.stripTitlePrefix) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/image.js": {
"title": "$:/core/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/importvariables.js": {
"title": "$:/core/modules/widgets/importvariables.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar widgetPointer = this;\n\t// Got to flush all the accumulated variables\n\tthis.variables = new this.variablesConstructor();\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = widgetPointer.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tvar node = {\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t};\n\t\t\t\tif (parseTreeNode.isMacroDefinition) {\n\t\t\t\t\t// Macro definitions can be folded into\n\t\t\t\t\t// current widget instead of adding\n\t\t\t\t\t// another link to the chain.\n\t\t\t\t\tvar widget = widgetPointer.makeChildWidget(node);\n\t\t\t\t\twidget.computeAttributes();\n\t\t\t\t\twidget.execute();\n\t\t\t\t\t// We SHALLOW copy over all variables\n\t\t\t\t\t// in widget. We can't use\n\t\t\t\t\t// $tw.utils.assign, because that copies\n\t\t\t\t\t// up the prototype chain, which we\n\t\t\t\t\t// don't want.\n\t\t\t\t\t$tw.utils.each(Object.keys(widget.variables), function(key) {\n\t\t\t\t\t\twidgetPointer.variables[key] = widget.variables[key];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twidgetPointer.children = [widgetPointer.makeChildWidget(node)];\n\t\t\t\t\t// No more regenerating children for\n\t\t\t\t\t// this widget. If it needs to refresh,\n\t\t\t\t\t// it'll do so along with the the whole\n\t\t\t\t\t// importvariable tree.\n\t\t\t\t\tif (widgetPointer != this) {\n\t\t\t\t\t\twidgetPointer.makeChildWidgets = function(){};\n\t\t\t\t\t}\n\t\t\t\t\twidgetPointer = widgetPointer.children[0];\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\n\tif (widgetPointer != this) {\n\t\twidgetPointer.parseTreeNode.children = this.parseTreeNode.children;\n\t} else {\n\t\twidgetPointer.makeChildWidgets();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"title": "$:/core/modules/widgets/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tvar handled = self.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tif(handled || self.actions || self.message) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"title": "$:/core/modules/widgets/link.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"}),\n\t\tdomNode = this.document.createElementNS(namespace,tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tvar namespaceHref = (namespace === \"http://www.w3.org/2000/svg\") ? \"http://www.w3.org/1999/xlink\" : undefined;\n\t\tdomNode.setAttributeNS(namespaceHref,\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey,\n\t\tevent: event\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"title": "$:/core/modules/widgets/linkcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo, modifier: modifierKey});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"title": "$:/core/modules/widgets/list.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar parser,\n\t\temptyMessage = this.getAttribute(\"emptyMessage\",\"\");\n\t// this.wiki.parseText() calls \n\t// new Parser(..), which should only be done, if needed, because it's heavy!\n\tif (emptyMessage === \"\") {\n\t\treturn [];\n\t}\n\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/log.js": {
"title": "$:/core/modules/widgets/log.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/log.js\ntype: application/javascript\nmodule-type: widget-subclass\n\nWidget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.baseClass = \"action-log\";\n\nexports.name = \"log\";\n\nexports.constructor = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n}\n\nexports.prototype = {};\n\nexports.prototype.render = function(event) {\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).render.call(this,event);\t\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).log.call(this);\n}\n\n})();",
"type": "application/javascript",
"module-type": "widget-subclass"
},
"$:/core/modules/widgets/macrocall.js": {
"title": "$:/core/modules/widgets/macrocall.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\t// Check if we've already cached parsing this macro\n\t\tvar mode = this.parseTreeNode.isBlock ? \"blockParser\" : \"inlineParser\",\n\t\t\tparser;\n\t\tif(variableInfo.srcVariable && variableInfo.srcVariable[mode]) {\n\t\t\tparser = variableInfo.srcVariable[mode];\n\t\t} else {\n\t\t\tparser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\t\tif(variableInfo.isCacheable && variableInfo.srcVariable) {\n\t\t\t\tvariableInfo.srcVariable[mode] = parser;\n\t\t\t}\n\t\t}\n\t\tvar parseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else if(this.renderOutput === \"text/raw\") {\n\t\tparseTreeNodes = [{type: \"text\", text: text}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"title": "$:/core/modules/widgets/navigator.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\tthis.story = new $tw.Story({\n\t\twiki: this.wiki,\n\t\tstoryTitle: this.storyTitle,\n\t\thistoryTitle: this.historyTitle\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\t\t\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.story.addToStory(title,fromTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.story.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\t\ttext: \"\",\n\t\t\t},\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler,tiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTitle = event.importTitle ? event.importTitle : IMPORT_TITLE,\n\t\timportTiddler = this.wiki.getTiddler(importTitle),\n\t\timportData = this.wiki.getTiddlerData(importTitle,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: importTitle,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t\tnewFields[\"suppressed-\" + title] = \"yes\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tvar autoOpenOnImport = event.autoOpenOnImport ? event.autoOpenOnImport : this.getVariable(\"tv-auto-open-on-import\"); \n\tif(autoOpenOnImport !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(importTitle) === -1) {\n\t\t\tstoryList.unshift(importTitle);\n\t\t}\n\t\t// And to history\n\t\thistory.push(importTitle);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tif($tw.utils.hop(importTiddler.fields,[\"rename-\" + title])) {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields,{title : importTiddler.fields[\"rename-\" + title]});\n\t\t\t} else {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\t}\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddler.fields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar options = {},\n\t\tparamObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\toptions.dontRenameInTags = (paramObject.renameInTags === \"false\" || paramObject.renameInTags === \"no\") ? true : false;\n\toptions.dontRenameInLists = (paramObject.renameInLists === \"false\" || paramObject.renameInLists === \"no\") ? true : false;\n\tthis.wiki.renameTiddler(from,to,options);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"title": "$:/core/modules/widgets/password.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/qualify.js": {
"title": "$:/core/modules/widgets/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"title": "$:/core/modules/widgets/radio.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n\t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n\t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n\t// Trigger actions\n\tif(this.radioActions) {\n\t\tthis.invokeActionString(this.radioActions,this,event,{\"actionValue\": this.radioValue});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\tthis.radioActions = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(($tw.utils.count(changedAttributes) > 0) || changedTiddlers[this.radioTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/range.js": {
"title": "$:/core/modules/widgets/range.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name:\"mousedown\", handlerObject:this, handlerMethod:\"handleMouseDownEvent\"},\n\t\t{name:\"mouseup\", handlerObject:this, handlerMethod:\"handleMouseUpEvent\"},\n\t\t{name:\"change\", handlerObject:this, handlerMethod:\"handleChangeEvent\"},\n\t\t{name:\"input\", handlerObject:this, handlerMethod:\"handleInputEvent\"},\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tfieldName = this.tiddlerField,\n\t\tvalue = this.defaultValue;\n\tif(tiddler) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue);\n\t\t} else {\n\t\t\tif($tw.utils.hop(tiddler.fields,fieldName)) {\n\t\t\t\tvalue = tiddler.fields[fieldName] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.defaultValue;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.getActionVariables = function(options) {\n\toptions = options || {};\n\tvar hasChanged = (this.startValue !== this.inputDomNode.value) ? \"yes\" : \"no\";\n\t// Trigger actions. Use variables = {key:value, key:value ...}\n\t// the \"value\" is needed.\n\treturn $tw.utils.extend({\"actionValue\": this.inputDomNode.value, \"actionValueHasChanged\": hasChanged}, options);\n}\n\n// actionsStart\nRangeWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.mouseDown = true; // TODO remove once IE is gone.\n\tthis.startValue = this.inputDomNode.value; // TODO remove this line once IE is gone!\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseDown) {\n\t\tvar variables = this.getActionVariables() // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsMouseDown,this,event,variables);\n\t}\n}\n\n// actionsStop\nRangeWidget.prototype.handleMouseUpEvent = function(event) {\n\tthis.mouseDown = false; // TODO remove once IE is gone.\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseUp) {\n\t\tvar variables = this.getActionVariables()\n\t\tthis.invokeActionString(this.actionsMouseUp,this,event,variables);\n\t}\n\t// TODO remove the following if() once IE is gone!\n\tif ($tw.browser.isIE) {\n\t\tif (this.startValue !== this.inputDomNode.value) {\n\t\t\tthis.handleChangeEvent(event);\n\t\t\tthis.startValue = this.inputDomNode.value;\n\t\t}\n\t}\n}\n\nRangeWidget.prototype.handleChangeEvent = function(event) {\n\tif (this.mouseDown) { // TODO refactor this function once IE is gone.\n\t\tthis.handleInputEvent(event);\n\t}\n};\n\nRangeWidget.prototype.handleInputEvent = function(event) {\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsInput) {\n\t\t// \"tiddler\" parameter may be missing. See .execute() below\n\t\tvar variables = this.getActionVariables({\"actionValueHasChanged\": \"yes\"}) // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsInput,this,event,variables);\n\t}\n};\n\nRangeWidget.prototype.handleEvent = function(event) {\n\tif(this.getValue() !== this.inputDomNode.value) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,\"\",this.tiddlerIndex,this.inputDomNode.value);\n\t\t} else {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// TODO remove the next 1 lines once IE is gone!\n\tthis.mouseUp = true; // Needed for IE10\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\",\"text\");\n\tthis.tiddlerIndex = this.getAttribute(\"index\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\",\"\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Actions since 5.1.23\n\t// Next 2 only fire once!\n\tthis.actionsMouseDown = this.getAttribute(\"actionsStart\",\"\");\n\tthis.actionsMouseUp = this.getAttribute(\"actionsStop\",\"\");\n\t// Input fires very often!\n\tthis.actionsInput = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tvar value = this.getValue();\n\t\t\tif(this.inputDomNode.value !== value) {\n\t\t\t\tthis.inputDomNode.value = value;\n\t\t\t}\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"title": "$:/core/modules/widgets/raw.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"title": "$:/core/modules/widgets/reveal.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"belowright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\t\t\t\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tcase \"aboveleft\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\t\t\t\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\t// class attribute handled in assignDomNodeClasses()\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\tthis.updatePopupPosition = this.getAttribute(\"updatePopupPosition\",\"no\") === \"yes\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\nRevealWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-reveal\");\n\tthis.domNode.className = classes.join(\" \");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if(this.type === \"popup\" && this.updatePopupPosition && (changedTiddlers[this.state] || changedTiddlers[this.stateTitle])) {\n\t\t\tthis.positionPopup(this.domNode);\n\t\t}\n\t\tif(changedAttributes.style) {\n\t\t\tthis.domNode.style = this.getAttribute(\"style\",\"\");\n\t\t}\n\t\tif(changedAttributes[\"class\"]) {\n\t\t\tthis.assignDomNodeClasses();\n\t\t}\t\t\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/scrollable.js": {
"title": "$:/core/modules/widgets/scrollable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tif(event.paramObject && event.paramObject.selector) {\n\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t} else {\n\t\tthis.scrollIntoView(event.target);\t\t\t\n\t}\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\tsrcWindow = element ? element.ownerDocument.defaultView : window;\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nScrollableWidget.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\t\t\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/select.js": {
"title": "$:/core/modules/widgets/select.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tselect.children[i].selected = values.indexOf(select.children[i].value) !== -1\n\t\t}\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex || changedAttributes.selectTooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"title": "$:/core/modules/widgets/set.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"title": "$:/core/modules/widgets/text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"title": "$:/core/modules/widgets/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"title": "$:/core/modules/widgets/transclude.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\tthis.recursionMarker = this.getAttribute(\"recursionMarker\",\"yes\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tif(this.recursionMarker === \"yes\") {\n\t\tthis.setVariable(\"transclusion\",recursionMarker);\n\t}\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/vars.js": {
"title": "$:/core/modules/widgets/vars.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"title": "$:/core/modules/widgets/view.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"title": "$:/core/modules/widgets/widget.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\toriginalValue = variable.value,\n\t\t\tvalue = originalValue,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params,\n\t\t\tsrcVariable: variable,\n\t\t\tisCacheable: originalValue === value\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\tevent.widget = event.widget || this;\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\n/*\nExecute action tiddlers by tag\n*/\nWidget.prototype.invokeActionsByTag = function(tag,event,variables) {\n\tvar self = this;\n\t$tw.utils.each(self.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\tself.invokeActionString(self.wiki.getTiddlerText(title),self,event,variables);\n\t});\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/wikify.js": {
"title": "$:/core/modules/widgets/wikify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki-bulkops.js": {
"title": "$:/core/modules/wiki-bulkops.js",
"text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/wiki.js": {
"title": "$:/core/modules/wiki.js",
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.isBinaryTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x : x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked within the given parse tree\n */\nexports.extractLinks = function(parseTreeRoot) {\n\t// Count up the links\n\tvar links = [],\n\t\tcheckParseTree = function(parseTree) {\n\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcheckParseTree(parseTreeRoot);\n\treturn links;\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\tif(parser) {\n\t\t\treturn self.extractLinks(parser.tree);\n\t\t}\n\t\treturn [];\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinksIndexer = this.getIndexer(\"BacklinksIndexer\"),\n\t\tbacklinks = backlinksIndexer && backlinksIndexer.lookup(targetTitle);\n\n\tif(!backlinks) {\n\t\tbacklinks = [];\n\t\tthis.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self.getTiddlerLinks(title);\n\t\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\t\tbacklinks.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\t// Given a title, this function will place it in the correct location\n\t// within titles.\n\tfunction moveItemInList(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\t// if this title is placed relative\n\t\t\t\t\t// to another title, make sure that\n\t\t\t\t\t// title is placed before we place\n\t\t\t\t\t// this one.\n\t\t\t\t\tmoveItemInList(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\t// Same deal\n\t\t\t\t\tmoveItemInList(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If a new position is specified, let's move it\n\t\t\t\tif (newPos !== -1) {\n\t\t\t\t\t// get its current Pos, and make sure\n\t\t\t\t\t// sure that it's _actually_ in the list\n\t\t\t\t\t// and that it would _actually_ move\n\t\t\t\t\t// (#4275) We don't bother calling\n\t\t\t\t\t// indexOf unless we have a new\n\t\t\t\t\t// position to work with\n\t\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\t\t// move it!\n\t\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tmoveItemInList(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter,spaces) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tspaces = (spaces === undefined) ? $tw.config.preferences.jsonSpaces : spaces,\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,spaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.recursionMarker : optional flag to set a recursion marker, defaults to \"yes\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\trecursionMarker: {\n\t\t\t\t\tname: \"recursionMarker\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: options.recursionMarker || \"yes\"\n\t\t\t\t\t},\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn this.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(!tiddler.hasField(\"_is_skinny\")) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text || \"\";\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\"};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\t\n\tconsole.log(\"$tw.wiki.addToHistory() is deprecated since V5.1.23! Use the this.story.addToHistory() from the story-object!\")\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\n\tconsole.log(\"$tw.wiki.addToStory() is deprecated since V5.1.23! Use the this.story.addToStory() from the story-object!\")\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n// Determine whether a plugin by title is dynamically loadable\nexports.doesPluginRequireReload = function(title) {\n\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\n};\n\n// Determine whether a plugin info structure is dynamically loadable\nexports.doesPluginInfoRequireReload = function(pluginInfo) {\n\tif(pluginInfo) {\n\t\tvar foundModule = false;\n\t\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\n\t\t\tif(tiddler.type === \"application/javascript\" && $tw.utils.hop(tiddler,\"module-type\")) {\n\t\t\t\tfoundModule = true;\n\t\t\t}\n\t\t});\n\t\treturn foundModule;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.slugify = function(title,options) {\n\tvar tiddler = this.getTiddler(title),\n\t\tslug;\n\tif(tiddler && tiddler.fields.slug) {\n\t\tslug = tiddler.fields.slug;\n\t} else {\n\t\tslug = $tw.utils.transliterate(title.toString().toLowerCase()) // Replace diacritics with basic lowercase ASCII\n\t\t\t.replace(/\\s+/g,\"-\") // Replace spaces with -\n\t\t\t.replace(/[^\\w\\-\\.]+/g,\"\") // Remove all non-word chars except dash and dot\n\t\t\t.replace(/\\-\\-+/g,\"-\") // Replace multiple - with single -\n\t\t\t.replace(/^-+/,\"\") // Trim - from start of text\n\t\t\t.replace(/-+$/,\"\"); // Trim - from end of text\n\t}\n\t// If the resulting slug is blank (eg because the title is just punctuation characters)\n\tif(!slug) {\n\t\t// ...then just use the character codes of the title\n\t\tvar result = [];\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tresult.push(char.charCodeAt(0).toString());\n\t\t});\n\t\tslug = result.join(\"-\");\n\t}\n\treturn slug;\n};\n\n})();\n\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Muted": {
"title": "$:/palettes/Muted",
"name": "Muted",
"description": "Bright tiddlers on a muted background",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastLight": {
"title": "$:/palettes/ContrastLight",
"name": "Contrast (Light)",
"description": "High contrast and unambiguous (light version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastDark": {
"title": "$:/palettes/ContrastDark",
"name": "Contrast (Dark)",
"description": "High contrast and unambiguous (dark version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/CupertinoDark": {
"title": "$:/palettes/CupertinoDark",
"tags": "$:/tags/Palette",
"name": "Cupertino Dark",
"description": "A macOS inspired dark palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #FF453A\nalert-border: #FF453A\nalert-highlight: #FFD60A\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #282828\nblockquote-bar: <<colour page-background>>\nbutton-foreground: <<colour background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #FF453A\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour tiddler-info-background>>\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: #3F638B\ndropdown-tab-background: #323232\ndropzone-background: #30D158\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #BF5AF2\nexternal-link-foreground: #32D74B\nforeground: #FFFFFF\nmenubar-background: #464646\nmenubar-foreground: #ffffff\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: #98989D\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #323232\npre-background: #464646\npre-border: transparent\nprimary: #0A84FF\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour background>>\nsidebar-controls-foreground-hover: #FF9F0A\nsidebar-controls-foreground: #8E8E93\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: #3F638B\nsidebar-tab-background: <<colour background>>\nsidebar-tab-border-selected: <<colour background>>\nsidebar-tab-border: <<colour background>>\nsidebar-tab-divider: <<colour background>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: #ffffff\nstatic-alert-foreground: #B4B4B4\ntab-background-selected: #3F638B\ntab-background: <<colour page-background>>\ntab-border-selected: <<colour page-background>>\ntab-border: <<colour page-background>>\ntab-divider: <<colour page-background>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #464646\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #48484A\ntag-foreground: #323232\ntiddler-background: <<colour background>>\ntiddler-border: transparent\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: #48484A\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #1E1E1E\ntiddler-info-border: #1E1E1E\ntiddler-info-tab-background: #3F638B\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: #464646\nselection-background: #3F638B\nselection-foreground: #ffffff\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #3F638B\nwikilist-button-foreground: <<colour foreground>>\nwikilist-button-open: #32D74B\nwikilist-button-open-hover: #32D74B\nwikilist-button-reveal: #0A84FF\nwikilist-button-reveal-hover: #0A84FF\nwikilist-button-remove: #FF453A\nwikilist-button-remove-hover: #FF453A\nwikilist-droplink-dragover: #32D74B\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour foreground>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-url: <<colour muted-foreground>>\n"
},
"$:/palettes/DarkPhotos": {
"title": "$:/palettes/DarkPhotos",
"created": "20150402111612188",
"description": "Good with dark photo backgrounds",
"modified": "20150402112344080",
"name": "DarkPhotos",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/DesertSand": {
"title": "$:/palettes/DesertSand",
"tags": "$:/tags/Palette",
"name": "Desert Sand",
"description": "A desert sand palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #E9E0C7\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour foreground>>\ncode-background: #F3EDDF\ncode-border: #C3BAA1\ncode-foreground: #ab3250\ndiff-delete-background: #bd8b8b\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #91c093\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ad3434\ndownload-background: #6ca16c\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #E9E0C7\ndropdown-tab-background: #BAB29C\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #313163\nexternal-link-foreground: #555592\nforeground: #2D2A23\nmenubar-background: #CDC2A6\nmenubar-foreground: #5A5446\nmessage-background: #ECE5CF\nmessage-border: #D6CBAA\nmessage-foreground: #5f6e7d\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #8A8885\nmodal-footer-background: #CDC2A6\nmodal-footer-border: #9D998E\nmodal-header-border: #9D998E\nmuted-foreground: #9D998E\nnotification-background: #F0E9D7\nnotification-border: #939189\npage-background: #e0d3af\npre-background: #D6CBAA\npre-border: #CDC2A6\nprimary: #5B6F55\nselection-background: #9D947B\nselection-foreground: <<colour foreground>>\nselect-tag-background: #F0E9D7\nselect-tag-foreground: #2D2A23\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #2D2A23\nsidebar-controls-foreground: #867F69\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #867F69\nsidebar-muted-foreground-hover: #706A58\nsidebar-muted-foreground: #B3A98C\nsidebar-tab-background-selected: #e0d3af\nsidebar-tab-background: #A6A193\nsidebar-tab-border-selected: #C3BAA1\nsidebar-tab-border: #C3BAA1\nsidebar-tab-divider: #CDC2A6\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #2D2A23\nsidebar-tiddler-link-foreground-hover: #433F35\nsidebar-tiddler-link-foreground: #706A58\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #A6A193\ntab-background-selected: #E9E0C7\ntab-background: #A6A193\ntab-border-selected: #C3BAA1\ntab-border: #C3BAA1\ntab-divider: #CDC2A6\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #2D2A23\ntable-border: #9D998E\ntable-footer-background: #8A8885\ntable-header-background: #B0AA98\ntag-background: #706A58\ntag-foreground: #E3D7B7\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #9D947B\ntiddler-controls-foreground-selected: #706A58\ntiddler-controls-foreground: #C3BAA1\ntiddler-editor-background: #E9E0C7\ntiddler-editor-border-image: #A6A193\ntiddler-editor-border: #A6A193\ntiddler-editor-fields-even: #D6CBAA\ntiddler-editor-fields-odd: #C3BAA1\ntiddler-info-background: #E3D7B7\ntiddler-info-border: #BAB29C\ntiddler-info-tab-background: #E9E0C7\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #867F69\ntiddler-title-foreground: #374464\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #8A8885\nvery-muted-foreground: #CDC2A6\nwikilist-background: <<colour page-background>>\nwikilist-item: #CDC2A6\nwikilist-info: #161512\nwikilist-title: #433F35\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #706A58\nwikilist-button-open: #7db66a\nwikilist-button-open-hover: #56a556\nwikilist-button-reveal: #5a6c9e\nwikilist-button-reveal-hover: #454591\nwikilist-button-remove: #bc5972\nwikilist-button-remove-hover: #814040\nwikilist-toolbar-background: #CDC2A6\nwikilist-toolbar-foreground: #2D2A23\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #A6A193\nwikilist-button-foreground: #161512\n"
},
"$:/palettes/GruvboxDark": {
"title": "$:/palettes/GruvboxDark",
"name": "Gruvbox Dark",
"description": "Retro groove color scheme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "https://github.com/morhetz/gruvbox",
"text": "alert-background: #cc241d\nalert-border: #cc241d\nalert-highlight: #d79921\nalert-muted-foreground: #504945\nbackground: #3c3836\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #504945\ncode-border: #504945\ncode-foreground: #fb4934\ndiff-delete-background: #fb4934\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #b8bb26\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #fb4934\ndownload-background: #b8bb26\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #665c54\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ebdbb2\ndropdown-tab-background: #665c54\ndropzone-background: #98971a\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #d3869b\nexternal-link-foreground: #8ec07c\nforeground: #fbf1c7\nmenubar-background: #504945\nmenubar-foreground: <<colour foreground>>\nmessage-background: #83a598\nmessage-border: #83a598\nmessage-foreground: #3c3836\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #504945\nmodal-footer-background: #3c3836\nmodal-footer-border: #3c3836\nmodal-header-border: #3c3836\nmuted-foreground: #d5c4a1\nnotification-background: <<colour primary>>\nnotification-border: <<colour primary>>\npage-background: #282828\npre-background: #504945\npre-border: #504945\nprimary: #d79921\nselect-tag-background: #665c54\nselect-tag-foreground: <<colour foreground>>\nselection-background: #458588\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #7c6f64\nsidebar-controls-foreground: #504945\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #fbf1c7\nsidebar-muted-foreground-hover: #7c6f64\nsidebar-muted-foreground: #504945\nsidebar-tab-background-selected: #bdae93\nsidebar-tab-background: #3c3836\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #bdae93\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #282828\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #458588\nsidebar-tiddler-link-foreground: #98971a\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ebdbb2\ntab-background: #665c54\ntab-border-selected: #665c54\ntab-border: #665c54\ntab-divider: #bdae93\ntab-foreground-selected: #282828\ntab-foreground: #ebdbb2\ntable-border: #7c6f64\ntable-footer-background: #665c54\ntable-header-background: #504945\ntag-background: #d3869b\ntag-foreground: #282828\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #7c6f64\ntiddler-controls-foreground-selected: <<colour primary>>\ntiddler-controls-foreground: #665c54\ntiddler-editor-background: #32302f\ntiddler-editor-border-image: #282828\ntiddler-editor-border: #282828\ntiddler-editor-fields-even: #504945\ntiddler-editor-fields-odd: #7c6f64\ntiddler-info-background: #32302f\ntiddler-info-border: #ebdbb2\ntiddler-info-tab-background: #ebdbb2\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #7c6f64\ntiddler-title-foreground: #a89984\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #504945\nvery-muted-foreground: #bdae93\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #acacac\nwikilist-button-foreground: <<colour button-foreground>>\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: <<colour muted-foreground>>\nwikilist-button-open-hover: <<colour primary>>\nwikilist-button-open: <<colour dropzone-background>>\nwikilist-button-remove: <<colour dirty-indicator>>\nwikilist-button-remove-hover: <<colour alert-background>>\nwikilist-droplink-dragover: <<colour dropzone-background>>\nwikilist-button-reveal: <<colour sidebar-tiddler-link-foreground-hover>>\nwikilist-button-reveal-hover: <<colour message-background>>\n"
},
"$:/palettes/Nord": {
"title": "$:/palettes/Nord",
"name": "Nord",
"description": "An arctic, north-bluish color palette.",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
"text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmenubar-background: #2E3440\nmenubar-foreground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nselection-background: #5E81AC\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #D8DEE9\nsidebar-controls-foreground: #4C566A\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #3b4252\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\nwikilist-background: <<colour page-background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-item: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-info: <<colour muted-foreground>>\nwikilist-button-open: #A3BE8C\nwikilist-button-open-hover: #A3BE8C\nwikilist-button-reveal: #81A1C1\nwikilist-button-reveal-hover: #81A1C1\nwikilist-button-remove: #B48EAD\nwikilist-button-remove-hover: #B48EAD\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarFlare": {
"title": "$:/palettes/SolarFlare",
"name": "Solar Flare",
"description": "Warm, relaxing earth colours",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n download-foreground: <<colour background>>\n dragger-foreground: <<colour background>>\n dropdown-background: <<colour background>>\n modal-background: <<colour background>>\n sidebar-foreground-shadow: <<colour background>>\n tiddler-background: <<colour background>>\n tiddler-border: <<colour background>>\n tiddler-link-background: <<colour background>>\n tab-background-selected: <<colour background>>\n dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n dragger-background: <<colour foreground>>\n tab-foreground: <<colour foreground>>\n tab-foreground-selected: <<colour tab-foreground>>\n sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n sidebar-tab-foreground: <<colour tab-foreground>>\n sidebar-button-foreground: <<colour foreground>>\n sidebar-controls-foreground: <<colour foreground>>\n sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n alert-muted-foreground: <<colour base01>>\n: base00\n code-foreground: <<colour base00>>\n message-foreground: <<colour base00>>\n tag-foreground: <<colour base00>>\n: base0\n sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n muted-foreground: <<colour base1>>\n blockquote-bar: <<colour muted-foreground>>\n dropdown-border: <<colour muted-foreground>>\n sidebar-muted-foreground: <<colour muted-foreground>>\n tiddler-title-foreground: <<colour muted-foreground>>\n site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n modal-footer-background: <<colour base2>>\n page-background: <<colour base2>>\n modal-backdrop: <<colour page-background>>\n notification-background: <<colour page-background>>\n code-background: <<colour page-background>>\n code-border: <<colour code-background>>\n pre-background: <<colour page-background>>\n pre-border: <<colour pre-background>>\n sidebar-tab-background-selected: <<colour page-background>>\n table-header-background: <<colour base2>>\n tag-background: <<colour base2>>\n tiddler-editor-background: <<colour base2>>\n tiddler-info-background: <<colour base2>>\n tiddler-info-tab-background: <<colour base2>>\n tab-background: <<colour base2>>\n dropdown-tab-background: <<colour tab-background>>\n: base3\n alert-background: <<colour base3>>\n message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n alert-highlight: <<colour magenta>>\n: violet\n external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n primary: <<colour blue-muted>>\n download-background: <<colour primary>>\n tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n modal-footer-border: <<colour tab-border>>\n modal-header-border: <<colour tab-border>>\n notification-border: <<colour tab-border>>\n sidebar-tab-border: <<colour tab-border>>\n tab-border-selected: <<colour tab-border>>\n sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarizedDark": {
"title": "$:/palettes/SolarizedDark",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision dark colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedDark",
"text": "alert-background: #073642\nalert-border: #93a1a1\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #073642\nblockquote-bar: #d33682\nbutton-background: #073642\nbutton-border: #586e75\nbutton-foreground: #93a1a1\ncode-background: #073642\ncode-border: #586e75\ncode-foreground: #93a1a1\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #073642\ndragger-background: #073642\ndragger-foreground: #839496\ndropdown-background: #073642\ndropdown-border: #93a1a1\ndropdown-tab-background: #002b36\ndropdown-tab-background-selected: #073642\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover:\nexternal-link-foreground-visited: #268bd2\nforeground: #839496\nmessage-background: #002b36\nmessage-border: #586e75\nmessage-foreground: #839496\nmodal-backdrop: #657b83\nmodal-background: #002b36\nmodal-border: #586e75\nmodal-footer-background: #073642\nmodal-footer-border: #586e75\nmodal-header-border: #586e75\nmuted-foreground: #93a1a1\nnotification-background: #002b36\nnotification-border: #586e75\npage-background: #073642\npre-background: inherit\npre-border: #657b83\nprimary: #859900\nselect-tag-background: #002b36\nselect-tag-foreground: #839496\nsidebar-button-foreground: #93a1a1\nsidebar-controls-foreground: #93a1a1\nsidebar-controls-foreground-hover: #eee8d5\nsidebar-foreground: #93a1a1\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #839496\nsidebar-muted-foreground-hover: #93a1a1\nsidebar-tab-background: #002b36\nsidebar-tab-background-selected: #073642\nsidebar-tab-border: #073642\nsidebar-tab-border-selected: #839496\nsidebar-tab-divider: #002b36\nsidebar-tab-foreground: #657b83\nsidebar-tab-foreground-selected: #93a1a1\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #eee8d5\nsite-title-foreground: #d33682\nstatic-alert-foreground: #93a1a1\ntab-background: #073642\ntab-background-selected: #002b36\ntab-border: #586e75\ntab-border-selected: #93a1a1\ntab-divider: #93a1a1\ntab-foreground: #839496\ntab-foreground-selected: #93a1a1\ntable-border: #586e75\ntable-footer-background: #073642\ntable-header-background: #073642\ntag-background: #b58900\ntag-foreground: #002b36\ntiddler-background: #002b36\ntiddler-border: #586e75\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #002b36\ntiddler-editor-border: #073642\ntiddler-editor-border-image: #002b36\ntiddler-editor-fields-even: #002b36\ntiddler-editor-fields-odd: #073642\ntiddler-info-background: #073642\ntiddler-info-border: #657b83\ntiddler-info-tab-background: #002b36\ntiddler-link-background: #002b36\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #839496\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #839496\ntoolbar-close-button: #839496\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #839496\ntoolbar-edit-button: #839496\ntoolbar-info-button: #839496\ntoolbar-new-button: #839496\ntoolbar-options-button: #839496\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #586e75\n"
},
"$:/palettes/SolarizedLight": {
"title": "$:/palettes/SolarizedLight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedLight",
"text": "alert-background: #eee8d5\nalert-border: #586e75\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #eee8d5\nblockquote-bar: #d33682\nbutton-background: #eee8d5\nbutton-border: #93a1a1\nbutton-foreground: #586e75\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #586e75\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #eee8d5\ndragger-background: #eee8d5\ndragger-foreground: #657b83\ndropdown-background: #eee8d5\ndropdown-border: #586e75\ndropdown-tab-background: #fdf6e3\ndropdown-tab-background-selected: #eee8d5\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #268bd2\nforeground: #657b83\nmessage-background: #fdf6e3\nmessage-border: #93a1a1\nmessage-foreground: #657b83\nmodal-backdrop: #839496\nmodal-background: #fdf6e3\nmodal-border: #93a1a1\nmodal-footer-background: #eee8d5\nmodal-footer-border: #93a1a1\nmodal-header-border: #93a1a1\nmuted-foreground: #586e75\nnotification-background: #fdf6e3\nnotification-border: #93a1a1\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #839496\nprimary: #859900\nselect-tag-background: #fdf6e3\nselect-tag-foreground: #657b83\nsidebar-button-foreground: #586e75\nsidebar-controls-foreground: #586e75\nsidebar-controls-foreground-hover: #d33682\nsidebar-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #657b83\nsidebar-muted-foreground-hover: #586e75\nsidebar-tab-background: #fdf6e3\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-border: #eee8d5\nsidebar-tab-border-selected: #657b83\nsidebar-tab-divider: #fdf6e3\nsidebar-tab-foreground: #839496\nsidebar-tab-foreground-selected: #586e75\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #002b36\nsite-title-foreground: #d33682\nstatic-alert-foreground: #586e75\ntab-background: #eee8d5\ntab-background-selected: #fdf6e3\ntab-border: #93a1a1\ntab-border-selected: #586e75\ntab-divider: #586e75\ntab-foreground: #657b83\ntab-foreground-selected: #586e75\ntable-border: #93a1a1\ntable-footer-background: #eee8d5\ntable-header-background: #eee8d5\ntag-background: #b58900\ntag-foreground: #fdf6e3\ntiddler-background: #fdf6e3\ntiddler-border: #93a1a1\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #fdf6e3\ntiddler-editor-border: #eee8d5\ntiddler-editor-border-image: #fdf6e3\ntiddler-editor-fields-even: #fdf6e3\ntiddler-editor-fields-odd: #eee8d5\ntiddler-info-background: #eee8d5\ntiddler-info-border: #839496\ntiddler-info-tab-background: #fdf6e3\ntiddler-link-background: #fdf6e3\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #657b83\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #657b83\ntoolbar-close-button: #657b83\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #657b83\ntoolbar-edit-button: #657b83\ntoolbar-info-button: #657b83\ntoolbar-new-button: #657b83\ntoolbar-options-button: #657b83\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #93a1a1\n"
},
"$:/palettes/SpartanDay": {
"title": "$:/palettes/SpartanDay",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Cold, spartan day colors",
"name": "Spartan Day",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
},
"$:/palettes/SpartanNight": {
"title": "$:/palettes/SpartanNight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Dark spartan colors",
"name": "Spartan Night",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
},
"$:/palettes/Twilight": {
"title": "$:/palettes/Twilight",
"tags": "$:/tags/Palette",
"author": "Thomas Elmiger",
"type": "application/x-tiddler-dictionary",
"name": "Twilight",
"description": "Delightful, soft darkness.",
"text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselection-background:\nselection-foreground:\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\nwikilist-background: #e5e5e5\nwikilist-item: #fff\nwikilist-info: #000\nwikilist-title: #666\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #aaa\nwikilist-button-open: #4fb82b\nwikilist-button-open-hover: green\nwikilist-button-reveal: #5778d8\nwikilist-button-reveal-hover: blue\nwikilist-button-remove: #d85778\nwikilist-button-remove-hover: red\nwikilist-toolbar-background: #d3d3d3\nwikilist-toolbar-foreground: #888\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #acacac\nwikilist-button-foreground: #000\n"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
},
"$:/library/sjcl.js/license": {
"title": "$:/library/sjcl.js/license",
"type": "text/plain",
"text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com --> "
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-raw": {
"title": "$:/core/templates/canonical-uri-external-raw",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-text": {
"title": "$:/core/templates/canonical-uri-external-text",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "<$macrocall $name=\"csvtiddlers\" filter=<<exportFilter>> format=\"quoted-comma-sep\" $output=\"text/raw\"/>\n"
},
"$:/core/templates/exporters/JsonFile": {
"title": "$:/core/templates/exporters/JsonFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/JsonFile}}",
"extension": ".json",
"text": "<$macrocall $name=\"jsontiddlers\" filter=<<exportFilter>> $output=\"text/raw\"/>\n"
},
"$:/core/templates/exporters/StaticRiver": {
"title": "$:/core/templates/exporters/StaticRiver",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/StaticRiver}}",
"extension": ".html",
"text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river tc-static-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/exporters/StaticRiver/Content": {
"title": "$:/core/templates/exporters/StaticRiver/Content",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
},
"$:/core/templates/exporters/TidFile": {
"title": "$:/core/templates/exporters/TidFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/TidFile}}",
"extension": ".tid",
"condition": "[<count>compare:lte[1]]",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
},
"$:/core/save/all-external-js": {
"title": "$:/core/save/all-external-js",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
},
"$:/core/templates/tiddlywiki5.js": {
"title": "$:/core/templates/tiddlywiki5.js",
"text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
},
"$:/core/templates/tiddlywiki5.js/tiddlers": {
"title": "$:/core/templates/tiddlywiki5.js/tiddlers",
"text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n`\n"
},
"$:/core/templates/tiddlywiki5-external-js.html": {
"title": "$:/core/templates/tiddlywiki5-external-js.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"마음의뜰\" />\n<meta name=\"generator\" content=\"마음의뜰(미원)\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
},
"$:/core/templates/html-div-skinny-tiddler": {
"title": "$:/core/templates/html-div-skinny-tiddler",
"text": "<!--\n\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre></pre>\n</div>`\n"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/json-tiddler": {
"title": "$:/core/templates/json-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/raw-static-tiddler": {
"title": "$:/core/templates/raw-static-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-all": {
"title": "$:/core/save/lazy-all",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[is[image]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/server/static.sidebar.wikitext": {
"title": "$:/core/templates/server/static.sidebar.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
},
"$:/core/templates/server/static.tiddler.html": {
"title": "$:/core/templates/server/static.tiddler.html",
"text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
},
"$:/core/templates/server/static.tiddler.wikitext": {
"title": "$:/core/templates/server/static.tiddler.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
},
"$:/core/templates/single.tiddler.window": {
"title": "$:/core/templates/single.tiddler.window",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n<!-- ensure splash screen isn't shown when JS is disabled -->\n`<style>\n.tc-remove-when-wiki-loaded {display: none;}\n</style>`\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river tc-static-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`\n"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n<$list filter={{{ [<skinnySaveTiddlerFilter>] }}} template=\"$:/core/templates/html-div-skinny-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"마음의뜰\" />\n<meta name=\"generator\" content=\"마음의뜰(미원)\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AboveStory/tw2-plugin-check": {
"title": "$:/core/ui/AboveStory/tw2-plugin-check",
"tags": "$:/tags/AboveStory",
"text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/Actions/new-image": {
"title": "$:/core/ui/Actions/new-image",
"tags": "$:/tags/Actions",
"description": "create a new image tiddler",
"text": "\\define get-type()\nimage/$(imageType)$\n\\end\n\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars imageType={{$:/config/NewImageType}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>> tags=<<get-tags>>/>\n</$vars>\n"
},
"$:/core/ui/Actions/new-journal": {
"title": "$:/core/ui/Actions/new-journal",
"tags": "$:/tags/Actions",
"description": "create a new journal tiddler",
"text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
},
"$:/core/ui/Actions/new-tiddler": {
"title": "$:/core/ui/Actions/new-tiddler",
"tags": "$:/tags/Actions",
"description": "create a new empty tiddler",
"text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<get-tags>>/>\n</$vars>\n"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\" \n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/temp/advancedsearch]]\" firstSearchFilterField=\"text\" \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tinputCancelActions=<<cancel-search-actions>>/>\n</$keyboard>\n</$keyboard>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param='.tc-advanced-search input' />\"\"\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"first-search-filter": "[all[shadows]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]",
"text": "\\define lingo-base() $:/language/Search/\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/Shadows]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Standard": {
"title": "$:/core/ui/AdvancedSearch/Standard",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Standard/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define next-search-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/advancedsearch\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"shift-alt-Right\" actions=<<next-search-tab>>>\n<$keyboard key=\"shift-alt-Left\" actions=<<next-search-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"\n\t\tfilterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$vars userInput={{{ [[$:/temp/advancedsearch]get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} searchListState=\"$:/temp/advancedsearch/selected-item\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/advancedsearch\" />\n</$list>\n</$vars>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"first-search-filter": "[is[system]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\",stateTitle,tag,defaultState,currentTabTiddler) <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\"\n\t\ttype=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/System]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"icon": "$:/core/images/advanced-search-button",
"color": "#bbb",
"text": "<div class=\"tc-advanced-search\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" default=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab--1498284803\"/>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$wikify name=\"format\" text=<<lingo Tiddler/DateFormat>>>\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=<<format>>/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</$wikify>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/BinaryWarning": {
"title": "$:/core/ui/BinaryWarning",
"text": "\\define lingo-base() $:/language/BinaryWarning/\n<<lingo Prompt>>\n"
},
"$:/core/ui/Components/plugin-info": {
"title": "$:/core/ui/Components/plugin-info",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1>\n''<$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}}/>'': <$view field=\"description\"><$view field=\"title\"/></$view> $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
},
"$:/core/ui/Components/tag-link": {
"title": "$:/core/ui/Components/tag-link",
"text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/TiddlerFields\" explicitState=\"$:/state/tab--959111941\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Theme\" explicitState=\"$:/state/tab--1963855381\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-advanced-search input\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewTiddler/Tags\"><<lingo NewTiddler/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewTiddler/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewJournal/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/AutoFocus\"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
},
"$:/core/ui/ControlPanel/EditorTypes": {
"title": "$:/core/ui/ControlPanel/EditorTypes",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Info": {
"title": "$:/core/ui/ControlPanel/Info",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Info/Caption}}",
"text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Basics\" explicitState=\"$:/state/tab--2112689675\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/KeyboardShortcuts": {
"title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n<small>{{$:/core/images/close-button}}</small>\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Modals/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
"subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
"text": "\\define install-plugin-actions()\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$set name=\"url\" value={{!!url}}>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url=<<url>> title=<<dependency>>/>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define install-plugin-button()\n<div>\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$set name=\"reinstall-type\" value={{{ [<libraryVersion>compare:version:eq<installedVersion>then[tc-reinstall]] [<libraryVersion>compare:version:gt<installedVersion>then[tc-reinstall-upgrade]] [<libraryVersion>compare:version:lt<installedVersion>then[tc-reinstall-downgrade]] }}}>\n<$button actions=<<install-plugin-actions>> class={{{ [<assetInfo>get[original-title]has[version]then<reinstall-type>] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>\n{{$:/core/images/download-button}}\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\">\n<$list filter=\"[<libraryVersion>compare:version:gt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[<libraryVersion>compare:version:lt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\">\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\n</$list>\n\"\"\">\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\n</$list>\n</$list>\n</$button>\n<div>\n</div>\n<$reveal stateTitle=<<assetInfo>> stateField=\"requires-reload\" type=\"match\" text=\"yes\">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>\n</$set>\n</$set>\n</$set>\n</div>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1><strong><$text text={{{ [<assetInfo>get[name]] ~[<assetInfo>get[original-title]split[/]last[1]] }}}/></strong>: <$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-buttons\">\n<<install-plugin-button>>\n</div>\n</div>\n<$set name=\"original-title\" value={{{ [<assetInfo>get[original-title]] }}}>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]] ~[<assetInfo>get[original-title]!is[tiddler]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]!is[tiddler]]\">\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\n</$list>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]\" variable=\"ignore\">\n<div>\n{{$:/language/ControlPanel/Plugins/AlsoRequires}}\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$text text=<<dependency>>/>\n</$list>\n</div>\n</$list>\n</$set>\n</div>\n</$list>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-sub-plugins\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[name]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n</$list>\n</div>\n</$reveal>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<$reveal type=\"nomatch\" text=\"yes\" state=<<popup-state>> tag=\"div\" class=\"tc-plugin-info-sub-plugin-indicator\">\n<$wikify name=\"count\" text=\"\"\"<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>]\"/>\"\"\">\n<$button class=\"tc-btn-invisible\" set=<<popup-state>> setTo=\"yes\">\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\n</$button>\n</$wikify>\n</$reveal>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$list filter=\"[<currentTiddler>get[enabled]else[yes]match[yes]]\" variable=\"ignore\">\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n</$list>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[name]]\" variable=\"assetInfo\">\n<$list filter=\"[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]\" variable=\"ignore\"><!-- Hide sub-plugins if we're not searching -->\n<<display-plugin-info \"$type$\">>\n</$list>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<$set name=\"transclusion\" value=<<connectionTiddler>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Updates]] [[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$set>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<div class=\"tc-tab-set\">\n<$set name=\"defaultTab\" value={{{ [all[tiddlers+shadows]tag[$:/tags/PluginLibrary]] }}}>\n<div class=\"tc-tab-buttons\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$button set=<<qualify \"$:/state/addplugins/tab\">> setTo=<<currentTiddler>> default=<<defaultTab>> selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\"/>\n</$set>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$reveal type=\"match\" state=<<qualify \"$:/state/addplugins/tab\">> text=<<currentTiddler>> default=<<defaultTab>>>\n<h2><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link></h2>\n//<$view field=\"url\"/>//\n<$transclude mode=\"block\"/>\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n<<display-server-connection>>\n</$reveal>\n</$list>\n</div>\n</$set>\n</div>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
},
"$:/core/ui/ControlPanel/Palette": {
"title": "$:/core/ui/ControlPanel/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Parsing": {
"title": "$:/core/ui/ControlPanel/Parsing",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
},
"$:/core/ui/ControlPanel/Plugins/Add/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
"text": "<<display-server-assets language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
"text": "<<display-server-assets plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
"text": "<<display-server-assets theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Updates": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Updates",
"caption": "<$importvariables filter=\"$:/core/ui/ControlPanel/Plugins/Add/Updates\">{{$:/language/ControlPanel/Plugins/Updates/Caption}} (<<update-count>>)</$importvariables>",
"text": "\\define each-updateable-plugin(body)\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}sort[title]]\" variable=\"assetInfo\">\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$list filter=\"[<assetInfo>get[original-title]has[version]!version<libraryVersion>]\" variable=\"ignore\">\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$list filter=\"[<installedversion>!match<libraryVersion>]\" variable=\"ignore\">\n$body$\n</$list>\n</$set>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define update-all-actions()\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<<install-plugin-actions>>\n\"\"\"/>\n\\end\n\n\\define update-count()\n<$wikify name=\"count-filter\" text=<<each-updateable-plugin \"[[<$text text=<<assetInfo>>/>]]\">>><$count filter=<<count-filter>>/></$wikify>\n\\end\n\n<$button actions=<<update-all-actions>> class=\"tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\">\n{{$:/core/images/download-button}} {{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\n</$button>\n\n<div class=\"tc-plugin-library-listing\">\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<$macrocall $name=\"display-plugin-info\" type={{{ [<assetInfo>get[original-plugin-type]] }}}/>\n\"\"\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Plugins/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
"text": "<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
"text": "<<plugin-table plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
"text": "<<plugin-table theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[name]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<$macrocall $name=\"tabs\" tabsList=\"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" default=\"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\" explicitState=\"$:/state/tab--86143343\"/>\n"
},
"$:/core/ui/ControlPanel/Saving/DownloadSaver": {
"title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Saving/GitHub": {
"title": "$:/core/ui/ControlPanel/Saving/GitHub",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/GitLab": {
"title": "$:/core/ui/ControlPanel/Saving/GitLab",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/TiddlySpot": {
"title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define siteURL(path)\nhttp://$(userName)$.tiddlyspot.com/$path$/\n\\end\n\\define siteLink(path)\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<siteURL $path$>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<div class=\"tc-message-box\">\n\n<<lingo ReadOnly>>\n\n</div>\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<siteLink backup>> |\n|<<lingo ControlPanel>> |<<siteLink controlpanel>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>\n"
},
"$:/core/ui/ControlPanel/Saving/Gitea": {
"title": "$:/core/ui/ControlPanel/Saving/Gitea",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~Gitea\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/Gitea/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo Gitea/Password>> |<$password name=\"Gitea\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/Gitea/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/Gitea/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/Gitea/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/Gitea/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/Gitea/ServerURL\" default=\"https://gitea/api/v1\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Saving/General\" explicitState=\"$:/state/tab-2065006209\"/>\n</div>\n"
},
"$:/core/buttonstyles/Borderless": {
"title": "$:/core/buttonstyles/Borderless",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
"text": "tc-btn-invisible"
},
"$:/core/buttonstyles/Boxed": {
"title": "$:/core/buttonstyles/Boxed",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
"text": "tc-btn-boxed"
},
"$:/core/buttonstyles/Rounded": {
"title": "$:/core/buttonstyles/Rounded",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
"text": "tc-btn-rounded"
},
"$:/core/ui/ControlPanel/Settings/CamelCase": {
"title": "$:/core/ui/ControlPanel/Settings/CamelCase",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
"title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
"title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n <option value=\"above\"><<lingo \"OpenAbove\">></option>\n <option value=\"below\"><<lingo \"OpenBelow\">></option>\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/MissingLinks": {
"title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
"title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/TitleLinks": {
"title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Stylesheets": {
"title": "$:/core/ui/ControlPanel/Stylesheets",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
},
"$:/core/ui/ControlPanel/Theme": {
"title": "$:/core/ui/ControlPanel/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
},
"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/PageControls": {
"title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars": {
"title": "$:/core/ui/ControlPanel/Toolbars",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
"text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" class=\"tc-vertical\" explicitState=\"$:/state/tabs/controlpanel/toolbars-1345989671\"/>\n</div>\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"icon": "$:/core/images/options-button",
"color": "#bbb",
"text": "<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Info\" explicitState=\"$:/state/tab-1749438307\"/>\n</div>\n"
},
"$:/core/ui/DefaultSearchResultList": {
"title": "$:/core/ui/DefaultSearchResultList",
"tags": "$:/tags/SearchResults",
"caption": "{{$:/language/Search/DefaultResults/Caption}}",
"first-search-filter": "[!is[system]search:title<userInput>sort[title]limit[250]]",
"second-search-filter": "[!is[system]search<userInput>sort[title]limit[250]]",
"text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[first-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[second-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-secondaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-current": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
"tags": "$:/tags/EditPreview",
"caption": "differences from current",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
"tags": "$:/tags/EditPreview",
"caption": "differences from shadow (if any)",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/output": {
"title": "$:/core/ui/EditTemplate/body/preview/output",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
"text": "\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
},
"$:/state/showeditpreview": {
"title": "$:/state/showeditpreview",
"text": "no"
},
"$:/core/ui/EditTemplate/body/editor": {
"title": "$:/core/ui/EditTemplate/body/editor",
"text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor tc-edit-texteditor-body\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n tabindex={{$:/config/EditTabIndex}}\n focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}\n cancelPopups=\"yes\"\n\n><$set\n\n name=\"targetTiddler\"\n value=<<currentTiddler>>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<<config-visibility-title>>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
},
"$:/core/ui/EditTemplate/body/toolbar/button": {
"title": "$:/core/ui/EditTemplate/body/toolbar/button",
"text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<<toolbar-button-tooltip>>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$list><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n popup=<<dropdown-state>>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button><$reveal\n\n state=<<dropdown-state>>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><div\n\n class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name-wrapper input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define delete-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\n\\define cancel-search-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newFieldNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-state-tiddlers>>\n</$list>\n\\end\n\n\\define cancel-search-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newFieldNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newFieldNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class={{{ [all[current]fields[]] :filter[lookup[$:/config/EditTemplateFields/Visibility/]!match[hide]] +[count[]!match[0]] +[then[tc-edit-fields]] ~[[tc-edit-fields tc-edit-fields-small]] }}}>\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$keyboard key=\"((delete-field))\" actions=\"\"\"<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\"\"\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit tc-big-gap-right\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<$vars refreshTitle=<<qualify \"$:/temp/fieldname/refresh\">> storeTitle=<<newFieldNameInputTiddler>> searchListState=<<newFieldNameSelectionTiddler>>>\n<div class=\"tc-edit-field-add-name-wrapper\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newFieldNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<searchListState>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}}\n\t\tfocus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}} cancelPopups=\"yes\"\n\t\tconfigTiddlerFilter=\"[[$:/config/EditMode/fieldname-filter]]\" inputCancelActions=<<cancel-search-actions>> />\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-primaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-secondaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n</div>\n<span class=\"tc-edit-field-add-value tc-small-gap-right\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</$set>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</$vars>\n</div>\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/shadow": {
"title": "$:/core/ui/EditTemplate/shadow",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:\"tags\")\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view field=\"title\" format=\"text\" />\n<$button class=\"tc-btn-invisible tc-remove-tag-button\"><$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[{!!title}]\"/>{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon,tagField:\"tags\")\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\" tagField=<<__tagField__>>/>\n\\end\n\n\\define edit-tags-template(tagField:\"tags\")\n\\whitespace trim\n<div class=\"tc-edit-tags\">\n<$list filter=\"[list[!!$tagField$]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}} tagField=<<__tagField__>>/>\n</$list>\n<$vars tabIndex={{$:/config/EditTabIndex}} cancelPopups=\"yes\">\n<$macrocall $name=\"tag-picker\" tagField=<<__tagField__>>/>\n</$vars>\n</div>\n\\end\n<$set name=\"saveTiddler\" value=<<currentTiddler>>>\n<$macrocall $name=\"edit-tags-template\" tagField=<<tagField>>/>\n</$set>\n"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"first-search-filter": "[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]sort[description]sort[group-sort]removeprefix[$:/language/Docs/Types/]search<userInput>]",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define input-cancel-actions() <$list filter=\"[<storeTitle>get[text]] [<currentTiddler>get[type]] +[limit[1]]\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\"><$action-sendmessage $message=\"tm-remove-field\" $param=\"type\"/><$action-deletetiddler $filter=\"[<typeInputTiddler>] [<refreshTitle>] [<typeSelectionTiddler>]\"/></$list>\n\\whitespace trim\n<$set name=\"refreshTitle\" value=<<qualify \"$:/temp/type-search/refresh\">>>\n<div class=\"tc-edit-type-selector-wrapper\">\n<em class=\"tc-edit tc-big-gap-right\"><<lingo Type/Prompt>></em>\n<div class=\"tc-type-selector-dropdown-wrapper\">\n<div class=\"tc-type-selector\"><$fieldmangler>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<currentTiddler>> storeTitle=<<typeInputTiddler>> refreshTitle=<<refreshTitle>> selectionStateTitle=<<typeSelectionTiddler>> field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}} cancelPopups=\"yes\" configTiddlerFilter=\"[[$:/core/ui/EditTemplate/type]]\" inputCancelActions=<<input-cancel-actions>>/><$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}<$action-deletetiddler $filter=\"[<storeTitle>] [<refreshTitle>] [<selectionStateTitle>]\"/></$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$set name=\"userInput\" value={{{ [<typeInputTiddler>get[text]] }}}>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]] +[removeprefix[$:/language/Docs/Types/]] +[search<userInput>]\"><span class={{{ [<currentTiddler>addsuffix[-primaryList]] -[<typeSelectionTiddler>get[text]] +[then[]else[tc-list-item-selected]] }}}><$link to={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]get[name]] }}}><$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"description\"/> (<$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"name\"/>)</$link></span>\n</$list>\n</$set>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n</div>\n</div>\n</$set>\n"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define delete-edittemplate-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<newFieldNameInputTiddler>] [<newFieldNameSelectionTiddler>] [<newTagNameTiddler>] [<newTagNameInputTiddler>] [<newTagNameSelectionTiddler>] [<typeInputTiddler>] [<typeSelectionTiddler>]\"/>\n\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n\\define cancel-delete-tiddler-actions(message)\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">> newFieldNameInputTiddler=<<qualify \"$:/temp/NewFieldName/input\">> newFieldNameSelectionTiddler=<<qualify \"$:/temp/NewFieldName/selected-item\">> newTagNameInputTiddler=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddler=<<qualify \"$:/temp/NewTagName/selected-item\">> typeInputTiddler=<<qualify \"$:/temp/Type/input\">> typeSelectionTiddler=<<qualify \"$:/temp/Type/selected-item\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" actions=<<cancel-delete-tiddler-actions \"cancel\">>>\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/Buttons/cancel": {
"title": "$:/core/ui/Buttons/cancel",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
"description": "{{$:/language/Buttons/Cancel/Hint}}",
"text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"cancel\">> tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/delete": {
"title": "$:/core/ui/Buttons/delete",
"tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
"caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
"description": "{{$:/language/Buttons/Delete/Hint}}",
"text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"delete\">> tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/save": {
"title": "$:/core/ui/Buttons/save",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
"description": "{{$:/language/Buttons/Save/Hint}}",
"text": "\\define save-tiddler-button()\n\\whitespace trim\n<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<<save-tiddler-actions>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n\\end\n<<save-tiddler-button>>\n"
},
"$:/core/ui/EditorToolbar/bold": {
"title": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}}",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
},
"$:/core/ui/EditorToolbar/clear-dropdown": {
"title": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
},
"$:/core/ui/EditorToolbar/clear": {
"title": "$:/core/ui/EditorToolbar/clear",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/erase",
"caption": "{{$:/language/Buttons/Clear/Caption}}",
"description": "{{$:/language/Buttons/Clear/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/editor-height-dropdown": {
"title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
},
"$:/core/ui/EditorToolbar/editor-height": {
"title": "$:/core/ui/EditorToolbar/editor-height",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/fixed-height",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
"description": "{{$:/language/Buttons/EditorHeight/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
"dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/excise-dropdown": {
"title": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
},
"$:/core/ui/EditorToolbar/excise": {
"title": "$:/core/ui/EditorToolbar/excise",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/excise",
"caption": "{{$:/language/Buttons/Excise/Caption}}",
"description": "{{$:/language/Buttons/Excise/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
"shortcuts": "((excise))",
"dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/heading-1": {
"title": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}}",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-2": {
"title": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}}",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-3": {
"title": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}}",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}}",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}}",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}}",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
},
"$:/core/ui/EditorToolbar/italic": {
"title": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}}",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
},
"$:/core/ui/EditorToolbar/line-width-dropdown": {
"title": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/line-width": {
"title": "$:/core/ui/EditorToolbar/line-width",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/line-width",
"caption": "{{$:/language/Buttons/LineWidth/Caption}}",
"description": "{{$:/language/Buttons/LineWidth/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>\n"
},
"$:/core/ui/EditorToolbar/link-dropdown": {
"title": "$:/core/ui/EditorToolbar/link-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $filter=\"[<dropdown-state>] [<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\\end\n\n\\define get-focus-selector() [data-tiddler-title=\"$(cssEscapedTitle)$\"] .tc-create-wikitext-link input\n\n\\define cancel-search-actions-inner()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}><$list filter=\"[<searchTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=<<searchTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/></$list></$set>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<storeTitle>!has[text]] +[<searchTiddler>!has[text]]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\"><$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"wrap-selection\" prefix=\"\" suffix=\"\"/></$list>\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" searchListState=<<qualify \"$:/temp/link-search/selected-item\">> refreshTitle=<<qualify \"$:/temp/link-search/refresh\">> storeTitle=<<qualify \"$:/temp/link-search/input\">>>\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">> class=\"tc-create-wikitext-link\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<searchTiddler>> storeTitle=<<storeTitle>>\n\t\tselectionStateTitle=<<searchListState>> refreshTitle=<<refreshTitle>> type=\"search\" filterMinLength=\"1\"\n\t\ttag=\"input\" focus=\"true\" class=\"tc-popup-handle\" inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<add-link-actions>> placeholder={{$:/language/Search/Search}} default=\"\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\" />\n</$keyboard>\n</$keyboard>\n<$reveal tag=\"span\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<<cancel-search-actions>><$set name=\"cssEscapedTitle\" value={{{ [<storyTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-focus-selector>>/></$set>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$vars>\n\n<$reveal tag=\"div\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n<$vars userInput={{{ [<storeTitle>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n\n{{$:/core/ui/SearchResults}}\n\n</$vars>\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>\n"
},
"$:/core/ui/EditorToolbar/link": {
"title": "$:/core/ui/EditorToolbar/link",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/link",
"caption": "{{$:/language/Buttons/Link/Caption}}",
"description": "{{$:/language/Buttons/Link/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((link))",
"dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/linkify": {
"title": "$:/core/ui/EditorToolbar/linkify",
"caption": "{{$:/language/Buttons/Linkify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Linkify/Hint}}",
"icon": "$:/core/images/linkify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((linkify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-bullet": {
"title": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}}",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-number": {
"title": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}}",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-block": {
"title": "$:/core/ui/EditorToolbar/mono-block",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-block",
"caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
"description": "{{$:/language/Buttons/MonoBlock/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((mono-block))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-line": {
"title": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}}",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/core/ui/EditorToolbar/more-dropdown": {
"title": "$:/core/ui/EditorToolbar/more-dropdown",
"text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
},
"$:/core/ui/EditorToolbar/more": {
"title": "$:/core/ui/EditorToolbar/more",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/down-arrow",
"caption": "{{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"condition": "[<targetTiddler>]",
"dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/opacity-dropdown": {
"title": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/EditorToolbar/opacity": {
"title": "$:/core/ui/EditorToolbar/opacity",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/opacity",
"caption": "{{$:/language/Buttons/Opacity/Caption}}",
"description": "{{$:/language/Buttons/Opacity/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
},
"$:/core/ui/EditorToolbar/paint-dropdown": {
"title": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/paint": {
"title": "$:/core/ui/EditorToolbar/paint",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/paint",
"caption": "{{$:/language/Buttons/Paint/Caption}}",
"description": "{{$:/language/Buttons/Paint/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
},
"$:/core/ui/EditorToolbar/picture-dropdown": {
"title": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/picture": {
"title": "$:/core/ui/EditorToolbar/picture",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/picture",
"caption": "{{$:/language/Buttons/Picture/Caption}}",
"description": "{{$:/language/Buttons/Picture/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((picture))",
"dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/preview-type-dropdown": {
"title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
"text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/preview-type": {
"title": "$:/core/ui/EditorToolbar/preview-type",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/chevron-down",
"caption": "{{$:/language/Buttons/PreviewType/Caption}}",
"description": "{{$:/language/Buttons/PreviewType/Hint}}",
"condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
"button-classes": "tc-text-editor-toolbar-item-adjunct",
"dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
},
"$:/core/ui/EditorToolbar/preview": {
"title": "$:/core/ui/EditorToolbar/preview",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/preview-open",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/Preview/Caption}}",
"description": "{{$:/language/Buttons/Preview/Hint}}",
"condition": "[<targetTiddler>]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((preview))",
"text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/quote": {
"title": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}}",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
},
"$:/core/ui/EditorToolbar/rotate-left": {
"title": "$:/core/ui/EditorToolbar/rotate-left",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/rotate-left",
"caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
"description": "{{$:/language/Buttons/RotateLeft/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
},
"$:/core/ui/EditorToolbar/size-dropdown": {
"title": "$:/core/ui/EditorToolbar/size-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> × <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
},
"$:/core/ui/EditorToolbar/size": {
"title": "$:/core/ui/EditorToolbar/size",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/size",
"caption": "{{$:/language/Buttons/Size/Caption}}",
"description": "{{$:/language/Buttons/Size/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/stamp-dropdown": {
"title": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" />\n\n</$transclude>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
},
"$:/core/ui/EditorToolbar/stamp": {
"title": "$:/core/ui/EditorToolbar/stamp",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/stamp",
"caption": "{{$:/language/Buttons/Stamp/Caption}}",
"description": "{{$:/language/Buttons/Stamp/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
"shortcuts": "((stamp))",
"dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/strikethrough": {
"title": "$:/core/ui/EditorToolbar/strikethrough",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/strikethrough",
"caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
"description": "{{$:/language/Buttons/Strikethrough/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((strikethrough))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
},
"$:/core/ui/EditorToolbar/subscript": {
"title": "$:/core/ui/EditorToolbar/subscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/subscript",
"caption": "{{$:/language/Buttons/Subscript/Caption}}",
"description": "{{$:/language/Buttons/Subscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((subscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
},
"$:/core/ui/EditorToolbar/superscript": {
"title": "$:/core/ui/EditorToolbar/superscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/superscript",
"caption": "{{$:/language/Buttons/Superscript/Caption}}",
"description": "{{$:/language/Buttons/Superscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((superscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
},
"$:/core/ui/EditorToolbar/transcludify": {
"title": "$:/core/ui/EditorToolbar/transcludify",
"caption": "{{$:/language/Buttons/Transcludify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Transcludify/Hint}}",
"icon": "$:/core/images/transcludify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((transcludify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
},
"$:/core/ui/EditorToolbar/underline": {
"title": "$:/core/ui/EditorToolbar/underline",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/underline",
"caption": "{{$:/language/Buttons/Underline/Caption}}",
"description": "{{$:/language/Buttons/Underline/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((underline))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/SessionTiddlers": {
"title": "$:/core/Filters/SessionTiddlers",
"tags": "$:/tags/Filter",
"filter": "[haschanged[]]",
"description": "{{$:/language/Filters/SessionTiddlers}}",
"text": ""
},
"$:/core/Filters/ShadowTiddlers": {
"title": "$:/core/Filters/ShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[all[shadows]sort[title]]",
"description": "{{$:/language/Filters/ShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/StoryList": {
"title": "$:/core/Filters/StoryList",
"tags": "$:/tags/Filter",
"filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
"description": "{{$:/language/Filters/StoryList}}",
"text": ""
},
"$:/core/Filters/SystemTags": {
"title": "$:/core/Filters/SystemTags",
"tags": "$:/tags/Filter",
"filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTags}}",
"text": ""
},
"$:/core/Filters/SystemTiddlers": {
"title": "$:/core/Filters/SystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTiddlers}}",
"text": ""
},
"$:/core/Filters/TypedTiddlers": {
"title": "$:/core/Filters/TypedTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Filters/TypedTiddlers}}",
"text": ""
},
"$:/core/ui/ImportListing": {
"title": "$:/core/ui/ImportListing",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField() message-$(payloadTiddler)$\n\n\\define payloadTitleFilter() [<currentTiddler>get<renameField>minlength[1]else<payloadTiddler>]\n\n\\define overWriteWarning()\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\">\n<$text text={{{[subfilter<payloadTitleFilter>!is[tiddler]then[]] ~[<lingo-base>addsuffix[Listing/Rename/OverwriteWarning]get[text]]}}}/>\n</$list>\n\\end\n\n\\define selectionField() selection-$(payloadTiddler)$\n\n\\define renameField() rename-$(payloadTiddler)$\n\n\\define suppressedField() suppressed-$(payloadTiddler)$\n\n\\define newImportTitleTiddler() $:/temp/NewImportTitle-$(payloadTiddler)$\n\n\\define previewPopupState() $(currentTiddler)$!!popup-$(payloadTiddler)$\n\n\\define renameFieldState() $(currentTiddler)$!!state-rename-$(payloadTiddler)$\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table class=\"tc-import-table\">\n<tbody>\n<tr>\n<th align=\"left\">\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr class={{{[<currentTiddler>has<suppressedField>then[tc-row-disabled]] ~[subfilter<payloadTitleFilter>is[tiddler]then[tc-row-warning]] }}}>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\" tag=\"div\" class=\"tc-flex\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown tc-flex-grow-1 tc-word-break\" set=<<previewPopupState>> setTo=\"yes\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}>\n<span class=\"tc-small-gap-right\">{{$:/core/images/right-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\"><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"yes\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/Tooltip]get[text]]}}}>{{$:/core/images/edit-button}}</$button></$list>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n<span class=\"tc-small-gap-right\">{{$:/core/images/down-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n</$reveal>\n</$reveal>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$text text={{{[<lingo-base>addsuffix[Listing/Rename/Prompt]get[text]]}}}/>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n<<overWriteWarning>>\n</td>\n</tr>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"tr\">\n<td colspan=\"3\">\n<div class=\"tc-flex\">\n<$edit-text tiddler=<<newImportTitleTiddler>> default={{{[subfilter<payloadTitleFilter>]}}} tag=\"input\" class=\"tc-import-rename tc-flex-grow-1\"/><span class=\"tc-small-gap-left\"><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/CancelRename]get[text]]}}}>{{$:/core/images/close-button}}<$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button><span class=\"tc-small-gap-right\"/></span><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/ConfirmRename]get[text]]}}}>{{$:/core/images/done-button}}<$action-setfield $field=<<renameField>> $value={{{[<newImportTitleTiddler>get[text]minlength[1]else<payloadTiddler>]}}} /><$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button>\n</div>\n</td>\n</$reveal>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Diff": {
"title": "$:/core/ui/ImportPreviews/Diff",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Diff}}",
"text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
},
"$:/core/ui/ImportPreviews/DiffFields": {
"title": "$:/core/ui/ImportPreviews/DiffFields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
"text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
},
"$:/core/ui/ImportPreviews/Fields": {
"title": "$:/core/ui/ImportPreviews/Fields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Fields}}",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Text": {
"title": "$:/core/ui/ImportPreviews/Text",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Text}}",
"text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
},
"$:/core/ui/ImportPreviews/TextRaw": {
"title": "$:/core/ui/ImportPreviews/TextRaw",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
"text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
},
"$:/core/ui/KeyboardShortcuts/advanced-search": {
"title": "$:/core/ui/KeyboardShortcuts/advanced-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((advanced-search))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/>\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/change-sidebar-layout": {
"title": "$:/core/ui/KeyboardShortcuts/change-sidebar-layout",
"tags": "$:/tags/KeyboardShortcut",
"key": "((change-sidebar-layout))",
"text": "<$list filter=\"[{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}match[fixed-fluid]]\" \nemptyMessage=\"\"\"<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fixed-fluid\"/>\"\"\">\n<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fluid-fixed\"/>\n</$list>\n"
},
"$:/core/ui/KeyboardShortcuts/new-image": {
"title": "$:/core/ui/KeyboardShortcuts/new-image",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-image))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-journal": {
"title": "$:/core/ui/KeyboardShortcuts/new-journal",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-journal))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-tiddler": {
"title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-tiddler))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/save-wiki": {
"title": "$:/core/ui/KeyboardShortcuts/save-wiki",
"tags": "$:/tags/KeyboardShortcut",
"key": "((save-wiki))",
"text": "<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n"
},
"$:/core/ui/KeyboardShortcuts/sidebar-search": {
"title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((sidebar-search))",
"text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
},
"$:/core/ui/KeyboardShortcuts/switcher": {
"title": "$:/core/ui/KeyboardShortcuts/switcher",
"tags": "$:/tags/KeyboardShortcut",
"key": "((layout-switcher))",
"text": "<$action-sendmessage $message=\"tm-show-switcher\" switch=\"layout\"/>"
},
"$:/core/ui/KeyboardShortcuts/toggle-sidebar": {
"title": "$:/core/ui/KeyboardShortcuts/toggle-sidebar",
"tags": "$:/tags/KeyboardShortcut",
"key": "((toggle-sidebar))",
"text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
},
"$:/snippets/LayoutSwitcher": {
"title": "$:/snippets/LayoutSwitcher",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/LayoutSwitcher/Caption}}",
"text": "<$linkcatcher to=\"$:/layout\">\n<div class=\"tc-chooser\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/Layout]] [[$:/core/ui/PageTemplate]] +[!is[draft]sort[name]]\">\n<$list filter=\"[{$:/layout}!has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/layout}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n\"\"\">\n<$set name=\"cls\" filter=\"[all[current]field:title[$:/core/ui/PageTemplate]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n</$list>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link />\n</div>"
},
"$:/Manager/ItemMain/Fields": {
"title": "$:/Manager/ItemMain/Fields",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/Fields}}",
"text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/Manager/ItemMain/RawText": {
"title": "$:/Manager/ItemMain/RawText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/RawText}}",
"text": "<pre><code><$view/></code></pre>\n"
},
"$:/Manager/ItemMain/WikifiedText": {
"title": "$:/Manager/ItemMain/WikifiedText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/WikifiedText}}",
"text": "<$transclude mode=\"block\"/>\n"
},
"$:/Manager/ItemSidebar/Colour": {
"title": "$:/Manager/ItemSidebar/Colour",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Colour}}",
"text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Icon": {
"title": "$:/Manager/ItemSidebar/Icon",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Icon}}",
"text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tags": {
"title": "$:/Manager/ItemSidebar/Tags",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tags}}",
"text": "\\whitespace trim\n\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\" storyview=\"pop\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$fieldmangler>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</$fieldmangler>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tools": {
"title": "$:/Manager/ItemSidebar/Tools",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tools}}",
"text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
},
"$:/Manager": {
"title": "$:/Manager",
"icon": "$:/core/images/list",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Explorer": {
"title": "$:/core/ui/MoreSideBar/Explorer",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Explorer/Caption}}",
"text": "<<tree \"$:/\">>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" default=\"$:/core/ui/MoreSideBar/Plugins/Plugins\" explicitState=\"$:/state/tab-1163638994\"/>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Languages": {
"title": "$:/core/ui/MoreSideBar/Plugins/Languages",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Theme": {
"title": "$:/core/ui/MoreSideBar/Plugins/Theme",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/Buttons/advanced-search": {
"title": "$:/core/ui/Buttons/advanced-search",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
"description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
"text": "\\whitespace trim\n\\define advanced-search-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<advanced-search-button>>>\n<<advanced-search-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/close-all": {
"title": "$:/core/ui/Buttons/close-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
"description": "{{$:/language/Buttons/CloseAll/Hint}}",
"text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/control-panel": {
"title": "$:/core/ui/Buttons/control-panel",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
"description": "{{$:/language/Buttons/ControlPanel/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/encryption": {
"title": "$:/core/ui/Buttons/encryption",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
"description": "{{$:/language/Buttons/Encryption/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/export-page": {
"title": "$:/core/ui/Buttons/export-page",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
"description": "{{$:/language/Buttons/ExportPage/Hint}}",
"text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
},
"$:/core/ui/Buttons/fold-all": {
"title": "$:/core/ui/Buttons/fold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
"description": "{{$:/language/Buttons/FoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/home": {
"title": "$:/core/ui/Buttons/home",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
"description": "{{$:/language/Buttons/Home/Hint}}",
"text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/import": {
"title": "$:/core/ui/Buttons/import",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
"description": "{{$:/language/Buttons/Import/Hint}}",
"text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
},
"$:/core/ui/Buttons/language": {
"title": "$:/core/ui/Buttons/language",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
"description": "{{$:/language/Buttons/Language/Hint}}",
"text": "\\whitespace trim\n\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/manager": {
"title": "$:/core/ui/Buttons/manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
"description": "{{$:/language/Buttons/Manager/Hint}}",
"text": "\\whitespace trim\n\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/more-page-actions": {
"title": "$:/core/ui/Buttons/more-page-actions",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-image": {
"title": "$:/core/ui/Buttons/new-image",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
"description": "{{$:/language/Buttons/NewImage/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\whitespace trim\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
},
"$:/core/ui/Buttons/new-tiddler": {
"title": "$:/core/ui/Buttons/new-tiddler",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
"description": "{{$:/language/Buttons/NewTiddler/Hint}}",
"text": "\\whitespace trim\n<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/palette": {
"title": "$:/core/ui/Buttons/palette",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
"description": "{{$:/language/Buttons/Palette/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/print": {
"title": "$:/core/ui/Buttons/print",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
"description": "{{$:/language/Buttons/Print/Hint}}",
"text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/refresh": {
"title": "$:/core/ui/Buttons/refresh",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Refresh/Hint}}",
"text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save-wiki": {
"title": "$:/core/ui/Buttons/save-wiki",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
"description": "{{$:/language/Buttons/SaveWiki/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
},
"$:/core/ui/Buttons/storyview": {
"title": "$:/core/ui/Buttons/storyview",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
"description": "{{$:/language/Buttons/StoryView/Hint}}",
"text": "\\whitespace trim\n\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/tag-manager": {
"title": "$:/core/ui/Buttons/tag-manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
"description": "{{$:/language/Buttons/TagManager/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/theme": {
"title": "$:/core/ui/Buttons/theme",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
"description": "{{$:/language/Buttons/Theme/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/timestamp": {
"title": "$:/core/ui/Buttons/timestamp",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
"description": "{{$:/language/Buttons/Timestamp/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/unfold-all": {
"title": "$:/core/ui/Buttons/unfold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
"description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/PageTemplate/alerts": {
"title": "$:/core/ui/PageTemplate/alerts",
"tags": "$:/tags/PageTemplate",
"text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
},
"$:/core/ui/PageTemplate/drafts": {
"title": "$:/core/ui/PageTemplate/drafts",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/PageTemplate/pluginreloadwarning": {
"title": "$:/core/ui/PageTemplate/pluginreloadwarning",
"tags": "$:/tags/PageTemplate",
"text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[{$:/status/RequireReloadDueToPluginChange}match[yes]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\" tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"name": "{{$:/language/PageTemplate/Name}}",
"description": "{{$:/language/PageTemplate/Description}}",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-enable-drag-and-drop={{$:/config/DragAndDrop/Enable}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone enable=<<tv-enable-drag-and-drop>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
},
"$:/PaletteManager": {
"title": "$:/PaletteManager",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip={{$:/language/ControlPanel/Palette/Editor/Delete/Hint}} aria-label=<<lingo Delete/Hint>> class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\"><span class=\"tc-small-gap-left\"><<lingo Names/External/Show>></span></$checkbox>\n\n<<palette-manager-table>>\n"
},
"$:/core/ui/PluginInfo": {
"title": "$:/core/ui/PluginInfo",
"text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
},
"$:/core/ui/PluginInfo/Default/contents": {
"title": "$:/core/ui/PluginInfo/Default/contents",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link />\n</li>\n</$list>\n</ul>\n"
},
"$:/core/ui/PluginListItemTemplate": {
"title": "$:/core/ui/PluginListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}><$view field=\"description\"><$view field=\"title\"/></$view></$link>\n</div>"
},
"$:/core/ui/RootTemplate": {
"title": "$:/core/ui/RootTemplate",
"text": "<$transclude tiddler={{{ [{$:/layout}has[text]] ~[[$:/core/ui/PageTemplate]] }}} mode=\"inline\"/>\n\n"
},
"$:/core/ui/SearchResults": {
"title": "$:/core/ui/SearchResults",
"text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/sidebar\"/>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" explicitState=\"$:/state/tab/moresidebar-1850697562\"/>\n</div>\n"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini tc-small-gap-right\">{{$:/core/images/close-button}}</$button><$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
},
"$:/core/ui/SideBarSegments/page-controls": {
"title": "$:/core/ui/SideBarSegments/page-controls",
"tags": "$:/tags/SideBarSegment",
"text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
},
"$:/core/ui/SideBarSegments/search": {
"title": "$:/core/ui/SideBarSegments/search",
"tags": "$:/tags/SideBarSegment",
"text": "\\whitespace trim\n\n\\define count-popup-button()\n\\whitespace trim\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$(searchTiddler)$}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$vars userInput={{{ [<searchTiddler>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} replaceRegexp=\"limit\\[\\d+\\]\">\n<$vars primaryListFilter={{{ [<configTiddler>get[first-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}} secondaryListFilter={{{ [<configTiddler>get[second-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[subfilter<primaryListFilter>] [subfilter<secondaryListFilter>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$vars>\n</$vars>\n</$list>\n</$button>\n\\end\n\n\\define search-results-list()\n\\whitespace trim\n<$vars userInput={{$(searchTiddler)$}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$tiddler tiddler=<<configTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$tiddler>\n\n</$list>\n</$vars>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<searchTiddler>get[text]!match{$:/temp/search}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/search]] [<searchTiddler>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=\"$:/temp/search\" text={{{ [<searchTiddler>get[text]] }}}/><$action-setfield $tiddler=\"$:/temp/search/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define advanced-search-actions() <$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search/input}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/search/input}}/><<delete-state-tiddlers>><$action-navigate $to=\"$:/AdvancedSearch\"/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/><$action-deletetiddler $filter=\"$:/temp/search $:/temp/search/input $:/temp/search/refresh [<searchListState>]\"/>\n\n<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$vars editTiddler=\"$:/temp/search\" searchTiddler=\"$:/temp/search/input\" searchListState=<<qualify \"$:/state/search-list/selected-item\">>>\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"((advanced-search-sidebar))\" actions=<<advanced-search-actions>>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<editTiddler>> storeTitle=<<searchTiddler>> \n\t\tselectionStateTitle=<<searchListState>> refreshTitle=\"$:/temp/search/refresh\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> \n\t\tclass=\"tc-popup-handle\" filterMinLength={{$:/config/Search/MinLength}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> cancelPopups=\"yes\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<<advanced-search-actions>>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>><$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n{{$:/core/images/close-button}}\n</$button>\n<<count-popup-button>>\n</$reveal>\n<$reveal state=<<searchTiddler>> type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<<search-results-list>>\n\n</$reveal>\n\n</$reveal>\n\n</$vars>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-subtitle": {
"title": "$:/core/ui/SideBarSegments/site-subtitle",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-title": {
"title": "$:/core/ui/SideBarSegments/site-title",
"tags": "$:/tags/SideBarSegment",
"text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
},
"$:/core/ui/SideBarSegments/tabs": {
"title": "$:/core/ui/SideBarSegments/tabs",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\" explicitState=\"$:/state/tab/sidebar--595412856\"/>\n\n</div>\n"
},
"$:/core/ui/SwitcherModal": {
"title": "$:/core/ui/SwitcherModal",
"subtitle": "<$text text={{{[<switch>lookup[$:/language/Switcher/Subtitle/]]}}}/>",
"class": "tc-modal-centered",
"text": "<$tiddler tiddler={{{[<switch>lookup[$:/config/SwitcherTargets/]]}}}>\n\n\n<$transclude/>\n\n\n</$tiddler>"
},
"$:/TagManager": {
"title": "$:/TagManager",
"icon": "$:/core/images/tag-button",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n<$link to=\"\"><<lingo Icons/None>></$link>\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n\\whitespace trim\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagPickerTagTemplate": {
"title": "$:/core/ui/TagPickerTagTemplate",
"text": "\\whitespace trim\n<$button class=<<button-classes>> tag=\"a\" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\n<$list filter=\"[<saveTiddler>minlength[1]]\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<tagField>> $subfilter=\"[<tag>]\"/>\n</$list>\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>> preventScroll=\"true\"/>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$list filter=\"[<refreshTitle>minlength[1]]\">\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n<<actions>>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<$wikify name=\"foregroundColor\" text=\"\"\"<$macrocall $name=\"contrastcolour\" target={{!!color}} fallbackTarget=<<fallbackTarget>> colourA=<<colourA>> colourB=<<colourB>>/>\"\"\">\n<span class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n<$transclude tiddler={{!!icon}}/><$view field=\"title\" format=\"text\"/>\n</span>\n</$wikify>\n</$set>\n</$button>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\whitespace trim\n<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
},
"$:/core/ui/TiddlerInfo/Advanced": {
"title": "$:/core/ui/TiddlerInfo/Advanced",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Tools": {
"title": "$:/core/ui/TiddlerInfo/Tools",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>\n"
},
"$:/core/ui/TopBar/menu": {
"title": "$:/core/ui/TopBar/menu",
"tags": "$:/tags/TopRightBar",
"text": "<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]!match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible tc-hide-sidebar-btn\">{{$:/core/images/chevron-right}}</$button>\n</$list>\n<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible tc-show-sidebar-btn\">{{$:/core/images/chevron-left}}</$button>\n</$list>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/plugin": {
"title": "$:/core/ui/ViewTemplate/plugin",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-plugin-info\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n</$reveal>"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}} />\n<$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<$list filter=\"[all[current]has[icon]]~[[$:/config/DefaultTiddlerIcon]has[text]]\">\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}>\n<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>\n</$transclude>\n</span>\n</$list>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
},
"$:/core/ui/ViewTemplate/unfold": {
"title": "$:/core/ui/ViewTemplate/unfold",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n\\define cancel-delete-tiddler-actions(message) <$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
},
"$:/core/ui/Buttons/clone": {
"title": "$:/core/ui/Buttons/clone",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
"description": "{{$:/language/Buttons/Clone/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-others": {
"title": "$:/core/ui/Buttons/close-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
"description": "{{$:/language/Buttons/CloseOthers/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close": {
"title": "$:/core/ui/Buttons/close",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
"description": "{{$:/language/Buttons/Close/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/edit": {
"title": "$:/core/ui/Buttons/edit",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
"description": "{{$:/language/Buttons/Edit/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/export-tiddler": {
"title": "$:/core/ui/Buttons/export-tiddler",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
"description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
"text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
},
"$:/core/ui/Buttons/fold-bar": {
"title": "$:/core/ui/Buttons/fold-bar",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
"description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
"text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
},
"$:/core/ui/Buttons/fold-others": {
"title": "$:/core/ui/Buttons/fold-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
"description": "{{$:/language/Buttons/FoldOthers/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/fold": {
"title": "$:/core/ui/Buttons/fold",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
"description": "{{$:/language/Buttons/Fold/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/info": {
"title": "$:/core/ui/Buttons/info",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
"description": "{{$:/language/Buttons/Info/Hint}}",
"text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
},
"$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/core/ui/Buttons/more-tiddler-actions",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-here": {
"title": "$:/core/ui/Buttons/new-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
"description": "{{$:/language/Buttons/NewHere/Hint}}",
"text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>] [{$:/config/NewTiddler/Tags}]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>\n"
},
"$:/core/ui/Buttons/new-journal-here": {
"title": "$:/core/ui/Buttons/new-journal-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
"description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
"text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>\n"
},
"$:/core/ui/Buttons/open-window": {
"title": "$:/core/ui/Buttons/open-window",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
"description": "{{$:/language/Buttons/OpenWindow/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permalink": {
"title": "$:/core/ui/Buttons/permalink",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
"description": "{{$:/language/Buttons/Permalink/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permaview": {
"title": "$:/core/ui/Buttons/permaview",
"tags": "$:/tags/ViewToolbar $:/tags/PageControls",
"caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
"description": "{{$:/language/Buttons/Permaview/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoFocus": {
"title": "$:/config/AutoFocus",
"text": "title"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#444"
},
"$:/config/BitmapEditor/ImageSizes": {
"title": "$:/config/BitmapEditor/ImageSizes",
"text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3px"
},
"$:/config/BitmapEditor/LineWidths": {
"title": "$:/config/BitmapEditor/LineWidths",
"text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
},
"$:/config/BitmapEditor/Opacities": {
"title": "$:/config/BitmapEditor/Opacities",
"text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
},
"$:/config/BitmapEditor/Opacity": {
"title": "$:/config/BitmapEditor/Opacity",
"text": "1.0"
},
"$:/config/DefaultMoreSidebarTab": {
"title": "$:/config/DefaultMoreSidebarTab",
"text": "$:/core/ui/MoreSideBar/Tags"
},
"$:/config/DefaultSidebarTab": {
"title": "$:/config/DefaultSidebarTab",
"text": "$:/core/ui/SideBar/Open"
},
"$:/config/DownloadSaver/AutoSave": {
"title": "$:/config/DownloadSaver/AutoSave",
"text": "no"
},
"$:/config/Drafts/TypingTimeout": {
"title": "$:/config/Drafts/TypingTimeout",
"text": "400"
},
"$:/config/EditMode/fieldname-filter": {
"title": "$:/config/EditMode/fieldname-filter",
"first-search-filter": "[!is[shadow]!is[system]fields[]search:title<userInput>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type",
"second-search-filter": "[fields[]search:title<userInput>sort[]] -[!is[shadow]!is[system]fields[]]"
},
"$:/config/EditTabIndex": {
"title": "$:/config/EditTabIndex",
"text": "1\n"
},
"$:/config/EditTemplateFields/Visibility/title": {
"title": "$:/config/EditTemplateFields/Visibility/title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/tags": {
"title": "$:/config/EditTemplateFields/Visibility/tags",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/text": {
"title": "$:/config/EditTemplateFields/Visibility/text",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/creator": {
"title": "$:/config/EditTemplateFields/Visibility/creator",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/created": {
"title": "$:/config/EditTemplateFields/Visibility/created",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modified": {
"title": "$:/config/EditTemplateFields/Visibility/modified",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modifier": {
"title": "$:/config/EditTemplateFields/Visibility/modifier",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/type": {
"title": "$:/config/EditTemplateFields/Visibility/type",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.title": {
"title": "$:/config/EditTemplateFields/Visibility/draft.title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.of": {
"title": "$:/config/EditTemplateFields/Visibility/draft.of",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/revision": {
"title": "$:/config/EditTemplateFields/Visibility/revision",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/bag": {
"title": "$:/config/EditTemplateFields/Visibility/bag",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/webp": {
"title": "$:/config/EditorTypeMappings/image/webp",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heic": {
"title": "$:/config/EditorTypeMappings/image/heic",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heif": {
"title": "$:/config/EditorTypeMappings/image/heif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/config/Manager/Show": {
"title": "$:/config/Manager/Show",
"text": "tiddlers"
},
"$:/config/Manager/Filter": {
"title": "$:/config/Manager/Filter",
"text": ""
},
"$:/config/Manager/Order": {
"title": "$:/config/Manager/Order",
"text": "forward"
},
"$:/config/Manager/Sort": {
"title": "$:/config/Manager/Sort",
"text": "title"
},
"$:/config/Manager/System": {
"title": "$:/config/Manager/System",
"text": "system"
},
"$:/config/Manager/Tag": {
"title": "$:/config/Manager/Tag",
"text": ""
},
"$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
"title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
"text": "hide"
},
"$:/config/MissingLinks": {
"title": "$:/config/MissingLinks",
"text": "yes"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/NewImageType": {
"title": "$:/config/NewImageType",
"text": "jpeg"
},
"$:/config/OfficialPluginLibrary": {
"title": "$:/config/OfficialPluginLibrary",
"tags": "$:/tags/PluginLibrary",
"url": "https://tiddlywiki.com/library/v5.1.23/index.html",
"caption": "{{$:/language/OfficialPluginLibrary}}",
"text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
},
"$:/config/Navigation/openLinkFromInsideRiver": {
"title": "$:/config/Navigation/openLinkFromInsideRiver",
"text": "below"
},
"$:/config/Navigation/openLinkFromOutsideRiver": {
"title": "$:/config/Navigation/openLinkFromOutsideRiver",
"text": "top"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
"text": "hide"
},
"$:/config/Performance/Instrumentation": {
"title": "$:/config/Performance/Instrumentation",
"text": "no"
},
"$:/config/RegisterPluginType/plugin": {
"title": "$:/config/RegisterPluginType/plugin",
"text": "yes"
},
"$:/config/RegisterPluginType/theme": {
"title": "$:/config/RegisterPluginType/theme",
"text": "no"
},
"$:/config/RegisterPluginType/language": {
"title": "$:/config/RegisterPluginType/language",
"text": "no"
},
"$:/config/RegisterPluginType/info": {
"title": "$:/config/RegisterPluginType/info",
"text": "yes"
},
"$:/config/RegisterPluginType/import": {
"title": "$:/config/RegisterPluginType/import",
"text": "no"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/core/save/all"
},
"$:/config/SaverFilter": {
"title": "$:/config/SaverFilter",
"text": "[all[]] -[prefix[$:/HistoryList]] -[prefix[$:/StoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
},
"$:/config/Search/AutoFocus": {
"title": "$:/config/Search/AutoFocus",
"text": "true"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "3"
},
"$:/config/SearchResults/Default": {
"title": "$:/config/SearchResults/Default",
"text": "$:/core/ui/DefaultSearchResultList"
},
"$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]": {
"title": "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]",
"text": "yes"
},
"$:/config/ShortcutInfo/add-field": {
"title": "$:/config/ShortcutInfo/add-field",
"text": "{{$:/language/EditTemplate/Fields/Add/Button/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search": {
"title": "$:/config/ShortcutInfo/advanced-search",
"text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search-sidebar": {
"title": "$:/config/ShortcutInfo/advanced-search-sidebar",
"text": "{{$:/language/Shortcuts/Input/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/bold": {
"title": "$:/config/ShortcutInfo/bold",
"text": "{{$:/language/Buttons/Bold/Hint}}"
},
"$:/config/ShortcutInfo/cancel-edit-tiddler": {
"title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
"text": "{{$:/language/Buttons/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/change-sidebar-layout": {
"title": "$:/config/ShortcutInfo/change-sidebar-layout",
"text": "{{$:/language/Shortcuts/SidebarLayout/Hint}}"
},
"$:/config/ShortcutInfo/delete-field": {
"title": "$:/config/ShortcutInfo/delete-field",
"text": "{{$:/language/EditTemplate/Field/Remove/Hint}}"
},
"$:/config/ShortcutInfo/excise": {
"title": "$:/config/ShortcutInfo/excise",
"text": "{{$:/language/Buttons/Excise/Hint}}"
},
"$:/config/ShortcutInfo/heading-1": {
"title": "$:/config/ShortcutInfo/heading-1",
"text": "{{$:/language/Buttons/Heading1/Hint}}"
},
"$:/config/ShortcutInfo/heading-2": {
"title": "$:/config/ShortcutInfo/heading-2",
"text": "{{$:/language/Buttons/Heading2/Hint}}"
},
"$:/config/ShortcutInfo/heading-3": {
"title": "$:/config/ShortcutInfo/heading-3",
"text": "{{$:/language/Buttons/Heading3/Hint}}"
},
"$:/config/ShortcutInfo/heading-4": {
"title": "$:/config/ShortcutInfo/heading-4",
"text": "{{$:/language/Buttons/Heading4/Hint}}"
},
"$:/config/ShortcutInfo/heading-5": {
"title": "$:/config/ShortcutInfo/heading-5",
"text": "{{$:/language/Buttons/Heading5/Hint}}"
},
"$:/config/ShortcutInfo/heading-6": {
"title": "$:/config/ShortcutInfo/heading-6",
"text": "{{$:/language/Buttons/Heading6/Hint}}"
},
"$:/config/ShortcutInfo/input-accept": {
"title": "$:/config/ShortcutInfo/input-accept",
"text": "{{$:/language/Shortcuts/Input/Accept/Hint}}"
},
"$:/config/ShortcutInfo/input-accept-variant": {
"title": "$:/config/ShortcutInfo/input-accept-variant",
"text": "{{$:/language/Shortcuts/Input/AcceptVariant/Hint}}"
},
"$:/config/ShortcutInfo/input-cancel": {
"title": "$:/config/ShortcutInfo/input-cancel",
"text": "{{$:/language/Shortcuts/Input/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/input-down": {
"title": "$:/config/ShortcutInfo/input-down",
"text": "{{$:/language/Shortcuts/Input/Down/Hint}}"
},
"$:/config/ShortcutInfo/input-tab-left": {
"title": "$:/config/ShortcutInfo/input-tab-left",
"text": "{{$:/language/Shortcuts/Input/Tab-Left/Hint}}"
},
"$:/config/ShortcutInfo/input-tab-right": {
"title": "$:/config/ShortcutInfo/input-tab-right",
"text": "{{$:/language/Shortcuts/Input/Tab-Right/Hint}}"
},
"$:/config/ShortcutInfo/input-up": {
"title": "$:/config/ShortcutInfo/input-up",
"text": "{{$:/language/Shortcuts/Input/Up/Hint}}"
},
"$:/config/ShortcutInfo/italic": {
"title": "$:/config/ShortcutInfo/italic",
"text": "{{$:/language/Buttons/Italic/Hint}}"
},
"$:/config/ShortcutInfo/layout-switcher": {
"title": "$:/config/ShortcutInfo/layout-switcher",
"text": "{{$:/language/LayoutSwitcher/Description}}"
},
"$:/config/ShortcutInfo/link": {
"title": "$:/config/ShortcutInfo/link",
"text": "{{$:/language/Buttons/Link/Hint}}"
},
"$:/config/ShortcutInfo/linkify": {
"title": "$:/config/ShortcutInfo/linkify",
"text": "{{$:/language/Buttons/Linkify/Hint}}"
},
"$:/config/ShortcutInfo/list-bullet": {
"title": "$:/config/ShortcutInfo/list-bullet",
"text": "{{$:/language/Buttons/ListBullet/Hint}}"
},
"$:/config/ShortcutInfo/list-number": {
"title": "$:/config/ShortcutInfo/list-number",
"text": "{{$:/language/Buttons/ListNumber/Hint}}"
},
"$:/config/ShortcutInfo/mono-block": {
"title": "$:/config/ShortcutInfo/mono-block",
"text": "{{$:/language/Buttons/MonoBlock/Hint}}"
},
"$:/config/ShortcutInfo/mono-line": {
"title": "$:/config/ShortcutInfo/mono-line",
"text": "{{$:/language/Buttons/MonoLine/Hint}}"
},
"$:/config/ShortcutInfo/new-image": {
"title": "$:/config/ShortcutInfo/new-image",
"text": "{{$:/language/Buttons/NewImage/Hint}}"
},
"$:/config/ShortcutInfo/new-journal": {
"title": "$:/config/ShortcutInfo/new-journal",
"text": "{{$:/language/Buttons/NewJournal/Hint}}"
},
"$:/config/ShortcutInfo/new-tiddler": {
"title": "$:/config/ShortcutInfo/new-tiddler",
"text": "{{$:/language/Buttons/NewTiddler/Hint}}"
},
"$:/config/ShortcutInfo/picture": {
"title": "$:/config/ShortcutInfo/picture",
"text": "{{$:/language/Buttons/Picture/Hint}}"
},
"$:/config/ShortcutInfo/preview": {
"title": "$:/config/ShortcutInfo/preview",
"text": "{{$:/language/Buttons/Preview/Hint}}"
},
"$:/config/ShortcutInfo/quote": {
"title": "$:/config/ShortcutInfo/quote",
"text": "{{$:/language/Buttons/Quote/Hint}}"
},
"$:/config/ShortcutInfo/save-tiddler": {
"title": "$:/config/ShortcutInfo/save-tiddler",
"text": "{{$:/language/Buttons/Save/Hint}}"
},
"$:/config/ShortcutInfo/save-wiki": {
"title": "$:/config/ShortcutInfo/save-wiki",
"text": "{{$:/language/Buttons/SaveWiki/Hint}}"
},
"$:/config/ShortcutInfo/sidebar-search": {
"title": "$:/config/ShortcutInfo/sidebar-search",
"text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
},
"$:/config/ShortcutInfo/stamp": {
"title": "$:/config/ShortcutInfo/stamp",
"text": "{{$:/language/Buttons/Stamp/Hint}}"
},
"$:/config/ShortcutInfo/strikethrough": {
"title": "$:/config/ShortcutInfo/strikethrough",
"text": "{{$:/language/Buttons/Strikethrough/Hint}}"
},
"$:/config/ShortcutInfo/subscript": {
"title": "$:/config/ShortcutInfo/subscript",
"text": "{{$:/language/Buttons/Subscript/Hint}}"
},
"$:/config/ShortcutInfo/superscript": {
"title": "$:/config/ShortcutInfo/superscript",
"text": "{{$:/language/Buttons/Superscript/Hint}}"
},
"$:/config/ShortcutInfo/toggle-sidebar": {
"title": "$:/config/ShortcutInfo/toggle-sidebar",
"text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
},
"$:/config/ShortcutInfo/transcludify": {
"title": "$:/config/ShortcutInfo/transcludify",
"text": "{{$:/language/Buttons/Transcludify/Hint}}"
},
"$:/config/ShortcutInfo/underline": {
"title": "$:/config/ShortcutInfo/underline",
"text": "{{$:/language/Buttons/Underline/Hint}}"
},
"$:/config/SwitcherTargets/layout": {
"title": "$:/config/SwitcherTargets/layout",
"text": "$:/snippets/LayoutSwitcher"
},
"$:/config/SwitcherTargets/language": {
"title": "$:/config/SwitcherTargets/language",
"text": "$:/snippets/languageswitcher"
},
"$:/config/SwitcherTargets/palette": {
"title": "$:/config/SwitcherTargets/palette",
"text": "$:/core/ui/ControlPanel/Palette"
},
"$:/config/SwitcherTargets/theme": {
"title": "$:/config/SwitcherTargets/theme",
"text": "$:/core/ui/ControlPanel/Theme"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/core]] -[[$:/library/sjcl.js]] -[prefix[$:/boot/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
},
"$:/config/SyncSystemTiddlersFromServer": {
"title": "$:/config/SyncSystemTiddlersFromServer",
"text": "no"
},
"$:/config/Tags/MinLength": {
"title": "$:/config/Tags/MinLength",
"text": "0"
},
"$:/config/TextEditor/EditorHeight/Height": {
"title": "$:/config/TextEditor/EditorHeight/Height",
"text": "400px"
},
"$:/config/TextEditor/EditorHeight/Mode": {
"title": "$:/config/TextEditor/EditorHeight/Mode",
"text": "auto"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/TiddlerInfo/Mode": {
"title": "$:/config/TiddlerInfo/Mode",
"text": "popup"
},
"$:/config/Tiddlers/TitleLinks": {
"title": "$:/config/Tiddlers/TitleLinks",
"text": "no"
},
"$:/config/Toolbar/ButtonClass": {
"title": "$:/config/Toolbar/ButtonClass",
"text": "tc-btn-invisible"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
"text": "hide"
},
"$:/config/shortcuts-mac/bold": {
"title": "$:/config/shortcuts-mac/bold",
"text": "meta-B"
},
"$:/config/shortcuts-mac/input-tab-left": {
"title": "$:/config/shortcuts-mac/input-tab-left",
"text": "ctrl-Left"
},
"$:/config/shortcuts-mac/input-tab-right": {
"title": "$:/config/shortcuts-mac/input-tab-right",
"text": "ctrl-Right"
},
"$:/config/shortcuts-mac/italic": {
"title": "$:/config/shortcuts-mac/italic",
"text": "meta-I"
},
"$:/config/shortcuts-mac/underline": {
"title": "$:/config/shortcuts-mac/underline",
"text": "meta-U"
},
"$:/config/shortcuts-mac/new-image": {
"title": "$:/config/shortcuts-mac/new-image",
"text": "ctrl-I"
},
"$:/config/shortcuts-mac/new-journal": {
"title": "$:/config/shortcuts-mac/new-journal",
"text": "ctrl-J"
},
"$:/config/shortcuts-mac/new-tiddler": {
"title": "$:/config/shortcuts-mac/new-tiddler",
"text": "ctrl-N"
},
"$:/config/shortcuts-mac/save-wiki": {
"title": "$:/config/shortcuts-mac/save-wiki",
"text": "meta-S"
},
"$:/config/shortcuts-not-mac/bold": {
"title": "$:/config/shortcuts-not-mac/bold",
"text": "ctrl-B"
},
"$:/config/shortcuts-not-mac/italic": {
"title": "$:/config/shortcuts-not-mac/italic",
"text": "ctrl-I"
},
"$:/config/shortcuts-not-mac/underline": {
"title": "$:/config/shortcuts-not-mac/underline",
"text": "ctrl-U"
},
"$:/config/shortcuts-not-mac/new-image": {
"title": "$:/config/shortcuts-not-mac/new-image",
"text": "alt-I"
},
"$:/config/shortcuts-not-mac/new-journal": {
"title": "$:/config/shortcuts-not-mac/new-journal",
"text": "alt-J"
},
"$:/config/shortcuts-not-mac/new-tiddler": {
"title": "$:/config/shortcuts-not-mac/new-tiddler",
"text": "alt-N"
},
"$:/config/shortcuts/add-field": {
"title": "$:/config/shortcuts/add-field",
"text": "enter"
},
"$:/config/shortcuts/advanced-search": {
"title": "$:/config/shortcuts/advanced-search",
"text": "ctrl-shift-A"
},
"$:/config/shortcuts/advanced-search-sidebar": {
"title": "$:/config/shortcuts/advanced-search-sidebar",
"text": "alt-Enter"
},
"$:/config/shortcuts/cancel-edit-tiddler": {
"title": "$:/config/shortcuts/cancel-edit-tiddler",
"text": "escape"
},
"$:/config/shortcuts/change-sidebar-layout": {
"title": "$:/config/shortcuts/change-sidebar-layout",
"text": "shift-alt-Down"
},
"$:/config/shortcuts/delete-field": {
"title": "$:/config/shortcuts/delete-field",
"text": "shift-alt-D"
},
"$:/config/shortcuts/excise": {
"title": "$:/config/shortcuts/excise",
"text": "ctrl-E"
},
"$:/config/shortcuts/sidebar-search": {
"title": "$:/config/shortcuts/sidebar-search",
"text": "ctrl-shift-F"
},
"$:/config/shortcuts/heading-1": {
"title": "$:/config/shortcuts/heading-1",
"text": "ctrl-1"
},
"$:/config/shortcuts/heading-2": {
"title": "$:/config/shortcuts/heading-2",
"text": "ctrl-2"
},
"$:/config/shortcuts/heading-3": {
"title": "$:/config/shortcuts/heading-3",
"text": "ctrl-3"
},
"$:/config/shortcuts/heading-4": {
"title": "$:/config/shortcuts/heading-4",
"text": "ctrl-4"
},
"$:/config/shortcuts/heading-5": {
"title": "$:/config/shortcuts/heading-5",
"text": "ctrl-5"
},
"$:/config/shortcuts/heading-6": {
"title": "$:/config/shortcuts/heading-6",
"text": "ctrl-6"
},
"$:/config/shortcuts/input-accept": {
"title": "$:/config/shortcuts/input-accept",
"text": "Enter"
},
"$:/config/shortcuts/input-accept-variant": {
"title": "$:/config/shortcuts/input-accept-variant",
"text": "ctrl-Enter"
},
"$:/config/shortcuts/input-cancel": {
"title": "$:/config/shortcuts/input-cancel",
"text": "Escape"
},
"$:/config/shortcuts/input-down": {
"title": "$:/config/shortcuts/input-down",
"text": "Down"
},
"$:/config/shortcuts/input-tab-left": {
"title": "$:/config/shortcuts/input-tab-left",
"text": "alt-Left"
},
"$:/config/shortcuts/input-tab-right": {
"title": "$:/config/shortcuts/input-tab-right",
"text": "alt-Right"
},
"$:/config/shortcuts/input-up": {
"title": "$:/config/shortcuts/input-up",
"text": "Up"
},
"$:/config/shortcuts/layout-switcher": {
"title": "$:/config/shortcuts/layout-switcher",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/link": {
"title": "$:/config/shortcuts/link",
"text": "ctrl-L"
},
"$:/config/shortcuts/linkify": {
"title": "$:/config/shortcuts/linkify",
"text": "alt-shift-L"
},
"$:/config/shortcuts/list-bullet": {
"title": "$:/config/shortcuts/list-bullet",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/list-number": {
"title": "$:/config/shortcuts/list-number",
"text": "ctrl-shift-N"
},
"$:/config/shortcuts/mono-block": {
"title": "$:/config/shortcuts/mono-block",
"text": "ctrl-shift-M"
},
"$:/config/shortcuts/mono-line": {
"title": "$:/config/shortcuts/mono-line",
"text": "ctrl-M"
},
"$:/config/shortcuts/picture": {
"title": "$:/config/shortcuts/picture",
"text": "ctrl-shift-I"
},
"$:/config/shortcuts/preview": {
"title": "$:/config/shortcuts/preview",
"text": "alt-P"
},
"$:/config/shortcuts/quote": {
"title": "$:/config/shortcuts/quote",
"text": "ctrl-Q"
},
"$:/config/shortcuts/save-tiddler": {
"title": "$:/config/shortcuts/save-tiddler",
"text": "ctrl+enter"
},
"$:/config/shortcuts/save-wiki": {
"title": "$:/config/shortcuts/save-wiki",
"text": "ctrl-S"
},
"$:/config/shortcuts/stamp": {
"title": "$:/config/shortcuts/stamp",
"text": "ctrl-S"
},
"$:/config/shortcuts/strikethrough": {
"title": "$:/config/shortcuts/strikethrough",
"text": "ctrl-T"
},
"$:/config/shortcuts/subscript": {
"title": "$:/config/shortcuts/subscript",
"text": "ctrl-shift-B"
},
"$:/config/shortcuts/superscript": {
"title": "$:/config/shortcuts/superscript",
"text": "ctrl-shift-P"
},
"$:/config/shortcuts/toggle-sidebar": {
"title": "$:/config/shortcuts/toggle-sidebar",
"text": "alt-shift-S"
},
"$:/config/shortcuts/transcludify": {
"title": "$:/config/shortcuts/transcludify",
"text": "alt-shift-T"
},
"$:/config/ui/EditTemplate": {
"title": "$:/config/ui/EditTemplate",
"text": "$:/core/ui/EditTemplate"
},
"$:/config/ui/ViewTemplate": {
"title": "$:/config/ui/ViewTemplate",
"text": "$:/core/ui/ViewTemplate"
},
"$:/config/WikiParserRules/Inline/wikilink": {
"title": "$:/config/WikiParserRules/Inline/wikilink",
"text": "enable"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch-inner()\n<$set name=\"swatchColour\" value={{##$(colourResolved)$}}>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}>\n<$set name=\"swatchTitle\" value=<<colour>>>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>\n"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
},
"$:/language": {
"title": "$:/language",
"text": "$:/languages/en-GB"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/macros/CSS": {
"title": "$:/core/macros/CSS",
"tags": "$:/tags/Macro",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"><$transclude tiddler=\"$:/config/DefaultColourMappings/$name$\"/></$transclude></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
},
"$:/core/macros/colour-picker": {
"title": "$:/core/macros/colour-picker",
"tags": "$:/tags/Macro",
"text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<span style=\"display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/>\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
},
"$:/core/macros/copy-to-clipboard": {
"title": "$:/core/macros/copy-to-clipboard",
"tags": "$:/tags/Macro",
"text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
},
"$:/core/macros/diff": {
"title": "$:/core/macros/diff",
"tags": "$:/tags/Macro",
"text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
},
"$:/core/macros/dumpvariables": {
"title": "$:/core/macros/dumpvariables",
"tags": "$:/tags/Macro",
"text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
},
"$:/core/macros/export": {
"title": "$:/core/macros/export",
"tags": "$:/tags/Macro",
"text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$set name=\"count\" value={{{ [subfilter<__exportFilter__>count[]] }}}>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$list filter=\"[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] ~[<currentTiddler>!has[condition]then[true]]\" variable=\"ignore\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=<<__exportFilter__>> filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</$list>\n</$set>\n</div>\n</$reveal>\n\\end\n"
},
"$:/core/macros/image-picker": {
"title": "$:/core/macros/image-picker",
"created": "20170715180840889",
"modified": "20170715180914005",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
},
"$:/core/macros/keyboard-driven-input": {
"title": "$:/core/macros/keyboard-driven-input",
"tags": "$:/tags/Macro",
"text": "\\define change-input-tab(stateTitle,tag,beforeafter,defaultState,actions)\n<$set name=\"tabsList\" filter=\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]]\">\n<$vars currentState={{{ [<__stateTitle__>!is[missing]get[text]] ~[<__defaultState__>] }}} firstTab={{{ [enlist<tabsList>nth[1]] }}} lastTab={{{ [enlist<tabsList>last[]] }}}>\n<$set name=\"nextTab\" value={{{ [all[shadows+tiddlers]tag<__tag__>!has[draft.of]$beforeafter$<currentState>] ~[[$beforeafter$]removeprefix[after]suffix[]addprefix<firstTab>] ~[[$beforeafter$]removeprefix[before]suffix[]addprefix<lastTab>] }}}>\n<$action-setfield $tiddler=<<__stateTitle__>> text=<<nextTab>>/>\n$actions$\n</$set>\n</$vars>\n</$set>\n\\end\n\n\\define keyboard-input-actions()\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>get<__field__>] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>getindex<__index__>] }}}/>\n</$list>\n\\end\n\n\\define input-next-actions-inner()\n<$list filter=\"[<nextItem>minlength[1]]\" variable=\"ignore\">\n<$action-setfield $tiddler=<<__selectionStateTitle__>> text=<<nextItem>>/>\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $field=<<__field__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $index=<<__index__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$action-setfield $tiddler=<<__refreshTitle__>> text=\"yes\"/>\n</$list>\n\\end\n\n\\define input-next-actions(afterOrBefore:\"after\",reverse:\"\")\n<$list filter=\"[<__storeTitle__>get[text]minlength<__filterMinLength__>] [<__filterMinLength__>match[0]] +[limit[1]]\" variable=\"ignore\">\n<$vars userInput={{{ [<__storeTitle__>get[text]] }}} selectedItem={{{ [<__selectionStateTitle__>get[text]] }}}>\n<$set name=\"configTiddler\" value={{{ [subfilter<__configTiddlerFilter__>] }}}>\n<$vars primaryListFilter={{{ [<configTiddler>get<__firstSearchFilterField__>] }}} secondaryListFilter={{{ [<configTiddler>get<__secondSearchFilterField__>] }}}>\n<$set name=\"filteredList\" filter=\"[subfilter<primaryListFilter>addsuffix[-primaryList]] =[subfilter<secondaryListFilter>addsuffix[-secondaryList]]\">\n<$vars nextItem={{{ [enlist<filteredList>$afterOrBefore$<selectedItem>] ~[enlist<filteredList>$reverse$nth[1]] }}} firstItem={{{ [enlist<filteredList>nth[1]] }}} lastItem={{{ [enlist<filteredList>last[]] }}}>\n<$list filter=\"[<selectedItem>match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[before]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<lastItem>!match<firstItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[after]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<firstItem>match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [<userInput>addsuffix[-userInput]] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>!match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<<input-next-actions-inner>>\n</$list>\n</$vars>\n</$set>\n</$vars>\n</$set>\n</$vars>\n</$list>\n\\end\n\n\\define keyboard-driven-input(tiddler,storeTitle,field:\"text\",index:\"\",tag:\"input\",type,focus:\"\",inputAcceptActions,inputAcceptVariantActions,inputCancelActions,placeholder:\"\",default:\"\",class,focusPopup,rows,minHeight,tabindex,size,autoHeight,filterMinLength:\"0\",refreshTitle,selectionStateTitle,cancelPopups:\"\",configTiddlerFilter,firstSearchFilterField:\"first-search-filter\",secondSearchFilterField:\"second-search-filter\")\n\\whitespace trim\n<$keyboard key=\"((input-accept))\" actions=<<__inputAcceptActions__>>>\n<$keyboard key=\"((input-accept-variant))\" actions=<<__inputAcceptVariantActions__>>>\n<$keyboard key=\"((input-up))\" actions=<<input-next-actions \"before\" \"reverse[]\">>>\n<$keyboard key=\"((input-down))\" actions=<<input-next-actions>>>\n<$keyboard key=\"((input-cancel))\" actions=<<__inputCancelActions__>>>\n<$edit-text tiddler=<<__tiddler__>> field=<<__field__>> index=<<__index__>> \n\t\tinputActions=<<keyboard-input-actions>> tag=<<__tag__>> class=<<__class__>> \n\t\tplaceholder=<<__placeholder__>> default=<<__default__>> focusPopup=<<__focusPopup__>> \n\t\tfocus=<<__focus__>> type=<<__type__>> rows=<<__rows__>> minHeight=<<__minHeight__>> \n\t\ttabindex=<<__tabindex__>> size=<<__size__>> autoHeight=<<__autoHeight__>> \n\t\trefreshTitle=<<__refreshTitle__>> cancelPopups=<<__cancelPopups__>>/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n\\end\n"
},
"$:/core/macros/lingo": {
"title": "$:/core/macros/lingo",
"tags": "$:/tags/Macro",
"text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
},
"$:/core/macros/list": {
"title": "$:/core/macros/list",
"tags": "$:/tags/Macro",
"text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\">\n{{$:/core/images/blank}}\n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$type$>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
},
"$:/core/macros/tabs": {
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain,actions,explicitState)\n<$set name=\"qualifiedState\" value=<<qualify \"$state$\">>>\n<$vars tabsState={{{ [<__explicitState__>minlength[1]] ~[<qualifiedState>] }}}>\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<tabsState>> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler>$actions$</$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<tabsState>> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n</$vars>\n</$set>\n\\end\n"
},
"$:/core/macros/tag-picker": {
"title": "$:/core/macros/tag-picker",
"tags": "$:/tags/Macro",
"first-search-filter": "[tags[]!is[system]search:title<userInput>sort[]]",
"second-search-filter": "[tags[]is[system]search:title<userInput>sort[]]",
"text": "\\define get-tagpicker-focus-selector() [data-tiddler-title=\"$(currentTiddlerCSSEscaped)$\"] .tc-add-tag-name input\n\n\\define delete-tag-state-tiddlers() <$action-deletetiddler $filter=\"[<newTagNameTiddler>] [<storeTitle>] [<tagSelectionState>]\"/>\n\n\\define add-tag-actions(actions,tagField:\"tags\")\n<$set name=\"tag\" value={{{ [<__tiddler__>get[text]] }}}>\n<$list filter=\"[<saveTiddler>!contains:$tagField$<tag>!match[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[<tag>]\"/>\n\"\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n</$list>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n\\end\n\n\\define clear-tags-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newTagNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-tag-state-tiddlers>>\n</$list>\n\\end\n\n\\define clear-tags-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newTagNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<clear-tags-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newTagNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define tag-picker-inner(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars newTagNameInputTiddlerQualified=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddlerQualified=<<qualify \"$:/temp/NewTagName/selected-item\">> fallbackTarget={{$(palette)$##tag-background}} colourA={{$(palette)$##foreground}} colourB={{$(palette)$##background}}>\n<$vars storeTitle={{{ [<newTagNameInputTiddler>!match[]] ~[<newTagNameInputTiddlerQualified>] }}} tagSelectionState={{{ [<newTagNameSelectionTiddler>!match[]] ~[<newTagNameSelectionTiddlerQualified>] }}}>\n<$vars refreshTitle=<<qualify \"$:/temp/NewTagName/refresh\">> nonSystemTagsFilter=\"[tags[]!is[system]search:title<userInput>sort[]]\" systemTagsFilter=\"[tags[]is[system]search:title<userInput>sort[]]\">\n<div class=\"tc-edit-add-tag\">\n<div>\n<span class=\"tc-add-tag-name tc-small-gap-right\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newTagNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<tagSelectionState>> inputAcceptActions=\"\"\"<$macrocall $name=\"add-tag-actions\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\"\n\t\tinputCancelActions=<<clear-tags-actions>> tag=\"input\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>> \n\t\tfocus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}} filterMinLength={{$:/config/Tags/MinLength}} \n\t\tcancelPopups=<<cancelPopups>> configTiddlerFilter=\"[[$:/core/macros/tag-picker]]\"/>\n</span><$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$reveal state=<<storeTitle>> type=\"nomatch\" text=\"\"><$button class=\"tc-btn-invisible tc-small-gap tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label={{$:/language/EditTemplate/Tags/ClearInput/Caption}}>{{$:/core/images/close-button}}<<delete-tag-state-tiddlers>></$button></$reveal><span class=\"tc-add-tag-button tc-small-gap-left\">\n<$set name=\"tag\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$button set=<<newTagNameTiddler>> setTo=\"\" class=\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<<delete-tag-state-tiddlers>><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>>/>\n</$set>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-block-tags-dropdown\">\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<nonSystemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-primaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n<hr>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<systemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-secondaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n</$set>\n</div>\n</$reveal>\n</div>\n</div>\n</$vars>\n</$vars>\n</$vars>\n\\end\n\\define tag-picker(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars saveTiddler=<<currentTiddler>> palette={{$:/palette}}>\n<$list filter=\"[<newTagNameTiddler>match[]]\" emptyMessage=\"\"\"<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\">\n<$set name=\"newTagNameTiddler\" value=<<qualify \"$:/temp/NewTagName\">>>\n<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\n</$set>\n</$list>\n</$vars>\n\\end\n"
},
"$:/core/macros/tag": {
"title": "$:/core/macros/tag",
"tags": "$:/tags/Macro",
"text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
},
"$:/core/macros/thumbnails": {
"title": "$:/core/macros/thumbnails",
"tags": "$:/tags/Macro",
"text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
},
"$:/core/macros/timeline": {
"title": "$:/core/macros/timeline",
"created": "20141212105914482",
"modified": "20141212110330815",
"tags": "$:/tags/Macro",
"text": "\\define timeline-title()\n\\whitespace trim\n<!-- Override this macro with a global macro \n of the same name if you need to change \n how titles are displayed on the timeline \n -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><<timeline-title>></$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
},
"$:/core/macros/toc": {
"title": "$:/core/macros/toc",
"tags": "$:/tags/Macro",
"text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n <$transclude field=\"caption\">\n <$view field=\"title\"/>\n </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}><$view field='caption'><$view field='title'/></$view></$link>\">\n <<toc-caption>>\n </$list>\n <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </li>\n </$set>\n </$set>\n </$vars>\n </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n <li class=<<toc-item-class>>>\n <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n </$list>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n </$list>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-selective-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n <div class=\"tc-tabbed-table-of-contents\">\n <$linkcatcher to=<<__selectedTiddler__>>>\n <div class=\"tc-table-of-contents\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n </div>\n </$linkcatcher>\n <div class=\"tc-tabbed-table-of-contents-content\">\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=<<__template__>>>\n <h1><<toc-caption>></h1>\n <$transclude mode=\"block\">$missingText$</$transclude>\n </$transclude>\n </$reveal>\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n $unselectedText$\n </$reveal>\n </div>\n </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
},
"$:/core/macros/translink": {
"title": "$:/core/macros/translink",
"tags": "$:/tags/Macro",
"text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tree": {
"title": "$:/core/macros/tree",
"tags": "$:/tags/Macro",
"text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/utils": {
"title": "$:/core/macros/utils",
"text": "\\define colour(colour)\n$colour$\n\\end\n"
},
"$:/snippets/minifocusswitcher": {
"title": "$:/snippets/minifocusswitcher",
"text": "<$select tiddler=\"$:/config/AutoFocus\">\n<$list filter=\"title tags text type fields\">\n<option value=<<currentTiddler>>><<currentTiddler>></option>\n</$list>\n</$select>\n"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/snippets/peek-stylesheets": {
"title": "$:/snippets/peek-stylesheets",
"text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/AdvancedSearch": {
"title": "$:/tags/AdvancedSearch",
"list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
},
"$:/tags/AdvancedSearch/FilterButton": {
"title": "$:/tags/AdvancedSearch/FilterButton",
"list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/ControlPanel/Plugins": {
"title": "$:/tags/ControlPanel/Plugins",
"list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/EditorToolbar": {
"title": "$:/tags/EditorToolbar",
"list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
},
"$:/tags/Manager/ItemMain": {
"title": "$:/tags/Manager/ItemMain",
"list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
},
"$:/tags/Manager/ItemSidebar": {
"title": "$:/tags/Manager/ItemSidebar",
"list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
"text": ""
},
"$:/tags/PluginLibrary": {
"title": "$:/tags/PluginLibrary",
"list": "$:/config/OfficialPluginLibrary"
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/SideBarSegment": {
"title": "$:/tags/SideBarSegment",
"list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/TiddlerInfo/Advanced": {
"title": "$:/tags/TiddlerInfo/Advanced",
"list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser tc-viewswitcher\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
}
}
}
gaenalitrak/matteul.github.io
다음 티들러를 가져왔습니다:
# [[454654.png]]
# [[4546541.png]]
{
"tiddlers": {
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "고급 검색"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "고급 검색"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "굵게"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "선택에 굵게 서식을 적용합니다"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "취소"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "이 티들러로의 바뀜을 버립니다"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "지우기"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "단색으로 그림을 지웁니다"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "복제"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "이 티들러를 복제합니다"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "닫기"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "이 티들러를 닫습니다"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "모두 닫기"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "모든 티들러를 닫습니다"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "다른 티들러 닫기"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "다른 티들러를 닫습니다"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "제어판"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "제어판을 엽니다"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "삭제"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "이 티들러를 삭제합니다"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "편집"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "이 티들러를 편집합니다"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "편집기 높이"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "내용에 맞게 자동으로 높이를 조절합니다"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "고정된 높이:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "텍스트 편집기의 높이를 선택합니다"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "암호화"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "비밀번호 지우기"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "비밀번호를 지우고 암호화 없이 이 위키를 저장합니다"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "이 위키를 저장하기 위한 비밀번호를 설정하거나 지웁니다"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "비밀번호 설정"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "암호화로 이 위키를 저장하기 위해 비밀번호를 설정합니다"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "거두기"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "거두기 수행"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "매크로 이름:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "새 티들러의 제목:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "다음으로 거둔 텍스트 바꾸기:"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "링크"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "매크로"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "끼워넣기"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "이 티들러의 제목으로 된 새 티들러를 태그"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "경고: 티들러가 이미 존재합니다"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "새 티들러 안으로 선택한 텍스트를 거둡니다"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "모두 내보내기"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "모든 티들러를 내보냅니다"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "티들러 내보내기"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "티들러를 내보냅니다"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "여러 티들러 내보내기"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "여러 티들러를 내보냅니다"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "티들러 접기"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "접기 막대"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "티들러를 선택적으로 접고 펼칠 수 있는 막대"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "이 티들러의 본문을 접습니다"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "모든 티들러 접기"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "모든 열린 티들러의 본문을 접습니다"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "다른 티들러 접기"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "다른 열린 티들러의 본문을 접습니다"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "전체 화면"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "전체 화면 모드에 들어가거나 떠납니다"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "1단계 문단 제목"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "선택을 포함하는 줄에 1단계 문단 제목 서식을 적용합니다"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "2단계 문단 제목"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "선택을 포함하는 줄에 2단계 문단 제목 서식을 적용합니다"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "3단계 문단 제목"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "선택을 포함하는 줄에 3단계 문단 제목 서식을 적용합니다"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "4단계 문단 제목"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "선택을 포함하는 줄에 4단계 문단 제목 서식을 적용합니다"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "5단계 문단 제목"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "선택을 포함하는 줄에 5단계 문단 제목 서식을 적용합니다"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "6단계 문단 제목"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "선택을 포함하는 줄에 6단계 문단 제목 서식을 적용합니다"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "도움말"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "도움말 패널을 보여줍니다"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "사이드바 숨기기"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "사이드바를 숨깁니다"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "홈"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "기본 티들러를 엽니다"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "가져오기"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "텍스트, 그림, 티들리위키 또는 JSON을 포함한 여러 파일의 형식을 가져옵니다"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "정보"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "이 티들러에 대한 정보를 보여줍니다"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "기울임꼴"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "선택에 기울임꼴 서식을 적용합니다"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "언어"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "사용자 인터페이스 언어를 선택합니다"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "선 너비"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "페인트의 선 너비를 설정합니다"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "링크"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "위키텍스트 링크를 만듭니다"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "글머리 기호 목록"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "선택을 포함하는 줄에 글머리 기호 목록 서식을 적용합니다"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "번호가 매겨진 목록"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "선택을 포함하는 줄에 번호가 매겨진 목록 서식을 적용합니다"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "고정폭 블럭"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "선택을 포함하는 줄에 고정폭 블럭 서식을 적용합니다"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "고정폭"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "선택에 고정폭 글자 서식을 적용합니다"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "더 보기"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "더 많은 동작을 봅니다"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "여기에 새 티들러"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "이 티들러로 태그된 새로운 것을 만듭니다"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "새 그림"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "새 그림 티들러를 만듭니다"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "새 일지"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "새 일지 티들러를 만듭니다"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "여기에 새 일지"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "이 일지 티들러로 태그된 새로운 것을 만듭니다"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "새 마크다운 티들러"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "새 마크다운 티들러를 만듭니다"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "새 티들러"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "새 티들러를 만듭니다"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "불투명도"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "페인트 불투명도를 설정합니다"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "새 창에서 열기"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "새 창에서 티들러를 엽니다"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "페인트 색"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "페인트 색을 설정합니다"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "팔레트"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "컬러 팔레트를 선택합니다"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "고유링크"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "브라우저 주소 창에 이 티들러로의 직접 링크로 설정합니다"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "고유보기"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "이 이야기에서 브라우저 주소 창에 모든 티들러로의 직접 링크로 설정합니다"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "사진"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "사진을 넣습니다"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "미리 보기"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "미리 보기 창을 보여줍니다"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "미리 보기 형식"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "미리 보기 형식을 선택합니다"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "인용"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "선택을 포함하는 줄에 인용 문구 서식을 적용합니다"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "새로 고침"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "위키의 전체 새로 고침을 수행합니다"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "확인"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "이 티들러로의 바뀜을 확인합니다"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "바뀜 저장"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "바뀜을 저장합니다"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "사이드바 보이기"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "사이드바를 보여줍니다"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "그림 크기"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "높이:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "그림 크기 조절"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "너비:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "그림 크기를 조절합니다"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "도장"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "스니펫 추가"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "미리 구성된 텍스트 스니펫을 넣습니다"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "스니펫 텍스트. (캡션 필드에 설명 제목을 추가하는 것을 기억하세요)."
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "메뉴에 보여지는 이름"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "이야기보기"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "이야기 보기를 선택합니다"
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "취소선"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "선택에 취소선 서식을 적용합니다"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "아래 첨자"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "선택에 아래 첨자 서식을 적용합니다"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "위 첨자"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "선택에 위 첨자 서식을 적용합니다"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "태그 관리자"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "태그 관리자를 엽니다"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "테마"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "표시할 테마를 선택합니다"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "밑줄"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "선택에 밑줄 서식을 적용합니다"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "티들러 펼치기"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "이 티들러의 본문을 펼칩니다"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "모든 티들러 펼치기"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "모든 열린 티들러의 본문을 펼칩니다"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "고급"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "이 티들리위키에 대한 내부 정보"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "외관"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "티들리위키의 외관을 사용자 지정하는 방법입니다."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "애니메이션 지속 시간:"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "기본"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "스페이스로 되어 있는 제목에는 [[이중 대괄호]]를 사용하세요. 또는 <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">이야기 정렬 유지</$button>로 선택할 수 있습니다"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "기본 티들러:"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "시작할 때 표시할 티들러를 선택합니다:"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "안녕! 현재 언어:"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "새 일지 티들러에 대한 태그"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "새 일지 티들러의 제목"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "덮어쓴 섀도우 티들러 수:"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "섀도우 티들러 수:"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "부제목:"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "시스템 티들러 수:"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "태그 수:"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "티들러 수:"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "이 티들리위키의 제목:"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "편집에 서명하기 위한 사용자 이름:"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "티들리위키 버전:"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "편집기 형식"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "편집기"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "이 티들러는 특정 티들러 형식을 편집하는 데 사용하는 편집기를 결정합니다."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "형식"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "정보"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "이 티들리위키에 대한 정보"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "단축키 추가"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "여기에 단축키를 입력하세요"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "키보드 단축키"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "키보드 단축키 할당 관리"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "할당된 키보드 단축키가 없음"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "모든 플랫폼"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux 플랫폼 전용"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "매킨토시 플랫폼 전용"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Linux가 아닌 플랫폼 전용"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "매킨토시가 아닌 플랫폼 전용"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Windows가 아닌 플랫폼 전용"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows 플랫폼 전용"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "키보드 단축키 제거"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "불러온 모듈"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "현재 불러온 티들러 모듈의 원본 티들러로 연결된 현재 불러온 티들러 모듈입니다. 어떠한 기울린 모듈은 통상적으로 부팅 과정 중에 설치되었기 때문에 원본 티들러가 부족합니다."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "팔레트"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "복제"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "이 섀도우 팔레트를 편집하기 전에 그것을 복제하는 것을 권장합니다"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "편집 중:"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "이 섀도우 팔레트는 수정되어 있습니다"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "재설정"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "편집기 숨기기"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "현재 팔레트:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "편집기 보이기"
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "블록 파서 규칙"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "구문 분석"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "여기서 개별 위키 파서 규칙을 전역으로 비활성화할 수 있습니다. 어떤 파서 규칙을 비활성화하면 티들리위키가 제대로 작동하는 것을 막을 수 있으므로 주의하십시오 ([[안전 모드|https://tiddlywiki.com/#SafeMode]]로 정상 작동하도록 복구할 수 있습니다)"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "인라인 파서 규칙"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "플라그마 파서 규칙"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "더 많은 플러그인 얻기"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "공식 라이브러리에서 플러그인을 설치합니다"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "이 플러그인은 이미 <$text text=<<installedVersion>>/> 버전으로 설치되어 있습니다"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "플러그인"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "비활성화"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "페이지를 다시 불러올 때 이 플러그인을 비활성화합니다"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(비활성화됨)"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "없음"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "활성화"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "페이지를 다시 불러올 때 이 플러그인을 활성화합니다"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "설치"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "현재 설치된 플러그인:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "언어"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "언어 팩 플러그인"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "''\"<$text text=<<currentTab>>/>\"'' 찾을 수 없음"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "이 플러그인은 현재 설치되어 있지 않습니다"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "플러그인 라이브러리 열기"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "플러그인"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "플러그인"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "재설치"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "테마"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "테마 플러그인"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "저장"
},
"$:/language/ControlPanel/Saving/Heading": {
"title": "$:/language/ControlPanel/Saving/Heading",
"text": "저장"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "고급 설정"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "백업 디렉터리"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "백업"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "이 설정은 http://tiddlyspot.com 또는 호환되는 원격 서버에 저장할 때에만 사용됩니다"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "업로드 파일 이름"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//서버 URL 기본값은 `http://<wikiname>.tiddlyspot.com/store.cgi`이며 사용자 지정 서버 주소를 사용하도록 바꿀 수 있습니다, 예를 들어 `http://example.com/store.php`.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "비밀번호"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "서버 URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "업로드 디렉터리"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "위키 이름"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "자동 저장"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "바뀜을 자동으로 저장하지 않습니다"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "바뀜을 자동으로 저장합니다"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "편집하는 동안 자동으로 바뀜을 저장합니다"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case 위키 링크"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "자동으로 ~CamelCase 링크를 활성화"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "~CamelCase 어구를 자동으로 링크하는 것을 전역으로 비활성화할 수 있습니다. 적용하려면 다시 불러와야 합니다"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "설정"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "기본 사이드바 탭"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "기본적으로 표시하는 사이드바 탭을 지정합니다"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "편집기 도구 모음"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "편집기 도구 모음 보이기"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "편집기 도구 모음을 활성화하거나 비활성화합니다:"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "이 설정은 티들리위키의 동작을 사용자 지정할 수 있습니다."
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "티들러 열기 동작"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "이야기 강 //안//에서 둘러보기"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "현재 티들러 위에 열기"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "이야기 강의 아래에 열기"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "이야기 강의 위에 열기"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "현재 티들러 아래에 열기"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "이야기 강 //바깥//에서 둘러보기"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "위키 링크"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "없는 티들러로의 링크 활성화"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "아직 존재하지 않는 티들러로 링크할지 선택"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "둘러보기 주소 창"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "티들러를 둘러볼 때 브라우저 주소 창의 동작:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "주소 창을 업데이트하지 않음"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "대상 티들러를 포함"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "대상 티들러와 현재 이야기 서열을 포함"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "둘러보기 역사"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "티들러로 둘러보기할 때 둘러보기 역사를 업데이트합니다:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "역사를 업데이트하지 않음"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "역사를 업데이트"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "성능 계측"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "성능 계측 활성화"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "브라우저 개발자 콘솔에서 성능 통계를 표시합니다. 적용하려면 다시 불러와야 합니다"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "티들러 제목"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "티들러 제목을 링크로 선택적으로 표시합니다"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "티들러 제목을 링크로 표시하지 않음"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "티들러 제목을 링크로 표시"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "도구 모음 버튼"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "기본 도구 모음 버튼 외관:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "아이콘을 포함"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "텍스트를 포함"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "도구 모음 버튼 스타일"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "도구 모음 버튼에 대한 스타일을 선택합니다:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "테두리 없음"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "상자형"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "둥근형"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "이야기 보기"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "현재 보기:"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "테마"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "현재 테마:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "티들러 필드"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "이 위키에 사용하고 있는 티들러필드의 전체 집합입니다. (시스템 티들러는 포함하지만 섀도우 티들러는 제외)"
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "도구 모음"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "편집기 도구 모음"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "편집기 도구 모음에 표시할 버튼을 선택하세요. 어떤 버튼은 특정 형식의 티들러를 편집할 때에만 나타남을 참고하세요"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "편집 도구 모음"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "편집 모드에서 티들러에 표시할 버튼을 선택하세요"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "표시할 도구 모음 버튼을 선택합니다"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "페이지 도구 모음"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "주요 페이지 도구 모음에 표시할 버튼을 선택하세요"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "보기 도구 모음"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "보기 모드에서 티들러에 표시할 버튼을 선택하세요"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "전체 위키 다운로드"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "이 플러그인에는 다음을 갖춘 티들리위키의 코어 구성 요소를 포함합니다:\n\n* 자바스크립트 코드 모듈\n* 아이콘\n* 티들리위키의 사용자 인터페이스를 만드는 데 필요한 틀\n* 코어에 사용되는 지역화할 수 있는 문자열의 영국 영어 (en-GB) 번역\n"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "일"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "일"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "일"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "일"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "일"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "일"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "일"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "일"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "일"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "일"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "일"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "일"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "일"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "일"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "일"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "일"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "일"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "일"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "일"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "일"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "일"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "일"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "일"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "일"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "일"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "일"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "일"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "일"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "일"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "일"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "일"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "일요일"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "월요일"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "화요일"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "수요일"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "목요일"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "금요일"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "토요일"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "1월"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "10월"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "11월"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "12월"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "2월"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "3월"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "4월"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "5월"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "6월"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "7월"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "8월"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "9월"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "오전"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "오후"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "일"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "월"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "화"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "수"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "목"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "금"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "토"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "1월"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "10월"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "11월"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "12월"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "2월"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "3월"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "4월"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "5월"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "6월"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "7월"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "8월"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "9월"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "지금으로부터 <<period>>일"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "지금으로부터 <<period>>시간"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "지금으로부터 <<period>>분"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "지금으로부터 <<period>>개월"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "지금으로부터 1초"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "지금으로부터 <<period>>초"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "지금으로부터 <<period>>년"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>>일 전"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>>시간 전"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>>분 전"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>>개월 전"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1초 전"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>>초 전"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>>년 전"
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "RevealWidget으로 사용될 애니메이션."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Node.js에 따라 실행될 수 있는 명령."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "`$tw.config` 안에 넣을 데이터."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "개별 필터 연산자 메서드."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "`$tw` 안에 넣을 전역 데이터."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "''is'' 필터 연산자에 대한 피연산자."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "자바스크립트 매크로 정의."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "다른 내용 형식을 위한 파서."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "브라우저에서 차이 메서드로 파일을 저장하기 위한 서버 핸들."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "시동 기능."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "이야기 보기는 애니메이션 및 목록 위젯의 동작을 사용자 정의할 수 있습니다."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "티들러 안의 다른 내용 형식을 변환합니다."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "개별 티들러 필드의 동작을 정의합니다."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "`$tw.Tiddler` 프로토타입에 메서드를 추가합니다."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "업그레이드/가져오기를 하는 동안 티들러에 업그레이드 처리를 적용합니다."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "`$tw.utils`에 메서드를 추가합니다."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "`$tw.utils`에 Node.js 특정 메서드를 추가합니다."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "DOM 렌더링과 동작을 한 묶음으로 하는 위젯."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "`$tw.Wiki`에 메서드를 추가합니다."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "주요 위키텍스트를 파서하기 위한 개별 파서 규칙."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "경보 배경"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "경보 테두리"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "경보 강조"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "경보 조용한 전경"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "일반 배경"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "인용문 막대"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "기본 버튼 배경"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "기본 버튼 테두리"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "기본 버튼 전경"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "코드 배경"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "코드 테두리"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "코드 전경"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "저장하지 않은 바뀜 지시자"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "다운로드 버튼 배경"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "다운로드 버튼 전경"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "드래거 배경"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "드래거 전경"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "드롭다운 배경"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "드롭다운 테두리"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "드롭다운 탭 배경"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "선택한 탭에 대한 드롭다운 탭 배경"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "드롭존 배경"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "바깥 링크 배경"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "바깥 링크 배경 가리킬 때"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "바깥 링크 배경 방문했을 때"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "바깥 링크 전경"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "바깥 링크 전경 가리킬 때"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "바깥 링크 전경 방문했을 때"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "일반 전경"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "메시지 상자 배경"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "메시지 상자 테두리"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "메시지 상자 전경"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "모달 배경막"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "모달 배경"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "모달 테두리"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "모달 바닥글 배경"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "모달 바닥글 테두리"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "모달 머릿글 테두리"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "일반 조용한 전경"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "알림 배경"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "알림 테두리"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "페이지 배경"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "미리 서식 있는 코드 배경"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "미리 서식 있는 코드 테두리"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "일반 첫째"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "사이드바 버튼 전경"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "사이드바 제어 전경"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "사이드바 제어 전경 가리킬 때"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "사이드바 전경"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "사이드바 전경 그림자"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "사이드바 조용한 전경"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "사이드바 조용한 전경 가리킬 때"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "사이드바 탭 배경"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "선택한 탭에 대한 사이드바 탭 배경"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "사이드바 탭 테두리"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "선택한 탭에 대한 사이드바 탭 테두리"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "사이드바 탭 분할선"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "사이드바 탭 전경"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "선택한 탭에 대한 사이드바 탭 전경"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "사이드바 티들러 링크 전경"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "사이드바 티들러 링크 전경 가리킬 때"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "사이트 제목 전경"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "정적 경보 전경"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "탭 배경"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "선택한 탭에 대한 탭 배경"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "탭 테두리"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "선택한 탭에 대한 탭 테두리"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "탭 분할선"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "탭 전경"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "선택한 탭에 대한 탭 전경"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "표 테두리"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "표 바닥글 배경"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "표 머릿글 배경"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "태그 배경"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "태그 전경"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "티들러 배경"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "티들러 테두리"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "티들러 제어 전경"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "티들러 제어 전경 가리킬 때"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "선택한 제어의 티들러 제어 전경"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "티들러 편집기 배경"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "티들러 편집기 테두리"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "티들러 편집기 테두리 그림"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "짝수 필드의 티들러 편집기 배경"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "홀수 필드의 티들러 편집기 배경"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "티들러 정보 패널 배경"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "티들러 정보 패널 테두리"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "티들러 정보 패널 탭 배경"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "티들러 링크 배경"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "티들러 링크 전경"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "티들러 부제목 전경"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "티들러 제목 전경"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "도구 모음 '취소' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "도구 모음 '닫기' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "도구 모음 '삭제' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "도구 모음 '완료' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "도구 모음 '편집' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "도구 모음 '정보' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "도구 모음 '새 티들러' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "도구 모음 '옵션' 버튼 전경"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "도구 모음 '저장' 버튼 전경"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "태그되지 않음 배경"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "매우 조용한 전경"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "주요 티들리위키 파일의 바깥에 저장된 바깥 티들러입니다. 태그와 필드를 편집할 수는 있지만 직접 내용 자체를 편집할 수는 없습니다"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "이 티들러에 대한 텍스트를 입력하세요"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "출력"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "필드 제거"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "필드를 제거합니다"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "추가"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "시스템 필드"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "사용자 필드"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "필드 이름"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "새 필드 추가:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "필드 값"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "이것은 수정된 섀도우 티들러입니다. 이 티들러를 삭제하여 <<pluginLink>> 플러그인의 기본 판으로 되돌릴 수 있습니다"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "이것은 섀도우 티들러입니다. 어떠한 바뀜도 <<pluginLink>> 플러그인에서의 기본 판을 덮어쓰게 됩니다"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "추가"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "태그 이름"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "태그 목록"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "태그 목록을 보여줍니다"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "경고: 티들러 제목에 문자 <<bad-chars>> 의 사용은 피하십시오"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "내용 형식 삭제"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "내용 형식을 삭제합니다"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "내용 형식 목록"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "내용 형식 목록을 보여줍니다"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "내용 형식"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "형식:"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV 파일"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON 파일"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "정적 HTML"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" 파일"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "바깥 그림 티들러의 전체 URI"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "티들러의 유래가 된 가방 이름"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "탭이나 버튼에 표시할 텍스트"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "티들러와 연관된 CSS 색 값"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "[[경보 티들러|AlertMechanism]]에 대해 담당하는 구성 요소의 이름"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "티들러가 만들어진 날짜"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "티들러를 만든 사람의 이름"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "[[역사 목록|HistoryMechanism]]에서 최상위 티들러를 캐시하는 데 사용"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "플러그인에 대해, 종속된 플러그인 제목을 나열"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "플러그인에 대한 설명문, 또는 모달 대화 상자"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "초안 티들러에 대해, 초안인 티들러의 제목을 포함"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "초안 티들러에 대해, 티들러의 제안된 새 제목을 포함"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "마법사를 위한 바닥글 텍스트"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "티들러와 연관된 아이콘을 포함하는 티들러의 제목"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "\"yes\"로 설정하면 티들러가 자바스크립트 라이브러리로 저장해야하는지 나타냄"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "티들러와 연관된 티들러 제목의 정렬된 목록"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "설정하면, 티들러가 정렬된 목록 뒤에 추가해야 하는 티들러 제목"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "설정하면, 티들러의 정렬된 목록 앞에, 또는 이 필드에 빈 문자열이 들어 있지 않으면 목록의 시작에서 추가해야 하는 티들러 제목"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "티들러가 마지막으로 수정된 날짜 및 시간"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "티들러를 마지막으로 수정한 사람과 관련된 티들러 제목"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "플러그인 티들러와 연관된 사람이 읽을 수 있는 이름"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "플러그인 티들러의 우선 순위를 나타내는 숫자 값"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "플러그인 티들러에서 플러그인의 형식"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "티들리위키 배포 날짜"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "서버에 열린 티들러의 판"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "티들러와 연관된 원본 URL"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "마법사를 위한 부제목 텍스트"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "티들러와 연관된 태그의 목록"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "티들러의 본문"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "티들러의 고유 이름"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "티들러의 내용 형식"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "플러그인에 대한 버전 정보"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "시스템 태그를 제외한 모든 태그"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "시스템 태그를 제외한 모든 티들러"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "초안 티들러"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "없는 티들러"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "외톨이 티들러"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "덮어쓴 섀도우 티들러"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "시스템 티들러를 포함하여, 최근에 수정된 티들러"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "최근에 수정된 티들러"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "섀도우 티들러"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "시스템 태그"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "시스템 티들러"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "위키 텍스트가 없는 티들러"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n티들리위키와 티들리위키 공동체에 오신 것을 환영합니다\n\n티들리위키에 중요한 정보를 저장하는 것을 시작하기 전에 확실히 바뀜을 저장할 수 있는지 확인하는 것이 중요합니다. 자세한 사항은 [[https://tiddlywiki.com/#GettingStarted]]를 보세요\n\n!! 이 티들리위키 설정하기\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\n더 많은 옵션에 대해서는 [[제어판|$:/ControlPanel]]을 보세요.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "구성된 명령을 자동으로 실행합니다",
"text": "현재 위키에 지정한 빌드 대상을 빌드합니다. 빌드할 대상을 지정하지 않으면 모든 사용할 수 있는 대상을 빌드합니다.\n\n```\n--build <대상> [<대상> ...]\n```\n\n빌드 대상은 위키 폴더의 `tiddlywiki.info` 파일에 정의되어 있습니다.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "후속 암호화 조작을 하기 위해 비밀번호를 지웁니다",
"text": "후속 암호화 조작을 하기 위해 비밀번호를 지웁니다\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"description": "",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\n사용법: tiddlywiki [<위키폴더>] [--<명령> [<인수>...]...]\n```\n\n사용할 수 있는 명령:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\n명령에 대한 자세한 도움말을 얻으려면:\n\n```\ntiddlywiki --help <명령>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "티들리위키의 사용할 수 있는 에디션을 나열합니다",
"text": "사용할 수 있는 에디션의 이름과 설명을 나열합니다. `--init` 명령으로 지정한 에디션의 새 위키를 만들 수 있습니다.\n\n```\n--editions\n```\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "티들리위키 명령에 대한 도움말을 표시합니다",
"text": "명령에 대한 도움말 텍스트를 표시합니다:\n\n```\n--help [<명령>]\n```\n\n명령 이름을 생략하면 사용할 수 있는 명령의 목록이 표시됩니다.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "새 위키 폴더를 초기화합니다",
"text": "빈 [[위키폴더|WikiFolders]]를 초기화하고 지정한 에디션을 복사합니다.\n\n```\n--init <에디션> [<에디션> ...]\n```\n\n예를 들어:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\n참고:\n\n* 필요하다면 위키 폴더 디렉터리가 만들어집니다\n* \"에디션\" 기본값은 ''empty''입니다\n* init 명령은 위키 폴더가 비어 있지 않으면 실패합니다\n* init 명령은 에디션의 `tiddlywiki.info` 파일에 정의된 모든 `includeWikis`를 제거합니다\n* 여러 에디션이 지정되어 있을 때, 이른 에디션의 공유된 파일을 마지막 초기화 에디션으로 덮어쓰게 됩니다 (그래서, 마지막 `tiddlywiki.info` 파일은 마지막 에디션에서 복사됩니다)\n* `--editions`는 사용할 수 있는 에디션의 목록을 반환합니다\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "파일에서 티들러를 불러옵니다",
"text": "2.x.x 티들리위키 파일 (`.html`), `.tiddler`, `.tid`, `.json` 또는 다른 파일에서 티들러를 불러옵니다\n\n```\n--load <파일경로>\n```\n\n암호화된 티들리위키 파일에서 티들러를 불러오려면 먼저 비밀번호명령으로 비밀번호를 지정해야 합니다. 예를 들어:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\n티들리위키는 이미 불러온 플러그인의 오래된 버전을 불러오지 않음을 참고하세요.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "업그레이드 과정에 필요한 라이브러리 플러그인을 구축합니다",
"text": "업그레이드 과정에 `$:/UpgradeLibrary` 티들러를 구축합니다.\n\n업그레이드 라이브러리의 형식은 `library` 플러그인 형식과 일반 플러그인 티들러입니다. 티들리위키5 저장소 안에서 사용할 수 있는 각 플러그인, 테마 및 언어 팩의 복사본을 포함합니다.\n\n이 명령은 내부 사용을 하는 것을 상정한 것이며; 사용자 정의 업그레이드 절차를 구축하는 사용자에게만 관련이 있습니다.\n\n```\n--makelibrary <제목>\n```\n\n제목 인수의 기본값은 `$:/UpgradeLibrary`입니다.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"description": "",
"text": "이러한 도움말 항목은 없습니다"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "후속 명령의 기본 출력 디렉터리를 설정합니다",
"text": "후속 명령의 기본 출력 디렉터리를 설정합니다. 기본 출력 디렉터리는 에디션 디렉터리의 `output` 하위 디렉터리입니다.\n\n```\n--output <경로이름>\n```\n\n지정된 경로이름이 상대적이면 현재 작업 디렉터리로부터 상대적으로 해석됩니다. 예를 들어 `--output .`은 현재 작업 디렉터리로 출력 디렉터리를 설정합니다.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "후속 암호화 조작을 하기 위해 비밀번호를 설정합니다",
"text": "후속 암호화 조작을 하기 위해 비밀번호를 설정합니다\n\n```\n--password <비밀번호>\n```\n\n''참고'': 이것은 비밀번호로 보호된 티들리위키를 서버에 넣어 사용해서는 안됩니다. 대신, [[서버명령|ServerCommand]]에 따른 비밀번호 옵션을 보세요.\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "지정된 내용형식으로 개별 티들러를 렌더합니다",
"text": "지정된 내용형식으로 개별 티들러를 렌더합니다, 기본값은 `text/html`이며 지정된 파일이름으로 저장합니다. 선택적으로 틀을 지정할 수 있으며, 이 경우 틀 티들러가 렌더되는 티들러로 \"currentTiddler\" 변수 집합으로 렌더됩니다. (첫 매개변수 값)\n\n```\n--rendertiddler <제목> <파일이름> [<형식>] [<틀>]\n```\n\n기본적으로, 파일이름은 에디션 디렉터리의 `output` 하위 디렉터리로 상대적으로 해석됩니다. `--output` 명령은 다른 디렉터리로 직접 출력하는 데 사용할 수 있습니다.\n\n파일이름으로의 경로에 없는 디렉터리는 자동으로 만들어집니다.\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "지정된 내용형식으로 필터와 일치하는 티들러를 렌더합니다",
"text": "지정된 내용형식 (기본값은 `text/html`)과 확장 기능 (기본값은 `.html`)의 파일을 구분하는 필터와 일치하는 티들러의 집합을 렌더합니다.\n\n```\n--rendertiddlers <필터> <틀> <경로이름> [<형식>] [<확장기능>] [\"noclean\"]\n```\n\n예를 들어:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\n기본적으로, 경로이름은 에디션 디렉터리의 `output` 하위 디렉터리로 상대적으로 해석됩니다. `--output` 명령은 다른 디렉터리로 직접 출력하는 데 사용할 수 있습니다.\n\n''noclean'' 플래그를 지정하지 않는 한 대상 디렉터리의 모든 파일이 삭제됩니다. 대상 디렉터리가 없으면 재귀적으로 만들어집니다.\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "파일로의 raw 티들러를 저장합니다",
"text": "지정한 파일이름으로 raw 텍스트 또는 바이너리 형식의 개별 티들러를 저장합니다.\n\n```\n--savetiddler <제목> <파일이름>\n```\n\n기본적으로, 파일이름은 에디션 디렉터리의 `output` 하위 디렉터리로 상대적으로 해석됩니다. `--output` 명령은 다른 디렉터리로 직접 출력하는 데 사용할 수 있습니다.\n\n파일이름으로의 경로에 없는 디렉터리는 자동으로 만들어집니다.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "디렉터리로의 raw 티들러의 그룹을 저장합니다",
"text": "지정한 디렉터리로 raw 텍스트 또는 바이너리 형식의 티들러의 그룹을 저장합니다.\n\n```\n--savetiddlers <필터> <경로이름> [\"noclean\"]\n```\n\n기본적으로, 경로이름은 에디션 디렉터리의 `output` 하위 디렉터리로 상대적으로 해석됩니다. `--output` 명령은 다른 디렉터리로 직접 출력하는 데 사용할 수 있습니다.\n\n출력 디렉터리에는 지정된 파일을 저장하기 전에 기존 파일이 지워집니다. 삭제는 ''noclean'' 플래그를 지정하여 비활성화할 수 있습니다.\n\n경로이름에 없는 디렉터리는 자동으로 만들어집니다.\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "티들리위키로 HTTP 서버 인터페이스를 제공합니다",
"text": "티들리위키5에 내장된 서버는 매우 간단합니다. 티들리웹과는 호환할 수 있지만 안정적으로 인터넷에 연결하여 사용하는 데 필요한 많은 기능을 지원하지 않습니다.\n\n루트에서, 지정한 티들러를 렌더하여 제공합니다. 루트 이외에는, JSON으로 인코딩된 개별 티들러를 제공하고, `GET`, `PUT` 및 `DELETE`의 기본 HTTP 운영을 지원합니다.\n\n```\n--server <포트> <루트티들러> <렌더형식> <제공형식> <사용자이름> <비밀번호> <호스트> <경로접두어>\n```\n\n매개변수는 다음과 같습니다:\n\n* ''포트'' - 제공할 포트 번호 (기본값은 \"8080\")\n* ''루트티들러'' - 루트에서 제공할 티들러 (기본값은 \"$:/core/save/all\")\n* ''렌더형식'' - 루트 티들러가 렌더해야 하는 내용 형식 (기본값은 \"text/plain\")\n* ''제공형식'' - 루트 티들러가 제공해야 하는 내용 형식 (기본값은 \"text/html\")\n* ''사용자이름'' - 편집에 서명하기 위한 기본 사용자 이름\n* ''비밀번호'' - 선택 사항 기본 인증을 위한 비밀번호\n* ''호스트'' - 선택 사항 제공하는 호스트 이름 (기본값은 \"127.0.0.1\" 즉 \"localhost\")\n* ''경로접두어'' - 선택 사항 경로의 접두어\n\n비밀번호 매개변수가 지정되어 있다면 브라우저는 사용자에게 사용자이름과 비밀번호를 프롬프트할 것입니다. 비밀번호는 일반 텍스트로 전송되므로 일반적으로 사용하기에 적합하지 않음을 참고하세요.\n\n예를 들어:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\n호스트이름 또는 경로접두어를 설정해야 하고 비밀번호가 필요하지 않는다면 사용자이름과 비밀번호는 빈 문자열로 지정할 수 있습니다:\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\n동시에 여러 티들리위키 서버를 실행하려면 각각 다른 포트를 할당해야 합니다.\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "바깥 티들러를 사용할 준비를 합니다",
"text": "//이 명령은 실험 기능으로 향후 바뀔 수 있음을 참고하세요//\n\n티들러로의 `currentTiddler` 변수 집합으로 틀 티들러의 내용을 티들러의 그룹의 지정된 필드에 설정합니다.\n\n```\n--setfield <필터> <필드이름> <틀제목> <렌더형식>\n```\n\n매개변수는 다음과 같습니다:\n\n* ''필터'' - 명령의 대상이 되는 필터를 식별하는 티들러\n* ''필드이름'' - 수정할 필드 (기본값은 \"text\")\n* ''틀제목'' - 지정된 필드에 기록하는 바탕이 되는 티들러. 비어 있거나 없으면 지정한 필드가 삭제됩니다\n* ''렌더형식'' - 렌더할 텍스트 형식 (기본값은 \"text/plain\"입니다; \"text/html\"에는 HTML 태그가 포함되어 사용할 수 있습니다)\n\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "플러그인에 포함되어 있는 티들러의 압축을 풉니다",
"text": "플러그인에 포함되어 있는 티들러의 압축을 풀어 일반 티들러로 만듭니다:\n\n```\n--unpackplugin <제목>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "트리거의 상세한 출력 모드",
"text": "디버깅에 유용한, 트리거의 상세한 출력\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "티들리위키의 버전 번호를 표시합니다",
"text": "티들리위키의 버전 번호를 표시합니다.\n\n```\n--version\n```\n"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "다음 티들러를 가져왔습니다:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "취소"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "이 티들러는 가져올 준비가 되었습니다:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "가져오기"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "선택"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "상태"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "제목"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "호환되지 않거나 오래된 플러그인을 차단했습니다"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "(가져온 <<incoming>> 플러그인이 존재하는 <<existing>> 플러그인보다 오래되었기 때문에) 플러그인을 차단했습니다"
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "플러그인을 <<incoming>>에서 <<upgraded>>(으)로 업그레이드했습니다"
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "임시 상태 티들러를 차단했습니다"
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "시스템 티들러를 차단했습니다"
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "<$text text=<<from>>/>에서 테마 트윅을 마이그레이션했습니다"
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "티들리위키 클래식용으로 설계된 플러그인을 불러오려고 하는 것 같아 보입니다. [[이러한 플러그인은 티들리위키 버전 5.x.x에 동작하지 않음|https://tiddlywiki.com/#TiddlyWikiClassic]]을 참고하세요. 티들리위키 클래식 플러그인이 감지되었습니다:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "이 티들러는 바이너리 데이터를 포함합니다"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "이 티들러는 티들리위키 클래식 위키 텍스트 형식으로 쓰여져 있으며, 티들리위키 버전 5와 완전히 호환되지 않습니다. 자세한 사항은 [[https://tiddlywiki.com/static/Upgrading.html]]을 보세요."
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "업그레이드"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "모두 닫기"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "최근:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "\"<$text text=<<title>>/>\" 티들러의 바뀜을 버리겠습니까?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "\"<$text text=<<title>>/>\" 티들러를 삭제하겠습니까?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "섀도우티들러를 편집하려고 합니다. 어떠한 바뀜도 향후 업그레이드가 하찮지 않게 하는 기본 시스템을 덮어씁니다. \"<$text text=<<title>>/>\" 티들러를 편집하겠습니까?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "\"<$text text=<<title>>/>\" 티들러를 덮어쓰겠습니까?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "횟수"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "새 티들러"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "여기에 놓기 (또는 취소하려면 'Escape' 키 사용)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "취소"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "비밀번호를 지우겠습니까? 이 위키를 저장할 때 적용된 암호화를 제거합니다"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "비밀번호"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "비밀번호가 일치하지 않습니다"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "이 티들리위키에 대한 새 비밀번호를 설정합니다"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "비밀번호 다시 입력"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "비밀번호 설정"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "사용자 이름"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "오류"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "필터 오류"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "필터 표현식에서 구문 오류"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "필터 오류: 'is' 필터 연산자에 대한 알 수 없는 피연산자"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "플러그인 라이브러리를 불러오는 중 오류"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "끼워넣기 위젯에서 재귀 끼워넣기 오류"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "날씬한 티들러 목록을 얻는 중 오류"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "TW편집으로 저장하는 데 오류"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "저장하는 동안 오류"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest 오류 코드"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "아이 창피해. 브라우저를 새로 고쳐 티들리위키를 다시 시작할 것을 권장합니다"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "내부 자바스크립트 오류"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "\"<$text text=<<fieldName>>/>\" 필드 이름에 잘못된 문자가 있습니다. 필드는 소문자, 숫자 및 밑줄 문자 (`_`), 하이픈 (`-`) 및 마침표 (`.`)만을 포함할 수 있습니다."
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>''<$text text={{!!_canonical_uri}}/>''에서 바깥 텍스트를 불러오는 중입니다</p><p>이 메시지가 사라지지 않으면 이 구성에서 바깥 텍스트를 지원하지 않는 브라우저를 사용하고 있을 수 있습니다. [[https://tiddlywiki.com/#ExternalText]]를 보세요</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "TiddlySpace에 로그인"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "\"<$text text=<<currentTiddler>>/>\" 티들러가 없습니다 - 만드려면 {{||$:/core/ui/Buttons/edit}}을 클릭하세요"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "아니오"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "공식 티들리위키 플러그인 라이브러리"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "tiddlywiki.com에서의 공식 티들리위키 플러그인 라이브러리입니다. 플러그인, 테마 및 언어 팩은 코어 팀이 유지 관리하고 있습니다."
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "플러그인의 바뀜을 적용할 수 있도록 하려면 저장 {{$:/core/ui/Buttons/save-wiki}}하고 나서 다시 불러오세요 {{$:/core/ui/Buttons/refresh}}"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "YYYY년 MMM DD일"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "이것은 시스템 티들러입니다"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "색"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "횟수"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "아이콘"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "정보"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "태그"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "YYYY년 MMM DD일 am hh12:0mm"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "티들리위키에 저장하지 않은 바뀜이 있습니다"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "예"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"type": "text/vnd.tiddlywiki",
"subtitle": "바뀜 다운로드",
"footer": "<$button message=\"tm-close-tiddler\">{{$:/language/Buttons/Close/Caption}}</$button>",
"help": "https://tiddlywiki.com/static/DownloadingChanges.html",
"text": "브라우저가 수동 저장만을 지원합니다.\n\n수정된 위키를 저장하려면, 아래 다운로드 링크를 오른쪽 클릭하여 \"파일 다운로드\" 또는 \"파일 저장\"을 선택하고 나서 폴더와 파일 이름을 선택하세요.\n\n//control 키 (Windows) 또는 options/alt 키 (OS X)로 링크를 클릭하여 좀 더 빨리 할 수 있습니다. 폴더 또는 파일 이름을 선택하라고 표시되지 않을 것이지만, 브라우저가 인식할 수 없는 이름을 줄 수도 있습니다 -- 유용하게 쓸 수 있기 전에 `.html` 확장자를 포함하는 파일 이름으로 바꿔야 할 수 있습니다.//\n\n파일 다운로드를 허용하지 않는 스마트폰에서는 링크를 북마크한 다음 위키가 정상적으로 저장할 수 있는 데스크톱 컴퓨터에 북마크를 동기화할 수 있습니다.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"type": "text/vnd.tiddlywiki",
"subtitle": "작업 저장",
"footer": "<$button message=\"tm-close-tiddler\">{{$:/language/Buttons/Close/Caption}}</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "이 위키의 바뀜을 티들리위키 HTML 파일로 저장해야 합니다.\n\n!!! 데스크톱 브라우저\n\n# ''파일'' 메뉴에서 ''다른 이름으로 저장''을 선택합니다\n# 파일 이름 및 위치를 선택합니다\n#* 어떤 브라우저는 파일 저장 형식을 ''웹페이지, HTML만'' 또는 이와 유사한 형식으로 명시적으로 지정할 필요가 있습니다\n# 이 탭을 닫습니다\n\n!!! 스마트폰 브라우저\n\n# 이 페이지로 북마크를 만듭니다\n#* iCloud 또는 Google 동기화 설정이 있다면 북마크는 자동으로 위와 같이 열고 저장할 수 있는 데스크톱에 자동으로 동기화됩니다\n# 이 탭을 닫습니다\n\n//모바일 Safari에서 북마크를 다시 연다면 이 메시지를 다시 볼 수 있습니다. 진행하고 파일을 사용하려면, 아래 ''닫기'' 버튼을 클릭하세요//\n"
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "일지"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "YYYY년 MMM DD일"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "위키를 저장했습니다"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "위키 저장을 시작하는 중"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "목록"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "필터"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "[[필터 표현식|https://tiddlywiki.com/static/Filters.html]]을 통해 검색합니다"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>>개 일치</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>>개 일치</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "모든 일치:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "제목 일치:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "검색"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "섀도우"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "섀도우 티들러에 대해 검색합니다"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>>개 일치</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "표준"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "표준 티들러에 대해 검색합니다"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>>개 일치</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "시스템"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "시스템 티들러에 대해 검색합니다"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>>개 일치</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "모두"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "목차"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "초안"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "없음"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "더 보기"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "열기"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "외톨이"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "최근"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "섀도우"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "시스템"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "태그"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "태그되지 않음"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "도구"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "형식"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "줄 없는 개인 웹 공책"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "내 티들리위키"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "태그별 티들러의 목록",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "매크로 정의",
"text": "\\define macroName(param1:\"기본 값\",param2)\n매크로의 텍스트\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "4열 3행으로 된 표",
"text": "|! |!알파 |!베타 |!감마 |!델타 |\n|!하나 | | | | |\n|!둘 | | | | |\n|!셋 | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "목차",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "테마 개조"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "''Vanilla'' 테마의 특정한 면들을 개조할 수 있습니다."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "옵션"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "사이드바 레이아웃"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "고정된 이야기, 흐르는 사이드바"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "흐르는 이야기, 고정된 사이드바"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "제목 고정"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "티들러 제목을 브라우저 창의 위에 \"고정\"합니다. 주의: Chrome으로는 전혀 작동되지 않으며, Firefox에서 일부 레이아웃 문제를 일으킵니다"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "코드 블럭에서 긴 줄을 줄바꿈"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "설정"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "글꼴 집합"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "코드 글꼴 집합"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "페이지 배경 그림"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "페이지 배경 그림 첨부"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "티들러로 스크롤"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "창에 고정"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "페이지 배경 그림 크기"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "자동"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "덮개"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "포함"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "크기"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "글자 크기"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "줄 높이"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "티들러 본문의 글자 크기"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "티들러 본문의 줄 높이"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "이야기 왼쪽 위치"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "이야기 강(티들러 영역)의 왼쪽 여백은<br>페이지의 왼쪽에서 얼마나 멉니까"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "이야기 위 위치"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "이야기 강의 위 여백은 페이지의 위에서<br>얼마나 멉니까"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "이야기 오른쪽"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "사이드바의 인쪽 여백은 페이지의<br>왼쪽에서 얼마나 멉니까"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "이야기 너비"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "이야기 강의 전반적인 너비"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "티들러 너비"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "이야기 강에서"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "사이드바 중단점"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "이야기 강과 사이드바가 나란이 나타나는<br>최소 페이지 너비"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "사이드바 너비"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "흐르는-고정된 레이아웃에서 사이드바의 너비"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "고급"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "없음"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "플러그인 자세한 사항"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "이 플러그인은 다음 섀도우 티들러를 포함합니다:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "섀도우 상태"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "<$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> 티들러는 섀도우 티들러가 아닙니다"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "일반 티들러를 덮어쓰고 있습니다"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "<$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> 티들러는 섀도우 티들러입니다"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "<$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link> 플러그인에 정의되어 있습니다"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "필드"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "목록"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "이 티들러는 목록에 없습니다"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "나열됨"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "이 티들러는 어떠한 것에도 나열되어 있지 않습니다"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "참조"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "이 티들러를 가리키는 것이 없습니다"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "태그함"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "이 티들러로 태그된 것이 없습니다"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "도구"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "자바스크립트 코드",
"name": "application/javascript",
"group": "개발자"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON 데이터",
"name": "application/json",
"group": "개발자"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "데이터 사전",
"name": "application/x-tiddler-dictionary",
"group": "개발자"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF 그림",
"name": "image/gif",
"group": "그림"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG 그림",
"name": "image/jpeg",
"group": "그림"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG 그림",
"name": "image/png",
"group": "그림"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics 그림",
"name": "image/svg+xml",
"group": "그림"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO 형식 아이콘 파일",
"name": "image/x-icon",
"group": "그림"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "정적 스타일시트",
"name": "text/css",
"group": "개발자"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML 마크업",
"name": "text/html",
"group": "텍스트"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "일반 텍스트",
"name": "text/plain",
"group": "텍스트"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "티들리위키 5",
"name": "text/vnd.tiddlywiki",
"group": "텍스트"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "티들리위키 클래식",
"name": "text/x-tiddlywiki",
"group": "텍스트"
},
"$:/languages/ko-KR/icon": {
"title": "$:/languages/ko-KR/icon",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"900\" height=\"600\" viewBox=\"-36 -24 72 48\">\n<title>Flag of South Korea</title>\n<rect fill=\"#fff\" x=\"-36\" y=\"-24\" width=\"72\" height=\"48\"/>\n<g transform=\"rotate(-56.3099325)\"><!--arctan(-3/2)-->\n<g id=\"b2\"><path id=\"b\" d=\"M-6-25H6M-6-22H6M-6-19H6\" stroke=\"#000\" stroke-width=\"2\"/>\n<use xlink:href=\"#b\" y=\"44\"/></g>\n<path stroke=\"#fff\" stroke-width=\"1\" d=\"M0,17v10\"/>\n<circle fill=\"#c60c30\" r=\"12\"/>\n<path fill=\"#003478\" d=\"M0-12A6,6 0 0 0 0,0A6,6 0 0 1 0,12A12,12 0 0,1 0-12Z\"/></g>\n<g transform=\"rotate(-123.6900675)\"><use xlink:href=\"#b2\"/>\n<path stroke=\"#fff\" stroke-width=\"1\" d=\"M0-23.5v3M0,17v3.5M0,23.5v3\"/></g></svg>"
}
}
}
{
"tiddlers": {
"$:/plugins/innoq/ace/aceplugin.js": {
"text": "/*\\\ntitle: $:/plugins/innoq/ace/aceplugin.js\ntype: application/javascript\nmodule-type: widget\n\nmaking the ace editor a widget\n\n\\*/\n\n(function() {\n \n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nif( $tw.browser ) {\n\trequire(\"$:/plugins/innoq/ace/ace.js\");\n}\n\nvar log = new $tw.utils.Logger(\"aceplugin\");\n\n//\n// overwrite log.log \n//\nlog.doLog = true;\nlog._log = log.log;\n\nlog.log = function() {\n\tif( log.doLog ) {\n\t\tlog._log.apply(this, arguments );\n\t}\n};\n\n/**\n * ctor\n * \n * parseTreeNode may look like this, if the editor is called to edit a tiddler:\n * {\"type\":\"edit-aceeditor\",\n *\t\t\"attributes\":{\n *\t\t\t\"tiddler\":{\"type\":\"string\",\"value\":\"Draft of 'New Tiddler'\"},\n *\t\t\t\"field\":{\"type\":\"string\",\"value\":\"text\"},\n *\t\t\t\"index\":{\"type\":\"string\"},\n *\t\t\t\"class\":{\"type\":\"string\",\"value\":\"tc-edit-texteditor\"},\n *\t\t\t\"placeholder\":{\"type\":\"string\",\"value\":\"Type the text for this tiddler\"}\n *\t\t}\n *\t}\n * \n * @param {type} parseTreeNode\n * @param {type} options\n * @returns {aceplugin_L10.AceEditor}\n */\nvar AceEditor = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tlog.log( \"ctor: \" + JSON.stringify(parseTreeNode) + \", \" + options.attributes );\n};\n\n\n/*\nInherit from the base widget class\n*/\nAceEditor.prototype = new Widget();\n\nAceEditor.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t\n\tthis.parentDomNode = parent;\n\t\n\t// create a DOM node to hold the editor\n\tthis.domNode = this.document.createElement(\"pre\");\n\tthis.domNode.setAttribute(\"style\",\"height: 464px;\");\n\n\tparent.insertBefore(this.domNode,nextSibling);\n\n\t\n\t// fullfil Widget contract\n\tthis.renderChildren(parent,nextSibling);\n\tthis.domNodes.push( this.domNode );\n\t\n\t// Compute our attributes\n\tthis.computeAttributes();\n\n\t// Execute our logic\n\tthis.execute();\n\t\n\t// grab the value\n\tvar myText = document.createTextNode(this.getEditInfo().value);\n\n\t// add text to DOM and start ace \n\tthis.domNode.appendChild(myText);\n\tthis.editor = ace.edit(this.domNode);\n\n\t//\n\t// add change handler\n\t//\n\tthis.editor.getSession().on('change', function(e) {\n\t\tvar editInfo\t= self.getEditInfo();\n\t\tvar text\t\t= self.editor.getValue();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t}); \n};\n\n\n/**\n * \n * @returns {undefined}\n */\nAceEditor.prototype.execute = function() {\n\tvar self = this;\n\n\t// \n\t// copied from edit-codemirrors.js\n\t// remember the edit context, WHAT is actually edited\n\t//\n\tthis.editTitle\t\t= this.getAttribute(\"tiddler\", this.getVariable(\"currentTiddler\"));\n\tthis.editField\t\t= this.getAttribute(\"field\", \"text\");\n\tthis.editIndex\t\t= this.getAttribute(\"index\");\n\tthis.editDefault\t= this.getAttribute(\"default\");\n\tthis.editType\t\t= this.getAttribute(\"type\");\n\t\n\t// make child widgets\n\t// probably not needed bc. the editor does not have any child widgets\n\tthis.makeChildWidgets();\n};\n\n\n/**\n * Get the tiddler being edited and current value\n * copied from EditTextWidget, seems to be all the same also in codemirror plugin\n*/\nAceEditor.prototype.getEditInfo = function() {\n\t// Get the edit value\n\tvar self = this,\n\t\tvalue,\n\t\tupdate;\n\tif(this.editIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\tupdate = function(value) {\n\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// Get the current tiddler and the field name\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t} else {\n\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\tswitch(this.editField) {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\n\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\tvalue = this.editDefault;\n\t\t\t}\n\t\t}\n\t\tupdate = function(value) {\n\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\tupdateFields = {\n\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t};\n\t\t\tupdateFields[self.editField] = value;\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t};\n\t}\n\treturn {value: value, update: update};\n};\n\n\n/** \n * Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n * \n * the meaning of the return flag is unknown (to me)\n */\nAceEditor.prototype.refresh = function(changedTiddlers) {\n\t\n\t// \n\tvar changedAttributes = this.computeAttributes();\n\t\n\t// Completely rerender if any of our attributes have changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.editTitle]) {\n\t\t// update myself\n\t\tthis.updateEditor(this.getEditInfo().value);\n\t\treturn true;\n\t}\n\n\tlog.log( \"refresh: changedTiddlers: \" + JSON.stringify( changedTiddlers ) + \"; changedAttributes: \" + JSON.stringify( changedAttributes ) );\n\t\n\treturn false;\n};\n\n\n/**\n * update editor with changed text\n * @param {type} text\n * @returns {undefined}\n */\nAceEditor.prototype.updateEditor = function(text) {\n\t\t\n\t// this is for sure not what it's meant to be, but I don't know it better for the moment\n\t// just do nothing\n\t// \n\t//this.refreshSelf(); cannot be used, bc. it rebuilds the widget and resets the focus\n};\n\n\n//\n// exports\n//\n\n// the widget\nexports.aceeditor = AceEditor;\n\n// when aceditor is configured for a certain content-type in the $:/config/EditorTypeMappings/xxx/yyy tiddlers\n// (e.g. $:/config/EditorTypeMappings/text/vnd.tiddlywiki), 'edit-aceeditor' is looked for\nexports[\"edit-aceeditor\"] = AceEditor;\n\n})();",
"title": "$:/plugins/innoq/ace/aceplugin.js",
"type": "application/javascript",
"module-type": "widget"
},
"$:/config/EditorTypeMappings/application/javascript": {
"title": "$:/config/EditorTypeMappings/application/javascript",
"text": "aceeditor"
},
"$:/config/EditorTypeMappings/application/json": {
"title": "$:/config/EditorTypeMappings/application/json",
"text": "aceeditor"
},
"$:/config/EditorTypeMappings/application/x-tiddler-dictionary": {
"title": "$:/config/EditorTypeMappings/application/x-tiddler-dictionary",
"text": "aceeditor"
},
"$:/config/EditorTypeMappings/text/css": {
"title": "$:/config/EditorTypeMappings/text/css",
"text": "aceeditor"
},
"$:/config/EditorTypeMappings/text/html": {
"title": "$:/config/EditorTypeMappings/text/html",
"text": "aceeditor"
},
"$:/config/EditorTypeMappings/text/plain": {
"title": "$:/config/EditorTypeMappings/text/plain",
"text": "aceeditor"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "aceeditor"
},
"$:/config/EditorTypeMappings/text/x-tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/x-tiddlywiki",
"text": "aceeditor"
},
"$:/plugins/innoq/ace/ace.js": {
"type": "application/javascript",
"title": "$:/plugins/innoq/ace/ace.js",
"module-type": "library",
"text": "(function(){function s(r){var i=function(e,t){return n(\"\",e,t)},s=e;r&&(e[r]||(e[r]={}),s=e[r]);if(!s.define||!s.define.packaged)t.original=s.define,s.define=t,s.define.packaged=!0;if(!s.require||!s.require.packaged)n.original=s.require,s.require=i,s.require.packaged=!0}var ACE_NAMESPACE=\"\",e=function(){return this}();if(!ACE_NAMESPACE&&typeof requirejs!=\"undefined\")return;var t=function(e,n,r){if(typeof e!=\"string\"){t.original?t.original.apply(window,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace());return}arguments.length==2&&(r=n),t.modules||(t.modules={},t.payloads={}),t.payloads[e]=r,t.modules[e]=null},n=function(e,t,r){if(Object.prototype.toString.call(t)===\"[object Array]\"){var s=[];for(var o=0,u=t.length;o<u;++o){var a=i(e,t[o]);if(!a&&n.original)return n.original.apply(window,arguments);s.push(a)}r&&r.apply(null,s)}else{if(typeof t==\"string\"){var f=i(e,t);return!f&&n.original?n.original.apply(window,arguments):(r&&r(),f)}if(n.original)return n.original.apply(window,arguments)}},r=function(e,t){if(t.indexOf(\"!\")!==-1){var n=t.split(\"!\");return r(e,n[0])+\"!\"+r(e,n[1])}if(t.charAt(0)==\".\"){var i=e.split(\"/\").slice(0,-1).join(\"/\");t=i+\"/\"+t;while(t.indexOf(\".\")!==-1&&s!=t){var s=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return t},i=function(e,i){i=r(e,i);var s=t.modules[i];if(!s){s=t.payloads[i];if(typeof s==\"function\"){var o={},u={id:i,uri:\"\",exports:o,packaged:!0},a=function(e,t){return n(i,e,t)},f=s(a,o,u);o=f||u.exports,t.modules[i]=o,delete t.payloads[i]}s=t.modules[i]=o||s}return s};s(ACE_NAMESPACE)})(),define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function o(e){return(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.extended?\"x\":\"\")+(e.sticky?\"y\":\"\")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,\"\")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,\"\"),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e==\"string\"&&t){!i&&t.length>1&&u(t,\"\")>-1&&(a=RegExp(this.source,r.replace.call(o(this),\"g\",\"\")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}}),define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],function(e,t,n){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\")}),define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=\"http://www.w3.org/1999/xhtml\";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||r,e):document.createElement(e)},t.hasCssClass=function(e,t){var n=(e.className||\"\").split(/\\s+/g);return n.indexOf(t)!==-1},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=\" \"+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\\s+/g);for(;;){var r=n.indexOf(t);if(r==-1)break;n.splice(r,1)}e.className=n.join(\" \")},t.toggleCssClass=function(e,t){var n=e.className.split(/\\s+/g),r=!0;for(;;){var i=n.indexOf(t);if(i==-1)break;r=!1,n.splice(i,1)}return r&&n.push(t),e.className=n.join(\" \"),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n=0,r;t=t||document;if(t.createStyleSheet&&(r=t.styleSheets)){while(n<r.length)if(r[n++].owningElement.id===e)return!0}else if(r=t.getElementsByTagName(\"style\"))while(n<r.length)if(r[n++].id===e)return!0;return!1},t.importCssString=function(n,i,s){s=s||document;if(i&&t.hasCssString(i,s))return null;var o;s.createStyleSheet?(o=s.createStyleSheet(),o.cssText=n,i&&(o.owningElement.id=i)):(o=s.createElementNS?s.createElementNS(r,\"style\"):s.createElement(\"style\"),o.appendChild(s.createTextNode(n)),i&&(o.id=i),t.getDocumentHead(s).appendChild(o))},t.importCssStylsheet=function(e,n){if(n.createStyleSheet)n.createStyleSheet(e);else{var r=t.createElement(\"link\");r.rel=\"stylesheet\",r.href=e,t.getDocumentHead(n).appendChild(r)}},t.getInnerWidth=function(e){return parseInt(t.computedStyle(e,\"paddingLeft\"),10)+parseInt(t.computedStyle(e,\"paddingRight\"),10)+e.clientWidth},t.getInnerHeight=function(e){return parseInt(t.computedStyle(e,\"paddingTop\"),10)+parseInt(t.computedStyle(e,\"paddingBottom\"),10)+e.clientHeight};if(typeof document==\"undefined\")return;window.pageYOffset!==undefined?(t.getPageScrollTop=function(){return window.pageYOffset},t.getPageScrollLeft=function(){return window.pageXOffset}):(t.getPageScrollTop=function(){return document.body.scrollTop},t.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?t.computedStyle=function(e,t){return t?(window.getComputedStyle(e,\"\")||{})[t]||\"\":window.getComputedStyle(e,\"\")||{}}:t.computedStyle=function(e,t){return t?e.currentStyle[t]:e.currentStyle},t.scrollbarWidth=function(e){var n=t.createElement(\"ace_inner\");n.style.width=\"100%\",n.style.minWidth=\"0px\",n.style.height=\"200px\",n.style.display=\"block\";var r=t.createElement(\"ace_outer\"),i=r.style;i.position=\"absolute\",i.left=\"-10000px\",i.overflow=\"hidden\",i.width=\"200px\",i.minWidth=\"0px\",i.height=\"150px\",i.display=\"block\",r.appendChild(n);var s=e.documentElement;s.appendChild(r);var o=n.offsetWidth;i.overflow=\"scroll\";var u=n.offsetWidth;return o==u&&(u=r.clientWidth),s.removeChild(r),o-u},t.setInnerHtml=function(e,t){var n=e.cloneNode(!1);return n.innerHTML=t,e.parentNode.replaceChild(n,e),n},\"textContent\"in document.documentElement?(t.setInnerText=function(e,t){e.textContent=t},t.getInnerText=function(e){return e.textContent}):(t.setInnerText=function(e,t){e.innerText=t},t.getInnerText=function(e){return e.innerText}),t.getParentWindow=function(e){return e.defaultView||e.parentWindow}}),define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";e(\"./fixoldbrowsers\");var r=e(\"./oop\"),i=function(){var e={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,\"super\":8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"}},t,n;for(n in e.FUNCTION_KEYS)t=e.FUNCTION_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);for(n in e.PRINTABLE_KEYS)t=e.PRINTABLE_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e[\"return\"],e.escape=e.esc,e.del=e[\"delete\"],e[173]=\"-\",function(){var t=[\"cmd\",\"ctrl\",\"alt\",\"shift\"];for(var n=Math.pow(2,t.length);n--;)e.KEY_MODS[n]=t.filter(function(t){return n&e.KEY_MODS[t]}).join(\"-\")+\"-\"}(),e.KEY_MODS[0]=\"\",e.KEY_MODS[-1]=\"input\",e}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return typeof t!=\"string\"&&(t=String.fromCharCode(e)),t.toLowerCase()}}),define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};if(typeof navigator!=\"object\")return;var r=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase(),i=navigator.userAgent;t.isWin=r==\"win\",t.isMac=r==\"mac\",t.isLinux=r==\"linux\",t.isIE=navigator.appName==\"Microsoft Internet Explorer\"||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((i.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&window.navigator.product===\"Gecko\",t.isOldGecko=t.isGecko&&parseInt((i.match(/rv\\:(\\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)==\"[object Opera]\",t.isWebKit=parseFloat(i.split(\"WebKit/\")[1])||undefined,t.isChrome=parseFloat(i.split(\" Chrome/\")[1])||undefined,t.isAIR=i.indexOf(\"AdobeAIR\")>=0,t.isIPad=i.indexOf(\"iPad\")>=0,t.isTouchPad=i.indexOf(\"TouchPad\")>=0,t.isChromeOS=i.indexOf(\" CrOS \")>=0}),define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e,t,n){var o=s(t);if(!i.isMac&&u){if(u[91]||u[92])o|=8;if(u.altGr){if((3&o)==3)return;u.altGr=0}if(n===18||n===17){var f=\"location\"in t?t.location:t.keyLocation;if(n===17&&f===1)a=t.timeStamp;else if(n===18&&o===3&&f===2){var l=-a;a=t.timeStamp,l+=a,l<3&&(u.altGr=!0)}}}if(n in r.MODIFIER_KEYS){switch(r.MODIFIER_KEYS[n]){case\"Alt\":o=2;break;case\"Shift\":o=4;break;case\"Ctrl\":o=1;break;default:o=8}n=-1}o&8&&(n===91||n===93)&&(n=-1);if(!o&&n===13){var f=\"location\"in t?t.location:t.keyLocation;if(f===3){e(t,o,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&o&8){e(t,o,n);if(t.defaultPrevented)return;o&=-9}return!!o||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,o,n):!1}var r=e(\"./keys\"),i=e(\"./useragent\");t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent(\"on\"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent(\"on\"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type==\"dblclick\"?0:e.type==\"contextmenu\"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,\"mousemove\",n,!0),t.removeListener(document,\"mouseup\",i,!0),t.removeListener(document,\"dragstart\",i,!0)}return t.addListener(document,\"mousemove\",n,!0),t.addListener(document,\"mouseup\",i,!0),t.addListener(document,\"dragstart\",i,!0),i},t.addMouseWheelListener=function(e,n){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):\"onwheel\"in e?t.addListener(e,\"wheel\",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,\"DOMMouseScroll\",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){var o=0,u,a,f,l={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};t.addListener(e,\"mousedown\",function(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s](\"mousedown\",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}),i.isOldIE&&t.addListener(e,\"dblclick\",function(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s](\"mousedown\",e),r[s](l[o],e)})};var s=!i.isMac||!i.isOpera||\"KeyboardEvent\"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[s(e)]};var u=null,a=0;t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!(\"KeyboardEvent\"in window)){var s=null;r(e,\"keydown\",function(e){s=e.keyCode}),r(e,\"keypress\",function(e){return o(n,e,s)})}else{var a=null;r(e,\"keydown\",function(e){u[e.keyCode]=!0;var t=o(n,e,e.keyCode);return a=e.defaultPrevented,t}),r(e,\"keypress\",function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)}),r(e,\"keyup\",function(e){u[e.keyCode]=null}),u||(u=Object.create(null),r(window,\"focus\",function(e){u=Object.create(null)}))}};if(window.postMessage&&!i.isOldIE){var f=1;t.nextTick=function(e,n){n=n||window;var r=\"zero-timeout-message-\"+f;t.addListener(n,\"message\",function i(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,\"message\",i),e())}),n.postMessage(r,\"*\")}}t.nextFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame,t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function(e){if(typeof e!=\"object\"||!e)return e;var n=e.constructor;if(n===RegExp)return e;var r=n();for(var i in e)typeof e[i]==\"object\"?r[i]=t.deepCopy(e[i]):r[i]=e[i];return r},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&\").replace(/\"/g,\""\").replace(/'/g,\"'\").replace(/</g,\"<\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/dom\"),o=e(\"../lib/lang\"),u=i.isChrome<18,a=i.isIE,f=function(e,t){function b(e){if(h)return;if(k)t=0,r=e?0:n.value.length-1;else var t=e?2:1,r=2;try{n.setSelectionRange(t,r)}catch(i){}}function w(){if(h)return;n.value=f,i.isWebKit&&y.schedule()}function R(){clearTimeout(q),q=setTimeout(function(){p&&(n.style.cssText=p,p=\"\"),t.renderer.$keepTextAreaAtCursor==null&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},i.isOldIE?200:0)}var n=s.createElement(\"textarea\");n.className=\"ace_text-input\",i.isTouchPad&&n.setAttribute(\"x-palm-disable-auto-cap\",!0),n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",i.isOldIE&&(n.style.top=\"-100px\"),e.insertBefore(n,e.firstChild);var f=\"\u0001\u0001\",l=!1,c=!1,h=!1,p=\"\",d=!0;try{var v=document.activeElement===n}catch(m){}r.addListener(n,\"blur\",function(e){t.onBlur(e),v=!1}),r.addListener(n,\"focus\",function(e){v=!0,t.onFocus(e),b()}),this.focus=function(){n.style.position=\"fixed\",n.style.top=\"-10000000px\",n.focus(),setTimeout(function(){n.style.position=\"\"},0)},this.blur=function(){n.blur()},this.isFocused=function(){return v};var g=o.delayedCall(function(){v&&b(d)}),y=o.delayedCall(function(){h||(n.value=f,v&&b())});i.isWebKit||t.addEventListener(\"changeSelection\",function(){t.selection.isEmpty()!=d&&(d=!d,g.schedule())}),w(),v&&t.onFocus();var E=function(e){return e.selectionStart===0&&e.selectionEnd===e.value.length};!n.setSelectionRange&&n.createTextRange&&(n.setSelectionRange=function(e,t){var n=this.createTextRange();n.collapse(!0),n.moveStart(\"character\",e),n.moveEnd(\"character\",t),n.select()},E=function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return!t||t.parentElement()!=e?!1:t.text==e.value});if(i.isOldIE){var S=!1,x=function(e){if(S)return;var t=n.value;if(h||!t||t==f)return;if(e&&t==f[0])return T.schedule();A(t),S=!0,w(),S=!1},T=o.delayedCall(x);r.addListener(n,\"propertychange\",x);var N={13:1,27:1};r.addListener(n,\"keyup\",function(e){h&&(!n.value||N[e.keyCode])&&setTimeout(F,0);if((n.value.charCodeAt(0)||0)<129)return T.call();h?j():B()}),r.addListener(n,\"keydown\",function(e){T.schedule(50)})}var C=function(e){l?l=!1:E(n)?(t.selectAll(),b()):k&&b(t.selection.isEmpty())},k=null;this.setInputHandler=function(e){k=e},this.getInputHandler=function(){return k};var L=!1,A=function(e){k&&(e=k(e),k=null),c?(b(),e&&t.onPaste(e),c=!1):e==f.charAt(0)?L?t.execCommand(\"del\",{source:\"ace\"}):t.execCommand(\"backspace\",{source:\"ace\"}):(e.substring(0,2)==f?e=e.substr(2):e.charAt(0)==f.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==f.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==f.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),L&&(L=!1)},O=function(e){if(h)return;var t=n.value;A(t),w()},M=function(e,t){var n=e.clipboardData||window.clipboardData;if(!n||u)return;var r=a?\"Text\":\"text/plain\";return t?n.setData(r,t)!==!1:n.getData(r)},_=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);M(e,s)?(i?t.onCut():t.onCopy(),r.preventDefault(e)):(l=!0,n.value=s,n.select(),setTimeout(function(){l=!1,w(),b(),i?t.onCut():t.onCopy()}))},D=function(e){_(e,!0)},P=function(e){_(e,!1)},H=function(e){var s=M(e);typeof s==\"string\"?(s&&t.onPaste(s),i.isIE&&setTimeout(b),r.preventDefault(e)):(n.value=\"\",c=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,\"select\",C),r.addListener(n,\"input\",O),r.addListener(n,\"cut\",D),r.addListener(n,\"copy\",P),r.addListener(n,\"paste\",H),(!(\"oncut\"in n)||!(\"oncopy\"in n)||!(\"onpaste\"in n))&&r.addListener(e,\"keydown\",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:P(e);break;case 86:H(e);break;case 88:D(e)}});var B=function(e){if(h||!t.onCompositionStart||t.$readOnly)return;h={},t.onCompositionStart(),setTimeout(j,0),t.on(\"mousedown\",F),t.selection.isEmpty()||(t.insert(\"\"),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup()},j=function(){if(!h||!t.onCompositionUpdate||t.$readOnly)return;var e=n.value.replace(/\\x01/g,\"\");if(h.lastValue===e)return;t.onCompositionUpdate(e),h.lastValue&&t.undo(),h.lastValue=e;if(h.lastValue){var r=t.selection.getRange();t.insert(h.lastValue),t.session.markUndoGroup(),h.range=t.selection.getRange(),t.selection.setRange(r),t.selection.clearSelection()}},F=function(e){if(!t.onCompositionEnd||t.$readOnly)return;var r=h;h=!1;var i=setTimeout(function(){i=null;var e=n.value.replace(/\\x01/g,\"\");if(h)return;e==r.lastValue?w():!r.lastValue&&e&&(w(),A(e))});k=function(n){return i&&clearTimeout(i),n=n.replace(/\\x01/g,\"\"),n==r.lastValue?\"\":(r.lastValue&&i&&t.undo(),n)},t.onCompositionEnd(),t.removeListener(\"mousedown\",F),e.type==\"compositionend\"&&r.range&&t.selection.setRange(r.range)},I=o.delayedCall(j,50);r.addListener(n,\"compositionstart\",B),i.isGecko?r.addListener(n,\"text\",function(){I.schedule()}):(r.addListener(n,\"keyup\",function(){I.schedule()}),r.addListener(n,\"keydown\",function(){I.schedule()})),r.addListener(n,\"compositionend\",F),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){L=!0,b(t.selection.isEmpty()),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){if(!o&&i.isOldIE)return;p||(p=n.style.cssText),n.style.cssText=(o?\"z-index:100000;\":\"\")+\"height:\"+n.style.height+\";\"+(i.isIE?\"opacity:0.1;\":\"\");var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+\"px\",n.style.top=Math.min(e.clientY-f-2,c)+\"px\"};h(e);if(e.type!=\"mousedown\")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),i.isWin&&!i.isOldIE&&r.capture(t.container,h,R)},this.onContextMenuClose=R;var q,U=function(e){t.textInput.onContextMenu(e),R()};r.addListener(t.renderer.scroller,\"contextmenu\",U),r.addListener(n,\"contextmenu\",U)};t.TextInput=f}),define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function u(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e));var n=[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function a(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function f(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\"),o=0;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,i=e.getButton();if(i!==0){var s=r.getSelectionRange(),o=s.isEmpty();r.$blockScrolling++,o&&r.selection.moveToPosition(n),r.$blockScrolling--,r.textInput.onContextMenu(e.domEvent);return}this.mousedownEvent.time=Date.now();if(t&&!r.isFocused()){r.focus();if(this.$focusTimout&&!this.$clickSelection&&!r.inMultiSelectMode){this.setState(\"focusWait\"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);t.$blockScrolling++;if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=f(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);n.$blockScrolling++;if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=f(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>o||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState(\"select\")):(i=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(u.prototype),t.DefaultHandlers=u}),define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\");(function(){this.$init=function(){return this.$element=i.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(s.prototype),t.Tooltip=s}),define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],function(e,t,n){\"use strict\";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join(\"<br/>\"),i.setHtml(f),i.show(),t.on(\"mousewheel\",c);if(e.$tooltipFollowsMouse)h(u);else{var p=n.$cells[t.session.documentToScreenRow(r,0)].element,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+\"px\",v.top=d.bottom+\"px\"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t.removeEventListener(\"mousewheel\",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler(\"guttermousedown\",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i==\"foldWidgets\")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState(\"selectByLines\"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler(\"guttermousemove\",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,\"ace_fold-widget\"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,\"mouseout\",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on(\"changeSession\",c)}function a(e){o.call(this,e)}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/event\"),o=e(\"../tooltip\").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left<a.x.right?-3:2),l/i<=1&&(c.row+=a.y.top<a.y.bottom?-1:1);var h=e.row!=c.row,v=e.column!=c.column,m=!n||e.row!=n.row;h||v&&!m?E?r-E>=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,\"mousemove\",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(m),t.$blockScrolling-=1,t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,\"mousemove\",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e==\"text/plain\"||e==\"Text\"})}function _(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"],r=s.isMac?e.altKey:e.ctrlKey,i=\"uninitialized\";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o=\"none\";return r&&t.indexOf(i)>=0?o=\"copy\":n.indexOf(i)>=0?o=\"move\":t.indexOf(i)>=0&&(o=\"copy\"),o}var t=e.editor,n=r.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",s.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");var f=[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData(\"Text\",t.session.getTextRange()),w=!0,this.setState(\"drag\")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n==\"move\"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case\"move\":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case\"copy\":m=t.moveText(m,g,!0)}else{var r=n.getData(\"Text\");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,\"dragstart\",this.onDragStart.bind(e)),i.addListener(c,\"dragend\",this.onDragEnd.bind(e)),i.addListener(c,\"dragenter\",this.onDragEnter.bind(e)),i.addListener(c,\"dragover\",this.onDragOver.bind(e)),i.addListener(c,\"dragleave\",this.onDragLeave.bind(e)),i.addListener(c,\"drop\",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var n=s.isWin?\"default\":\"move\";e.renderer.setCursorStyle(n),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state==\"dragReady\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state===\"dragWait\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;\"unselectable\"in o&&(o.unselectable=\"on\");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"./dom\");t.get=function(e,t){var n=new XMLHttpRequest;n.open(\"GET\",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement(\"script\");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState==\"loaded\"||i.readyState==\"complete\")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}}),define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"no use strict\";function o(e){typeof console!=\"undefined\"&&console.warn&&console.warn.apply(console,arguments)}function u(e,t){var n=new Error(e);n.data=t,typeof console==\"object\"&&console.error&&console.error(n),setTimeout(function(){throw n})}var r=e(\"./oop\"),i=e(\"./event_emitter\").EventEmitter,s={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};return e?Array.isArray(e)||(t=e,e=Object.keys(t)):e=Object.keys(this.$options),e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this[\"$\"+e]===t)return;var n=this.$options[e];if(!n)return o('misspelled option \"'+e+'\"');if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this[\"$\"+e]=t),n&&n.set&&n.set.call(this,t)},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:o('misspelled option \"'+e+'\"')}},a=function(){this.$defaultOptions={}};(function(){r.implement(this,i),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach(function(t){var r=n[t];typeof r==\"string\"&&(r={forwardTo:r}),r.name||(r.name=t),e.$options[r.name]=r,\"initialValue\"in r&&(e[\"$\"+r.name]=r.initialValue)}),r.implement(e,s),this},this.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var n=e.$options[t];\"value\"in n&&e.setOption(t,n.value)})},this.setDefaultValue=function(e,t,n){var r=this.$defaultOptions[e]||(this.$defaultOptions[e]={});r[t]&&(r.forwardTo?this.setDefaultValue(r.forwardTo,t,n):r[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach(function(n){this.setDefaultValue(e,n,t[n])},this)},this.warn=o,this.reportError=u}).call(a.prototype),t.AppConfig=a}),define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],function(e,t,n){\"no use strict\";function f(r){a.packaged=r||e.packaged||n.packaged||u.define&&define.packaged;if(!u.document)return\"\";var i={},s=\"\",o=document.currentScript||document._currentScript,f=o&&o.ownerDocument||document,c=f.getElementsByTagName(\"script\");for(var h=0;h<c.length;h++){var p=c[h],d=p.src||p.getAttribute(\"src\");if(!d)continue;var v=p.attributes;for(var m=0,g=v.length;m<g;m++){var y=v[m];y.name.indexOf(\"data-ace-\")===0&&(i[l(y.name.replace(/^data-ace-/,\"\"))]=y.value)}var b=d.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);b&&(s=b[1])}s&&(i.base=i.base||s,i.packaged=!0),i.basePath=i.base,i.workerPath=i.workerPath||i.base,i.modePath=i.modePath||i.base,i.themePath=i.themePath||i.base,delete i.base;for(var w in i)typeof i[w]!=\"undefined\"&&t.set(w,i[w])}function l(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./lib/net\"),o=e(\"./lib/app_config\").AppConfig;n.exports=t=new o;var u=function(){return this}(),a={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{}};t.get=function(e){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return a[e]},t.set=function(e,t){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);a[e]=t},t.all=function(){return r.copyObject(a)},t.moduleUrl=function(e,t){if(a.$moduleUrls[e])return a.$moduleUrls[e];var n=e.split(\"/\");t=t||n[n.length-2]||\"\";var r=t==\"snippets\"?\"/\":\"-\",i=n[n.length-1];if(t==\"worker\"&&r==\"-\"){var s=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\");i=i.replace(s,\"\")}(!i||i==t)&&n.length>1&&(i=n[n.length-2]);var o=a[t+\"Path\"];return o==null?o=a.basePath:r==\"/\"&&(t=r=\"\"),o&&o.slice(-1)!=\"/\"&&(o+=\"/\"),o+t+r+i+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit(\"load.module\",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get(\"packaged\"))return a();s.loadScript(t.moduleUrl(n,o),a)},t.init=f}),define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"./default_handlers\").DefaultHandlers,o=e(\"./default_gutter_handler\").GutterHandler,u=e(\"./mouse_event\").MouseEvent,a=e(\"./dragdrop_handler\").DragdropHandler,f=e(\"../config\"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){(!document.hasFocus||!document.hasFocus())&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,\"click\",this.onMouseEvent.bind(this,\"click\")),r.addListener(u,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\")),r.addMultiMouseDownListener(u,[400,300,250],this,\"onMouseEvent\"),e.renderer.scrollBarV&&(r.addMultiMouseDownListener(e.renderer.scrollBarV.inner,[400,300,250],this,\"onMouseEvent\"),r.addMultiMouseDownListener(e.renderer.scrollBarH.inner,[400,300,250],this,\"onMouseEvent\"),i.isIE&&(r.addListener(e.renderer.scrollBarV.element,\"mousedown\",n),r.addListener(e.renderer.scrollBarH.element,\"mousedown\",n))),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\"));var f=e.renderer.$gutter;r.addListener(f,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\")),r.addListener(f,\"click\",this.onMouseEvent.bind(this,\"gutterclick\")),r.addListener(f,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\")),r.addListener(f,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\")),r.addListener(u,\"mousedown\",n),r.addListener(f,\"mousedown\",function(t){return e.focus(),r.preventDefault(t)}),e.on(\"mousemove\",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle(\"default\"):s.setCursorStyle(\"\")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){if(!e)return;if(i.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new u(e,s.editor),s.$mouseMoved=!0},a=function(e){clearInterval(l),f(),s[s.state+\"End\"]&&s[s.state+\"End\"](e),s.state=\"\",n.$keepTextAreaAtCursor==null&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent(\"mouseup\",e)},f=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type==\"dblclick\")return setTimeout(function(){a(e)});s.$onCaptureMouseMove=o,s.releaseMouse=r.capture(this.editor.container,o,a);var l=setInterval(f,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!=\"contextmenu\")return;this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)}}).call(l.prototype),f.defineOptions(l.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e){e.on(\"click\",function(t){var n=t.getDocumentPosition(),r=e.session,i=r.getFoldAt(n.row,n.column,1);i&&(t.getAccelKey()?r.removeFold(i):r.expandFold(i),t.stop())}),e.on(\"gutterclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on(\"gutterdblclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold(\"...\",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}t.FoldHandler=r}),define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),i=e(\"../lib/event\"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e==\"function\"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||\"\"}).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command==\"null\"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){var t=this.$callKeyboardHandlers(-1,e);t||this.$editor.commands.exec(\"insertstring\",this.$editor,e)}}).call(s.prototype),t.KeyBinding=s}),define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.lead=this.selectionLead=this.doc.createAnchor(0,0),this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var t=this;this.lead.on(\"change\",function(e){t._emit(\"changeCursor\"),t.$isEmpty||t._emit(\"changeSelection\"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.selectionAnchor.on(\"change\",function(){t.$isEmpty||t._emit(\"changeSelection\")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return this.isEmpty()?!1:this.getRange().isMultiLine()},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.anchor.setPosition(e,t),this.$isEmpty&&(this.$isEmpty=!1,this._emit(\"changeSelection\"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.shiftSelection=function(e){if(this.$isEmpty){this.moveCursorTo(this.lead.row,this.lead.column+e);return}var t=this.getSelectionAnchor(),n=this.getSelectionLead(),r=this.isBackwards();(!r||t.column!==0)&&this.setSelectionAnchor(t.row,t.column+e),(r||n.column!==0)&&this.$moveSelection(function(){this.moveCursorTo(n.row,n.column+e)})},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t==\"undefined\"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e==\"number\"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-n,e.column).split(\" \").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize(),e=this.lead;this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column,e.column+n).split(\" \").length-1==n?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),r=this.session.screenToDocumentPosition(n,0),i=this.session.getDisplayLine(e,null,r.row,r.column),s=i.match(/^\\s*/);s[0].length!=t&&!this.session.$useEmacsStyleLineStart&&(r.column+=s[0].length),this.moveCursorToPosition(r)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var r=n.search(/\\s+$/);r>0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s){this.moveCursorTo(s.end.row,s.end.column);return}if(i=this.session.nonTokenRe.exec(r))t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t);if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e<this.doc.getLength()-1&&this.moveCursorWordRight();return}if(i=this.session.tokenRe.exec(r))t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.moveCursorLongWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1)){this.moveCursorTo(n.start.row,n.start.column);return}var r=this.session.getFoldStringAt(e,t,-1);r==null&&(r=this.doc.getLine(e).substring(0,t));var s=i.stringReverse(r),o;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;if(o=this.session.nonTokenRe.exec(s))t-=this.session.nonTokenRe.lastIndex,s=s.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0;if(t<=0){this.moveCursorTo(e,0),this.moveCursorLeft(),e>0&&this.moveCursorWordLeft();return}if(o=this.session.tokenRe.exec(s))t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t,n=0,r,i=/\\s/,s=this.session.tokenRe;s.lastIndex=0;if(t=this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((r=e[n])&&i.test(r))n++;if(n<1){s.lastIndex=0;while((r=e[n])&&!s.test(r)){s.lastIndex=0,n++;if(i.test(r)){if(n>2){n--;break}while((r=e[n])&&i.test(r))n++;if(n>2)break}}}}return s.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e<s&&/^\\s*$/.test(r));/^\\s+/.test(r)||(r=\"\"),t=0}var o=this.$shortWordEndIndex(r);this.moveCursorTo(e,t+o)},this.moveCursorShortWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1))return this.moveCursorTo(n.start.row,n.start.column);var r=this.session.getLine(e).substring(0,t);if(t===0){do e--,r=this.doc.getLine(e);while(e>0&&/^\\s*$/.test(r));t=r.length,/\\s+$/.test(r)||(r=\"\")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);t===0&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var r=this.session.screenToDocumentPosition(n.row+e,n.column);e!==0&&t===0&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&r.row++,this.moveCursorTo(r.row,r.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e.call(null,this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e.isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"./config\"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:\"text\"},o=\"g\",u=[];for(var a=0;a<n.length;a++){var f=n[a];f.defaultToken&&(s.defaultToken=f.defaultToken),f.caseInsensitive&&(o=\"gi\");if(f.regex==null)continue;f.regex instanceof RegExp&&(f.regex=f.regex.toString().slice(1,-1));var l=f.regex,c=(new RegExp(\"(?:(\"+l+\")|(.))\")).exec(\"a\").length-2;Array.isArray(f.token)?f.token.length==1||c==1?f.token=f.token[0]:c-1!=f.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:f,groupCount:c-1}),f.token=f.token[0]):(f.tokenArray=f.token,f.token=null,f.onMatch=this.$arrayTokens):typeof f.token==\"function\"&&!f.onMatch&&(c>1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\\\\d/.test(f.regex)?l=f.regex.replace(/\\\\([0-9]+)/g,function(e,t){return\"\\\\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!=\"string\"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push(\"$\")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp(\"(\"+r.join(\")|(\")+\")|($)\",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n==\"string\")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;i<s;i++)t[i]&&(r[r.length]={type:n[i],value:t[i]});return r},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";var n=[],r=this.tokenArray;for(var i=0,s=r.length;i<s;i++)t[i+1]&&(n[n.length]={type:r[i],value:t[i+1]});return n},this.removeCapturingGroups=function(e){var t=e.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,function(e,t){return t?\"(?:\":e});return t},this.createSplitterRegexp=function(e,t){if(e.indexOf(\"(?=\")!=-1){var n=0,r=!1,i={};e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,function(e,t,s,o,u,a){return r?r=u!=\"]\":u?r=!0:o?(n==i.stack&&(i.end=a+1,i.stack=-1),n--):s&&(n++,s.length!=1&&(i.stack=n,i.start=a)),e}),i.end!=null&&/^\\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))}return new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){if(t&&typeof t!=\"string\"){var n=t.slice(0);t=n[0],t===\"#tmp\"&&(n.shift(),t=n.shift())}else var n=[];var r=t||\"start\",s=this.states[r];s||(r=\"start\",s=this.states[r]);var o=this.matchMappings[r],u=this.regExps[r];u.lastIndex=0;var a,f=[],l=0,c=0,h={type:null,value:\"\"};while(a=u.exec(e)){var p=o.defaultToken,d=null,v=a[0],m=u.lastIndex;if(m-v.length>l){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;y<a.length-2;y++){if(a[y+1]===undefined)continue;d=s[o[y]],d.onMatch?p=d.onMatch(v,r,n):p=d.token,d.next&&(typeof d.next==\"string\"?r=d.next:r=d.next(r,n),s=this.states[r],s||(this.reportError(\"state doesn't exist\",r),r=\"start\",s=this.states[r]),o=this.matchMappings[r],l=m,u=this.regExps[r],u.lastIndex=m);break}if(v)if(typeof p==\"string\")!!d&&d.merge===!1||h.type!==p?(h.type&&f.push(h),h={type:p,value:v}):h.value+=v;else if(p){h.type&&f.push(h),h={type:null,value:\"\"};for(var y=0;y<p.length;y++)f.push(p[y])}if(l==e.length)break;l=m;if(c++>i){c>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});while(l<e.length)h.type&&f.push(h),h={value:e.substring(l,l+=2e3),type:\"overflow\"};r=\"start\",n=[];break}}return h.type&&f.push(h),n.length>1&&n[0]!==r&&n.unshift(\"#tmp\",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i];if(s.next||s.onMatch)typeof s.next!=\"string\"?s.nextState&&s.nextState.indexOf(t)!==0&&(s.nextState=t+s.nextState):s.next.indexOf(t)!==0&&(s.next=t+s.next)}this.$rules[t+n]=r}},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,i,s){var o=typeof e==\"function\"?(new e).getRules():e;if(i)for(var u=0;u<i.length;u++)i[u]=t+i[u];else{i=[];for(var a in o)i.push(t+a)}this.addRules(o,t);if(n){var f=Array.prototype[s?\"push\":\"unshift\"];for(var u=0;u<i.length;u++)f.apply(this.$rules[i[u]],r.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return(e!=\"start\"||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||\"start\"};this.normalizeRules=function(){function i(s){var o=r[s];o.processed=!0;for(var u=0;u<o.length;u++){var a=o[u];!a.regex&&a.start&&(a.regex=a.start,a.next||(a.next=[]),a.next.push({defaultToken:a.token},{token:a.token+\".end\",regex:a.end||a.start,next:\"pop\"}),a.token=a.token+\".start\",a.push=!0);var f=a.next||a.push;if(f&&Array.isArray(f)){var l=a.stateName;l||(l=a.token,typeof l!=\"string\"&&(l=l[0]||\"\"),r[l]&&(l+=n++)),r[l]=f,a.next=l,i(l)}else f==\"pop\"&&(a.next=t);a.push&&(a.nextState=a.next||a.push,a.next=e,delete a.push);if(a.rules)for(var c in a.rules)r[c]?r[c].push&&r[c].push.apply(r[c],a.rules[c]):r[c]=a.rules[c];if(a.include||typeof a==\"string\")var h=a.include||a,p=r[h];else Array.isArray(a)&&(p=a);if(p){var d=[u,1].concat(p);a.noEscape&&(d=d.filter(function(e){return!e.next})),o.splice.apply(o,d),u--,p=null}a.keywordMap&&(a.token=this.createKeywordMapper(a.keywordMap,a.defaultToken||\"text\",a.caseInsensitive),delete a.defaultToken)}}var n=0,r=this.$rules;Object.keys(r).forEach(i,this)},this.createKeywordMapper=function(e,t,n,r){var i=Object.create(null);return Object.keys(e).forEach(function(t){var s=e[t];n&&(s=s.toLowerCase());var o=s.split(r||\"|\");for(var u=o.length;u--;)i[o[u]]=t}),Object.getPrototypeOf(i)&&(i.__proto__=null),this.$keywordList=Object.keys(i),e=null,n?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(typeof e==\"function\")var n=(new e).getBehaviours(t);else var n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(!e)return this.$behaviours;var t={};for(var n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}}).call(r.prototype),t.Behaviour=r}),define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e){var n=/\\w{4}/g;for(var r in e)t.packages[r]=e[r].replace(n,\"\\\\u$&\")}t.packages={},r({L:\"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",Ll:\"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",Lu:\"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",Lt:\"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",Lm:\"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",Lo:\"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",M:\"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",Mn:\"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",Mc:\"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",Me:\"0488048906DE20DD-20E020E2-20E4A670-A672\",N:\"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nd:\"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nl:\"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",No:\"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",P:\"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",Pd:\"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",Ps:\"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",Pe:\"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",Pi:\"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",Pf:\"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",Pc:\"005F203F20402054FE33FE34FE4D-FE4FFF3F\",Po:\"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",S:\"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",Sm:\"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",Sc:\"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",Sk:\"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",So:\"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",Z:\"002000A01680180E2000-200A20282029202F205F3000\",Zs:\"002000A01680180E2000-200A202F205F3000\",Zl:\"2028\",Zp:\"2029\",C:\"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",Cc:\"0000-001F007F-009F\",Cf:\"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",Co:\"E000-F8FF\",Cs:\"D800-DFFF\",Cn:\"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"})}),define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var r=e.getTokenAt(t,n);this.$tokenIndex=r?r.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){this.$tokenIndex+=1;var e;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n}}).call(r.prototype),t.TokenIterator=r}),define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../tokenizer\").Tokenizer,i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./behaviour\").Behaviour,o=e(\"../unicode\"),u=e(\"../lib/lang\"),a=e(\"../token_iterator\").TokenIterator,f=e(\"../range\").Range,l=function(){this.HighlightRules=i,this.$behaviour=new s};(function(){this.tokenRe=new RegExp(\"^[\"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new r(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,a=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp(\"^(\\\\s*)(?:\"+u.escapeRegExp(c)+\")\"),d=new RegExp(\"(?:\"+u.escapeRegExp(h)+\")\\\\s*$\"),v=function(e,t){if(g(e,t))return;if(!s||/\\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:a},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i<r.length;i++)if(r[i].type===\"comment\")return!0}}else{if(Array.isArray(this.lineCommentStart))var p=this.lineCommentStart.map(u.escapeRegExp).join(\"|\"),c=this.lineCommentStart[0];else var p=u.escapeRegExp(this.lineCommentStart),c=this.lineCommentStart;p=new RegExp(\"^(\\\\s*)(?:\"+p+\") ?\"),l=t.getUseSoftTabs();var m=function(e,t){var n=e.match(p);if(!n)return;var r=n[1].length,s=n[0].length;!b(e,r,s)&&n[0][s-1]==\" \"&&s--,i.removeInLine(t,r,s)},y=c+\" \",v=function(e,t){if(!s||/\\S/.test(e))b(e,a,a)?i.insertInLine({row:t,column:a},y):i.insertInLine({row:t,column:a},c)},g=function(e,t){return p.test(e)},b=function(e,t,n){var r=0;while(t--&&e.charAt(t)==\" \")r++;if(r%f!=0)return!1;var r=0;while(e.charAt(n++)==\" \")r++;return f>2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\\S/);n!==-1?(n<a&&(a=n),o&&!g(e,t)&&(o=!1)):E>e.length&&(E=e.length)}),a==Infinity&&(a=E,s=!1,o=!1),l&&a%f!=0&&(a=Math.floor(a/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new a(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,l=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new f(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new a(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new f(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);l.start.row==c&&(l.start.column+=h),l.end.row==c&&(l.end.column+=h),t.selection.fromOrientedRange(l)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(var t=0;t<n.length;t++)(function(e){var r=n[t],i=e[r];e[n[t]]=function(){return this.$delegator(r,arguments,i)}})(this)},this.$delegator=function(e,t,n){var r=t[0];typeof r!=\"string\"&&(r=r[0]);for(var i=0;i<this.$embeds.length;i++){if(!this.$modes[this.$embeds[i]])continue;var s=r.split(this.$embeds[i]);if(!s[0]&&s[1]){t[0]=s[1];var o=this.$modes[this.$embeds[i]];return o[e].apply(o,t)}}var u=n.apply(this,t);return n?u:undefined},this.transformAction=function(e,t,n,r,i){if(this.$behaviour){var s=this.$behaviour.getBehaviours();for(var o in s)if(s[o][t]){var u=s[o][t].apply(this,arguments);if(u)return u}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(var r in t){var i=t[r];for(var s=0,o=i.length;s<o;s++)if(typeof i[s].token==\"string\")/keyword|support|storage/.test(i[s].token)&&n.push(i[s].regex);else if(typeof i[s].token==\"object\")for(var u=0,a=i[s].token.length;u<a;u++)if(/keyword|support|storage/.test(i[s].token[u])){var r=i[s].regex.match(/\\(.+?\\)/g)[u];n.push(r.substr(1,r.length-2))}}this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,r){var i=this.$keywordList||this.$createKeywordList();return i.map(function(e){return{name:e,value:e,score:0,meta:\"keyword\"}})},this.$id=\"ace/mode/text\"}).call(l.prototype),t.Mode=l}),define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){var t=e.data,n=t.range;if(n.start.row==n.end.row&&n.start.row!=this.row)return;if(n.start.row>this.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column,s=n.start,o=n.end;if(t.action===\"insertText\")if(s.row===r&&s.column<=i){if(s.column!==i||!this.$insertRight)s.row===o.row?i+=o.column-s.column:(i-=s.column,r+=o.row-s.row)}else s.row!==o.row&&s.row<r&&(r+=o.row-s.row);else t.action===\"insertLines\"?(s.row!==r||i!==0||!this.$insertRight)&&s.row<=r&&(r+=o.row-s.row):t.action===\"removeText\"?s.row===r&&s.column<i?o.column>=i?i=s.column:i=Math.max(0,i-(o.column-s.column)):s.row!==o.row&&s.row<r?(o.row===r&&(i=Math.max(0,i-o.column)+s.column),r-=o.row-s.row):o.row===r&&(r-=o.row-s.row,i=Math.max(0,i-o.column)+s.column):t.action==\"removeLines\"&&s.row<=r&&(o.row<=r?r-=o.row-s.row:(r=s.row,i=0));this.setPosition(r,i,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./range\").Range,o=e(\"./anchor\").Anchor,u=function(e){this.$lines=[],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this._insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.getLine(e.start.row).substring(e.start.column,e.end.column);var t=this.getLines(e.start.row,e.end.row);t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;return e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):e.row<0&&(e.row=0),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this._insertLines(e.row,n),e=this.insertInLine(e,i||\"\")),e},this.insertLines=function(e,t){return e>=this.getLength()?this.insert({row:e,column:0},\"\\n\"+t.join(\"\\n\")):this._insertLines(Math.max(e,0),t)},this._insertLines=function(e,t){if(t.length==0)return{row:e,column:0};while(t.length>61440){var n=this._insertLines(e,t.slice(0,61440));t=t.slice(61440),e=n.row}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:\"insertLines\",range:i,lines:t};return this._signal(\"change\",{data:o}),i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||\"\";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:\"insertText\",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._signal(\"change\",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||\"\";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:\"insertText\",range:s.fromPoints(e,r),text:t};return this._signal(\"change\",{data:i}),r},this.remove=function(e){e instanceof s||(e=s.fromPoints(e.start,e.end)),e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this._removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:\"removeText\",range:r,text:o};return this._signal(\"change\",{data:a}),r.start},this.removeLines=function(e,t){return e<0||t>=this.getLength()?this.remove(new s(e,0,t+1,0)):this._removeLines(e,t)},this._removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:\"removeLines\",range:n,nl:this.getNewLineCharacter(),lines:r};return this._signal(\"change\",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:\"removeText\",range:r,text:this.getNewLineCharacter()};this._signal(\"change\",{data:o})},this.replace=function(e,t){e instanceof s||(e=s.fromPoints(e.start,e.end));if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action==\"insertLines\"?this.insertLines(r.start.row,n.lines):n.action==\"insertText\"?this.insert(r.start,n.text):n.action==\"removeLines\"?this._removeLines(r.start.row,r.end.row-1):n.action==\"removeText\"&&this.remove(r)}},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action==\"insertLines\"?this._removeLines(r.start.row,r.end.row-1):n.action==\"insertText\"?this.remove(r):n.action==\"removeLines\"?this._insertLines(r.start.row,n.lines):n.action==\"removeText\"&&this.insert(r.start,n.text)}},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(u.prototype),t.Document=u}),define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(!n.running)return;var e=new Date,t=n.currentLine,r=-1,i=n.doc;while(n.lines[t])t++;var s=t,o=i.getLength(),u=0;n.running=!1;while(t<o){n.$tokenizeRow(t),r=t;do t++;while(n.lines[t]);u++;if(u%5===0&&new Date-e>20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal(\"update\",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.range,n=t.start.row,r=t.end.row-n;if(r===0)this.lines[n]=null;else if(e.action==\"removeText\"||e.action==\"removeLines\")this.lines.splice(n,r+1,null),this.states.splice(n,r+1,null);else{var i=Array(r+1);i.unshift(n,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(n,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+\"\"!=r.state+\"\"?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+\"\"==e+\"\")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:\"\");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e(\"../range\").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f<i.length;f++){s=i[f],o=s.range.compareStart(t,n);if(o==-1){e(null,t,n,r,a);return}u=e(null,s.start.row,s.start.column,r,a),u=!u&&e(s.placeholder,s.start.row,s.start.column,r);if(u||o===0)return;a=!s.sameRow,r=s.end.column}e(null,t,n,r,a)},this.getNextFoldTo=function(e,t){var n,r;for(var i=0;i<this.folds.length;i++){n=this.folds[i],r=n.range.compareEnd(e,t);if(r==-1)return{fold:n,kind:\"after\"};if(r===0)return{fold:n,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,n){var r=this.getNextFoldTo(e,t),i,s;if(r){i=r.fold;if(r.kind==\"inside\"&&i.start.column!=t&&i.start.row!=e)window.console&&window.console.log(e,t,i);else if(i.start.row==e){s=this.folds;var o=s.indexOf(i);o===0&&(this.start.column+=n);for(o;o<s.length;o++){i=s[o],i.start.column+=n;if(!i.sameRow)return;i.end.column+=n}this.end.column+=n}}},this.split=function(e,t){var n=this.getNextFoldTo(e,t);if(!n||n.kind==\"inside\")return null;var r=n.fold,s=this.folds,o=this.foldData,u=s.indexOf(r),a=s[u-1];this.end.row=a.end.row,this.end.column=a.end.column,s=s.splice(u,s.length-u);var f=new i(o,s);return o.splice(o.indexOf(this)+1,0,f),f},this.merge=function(e){var t=e.folds;for(var n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach(function(t){e.push(\" \"+t.toString())}),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){var t=0;for(var n=0;n<this.folds.length;n++){var r=this.folds[n];e-=r.start.column-t;if(e<0)return{row:r.start.row,column:r.start.column+e};e-=r.placeholder.length;if(e<0)return r.start;t=r.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=r.comparePoints,s=function(){this.ranges=[]};(function(){this.comparePoints=i,this.pointIndex=function(e,t,n){var r=this.ranges;for(var s=n||0;s<r.length;s++){var o=r[s],u=i(e,o.end);if(u>0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.call(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s<t.length;s++){r=n,n=t[s];var o=i(r.end,n.start);if(o<0)continue;if(o==0&&!r.isEmpty()&&!n.isEmpty())continue;i(r.end,n.end)<0&&(r.end.row=n.end.row,r.end.column=n.end.column),t.splice(s,1),e.push(n),n=r,s--}return this.ranges=t,e},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var r=this.pointIndex({row:e,column:0});r<0&&(r=-r-1);var i=this.pointIndex({row:t,column:0},r);i<0&&(i=-i-1);var s=[];for(var o=r;o<i;o++)s.push(n[o]);return s},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener(\"change\",this.onChange),this.session=null},this.$onChange=function(e){var t=e.data.range;if(e.data.action[0]==\"i\")var n=t.start,r=t.end;else var r=t.start,n=t.end;var i=n.row,s=r.row,o=s-i,u=-n.column+r.column,a=this.ranges;for(var f=0,l=a.length;f<l;f++){var c=a[f];if(c.end.row<i)continue;if(c.start.row>i)break;c.start.row==i&&c.start.column>=n.column&&(c.start.column!=n.column||!this.$insertRight)&&(c.start.column+=u,c.start.row+=o);if(c.end.row==i&&c.end.column>=n.column){if(c.end.column==n.column&&this.$insertRight)continue;c.end.column==n.column&&u>0&&f<l-1&&c.end.column>c.start.column&&c.end.column==a[f+1].start.column&&(c.end.column-=u),c.end.column+=u,c.end.row+=o}}if(o!=0&&f<l)for(;f<l;f++){var c=a[f];c.start.row+=o,c.end.row+=o}}}).call(s.prototype),t.RangeList=s}),define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function u(e,t){e.row-=t.row,e.row==0&&(e.column-=t.column)}function a(e,t){u(e.start,t),u(e.end,t)}function f(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row}function l(e,t){f(e.start,t),f(e.end,t)}var r=e(\"../range\").Range,i=e(\"../range_list\").RangeList,s=e(\"../lib/oop\"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};s.inherits(o,i),function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(this.range.isEqual(e))return;if(!this.range.containsRange(e))throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);a(e,this.start);var t=e.start.row,n=e.start.column;for(var r=0,i=-1;r<this.subFolds.length;r++){i=this.subFolds[r].range.compare(t,n);if(i!=1)break}var s=this.subFolds[r];if(i==0)return s.addSubFold(e);var t=e.range.end.row,n=e.range.end.column;for(var o=r,i=-1;o<this.subFolds.length;o++){i=this.subFolds[o].range.compare(t,n);if(i!=1)break}var u=this.subFolds[o];if(i==0)throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);var f=this.subFolds.splice(r,o-r,e);return e.setFoldLine(this.foldLine),e},this.restoreRange=function(e){return l(e,this.start)}}.call(o.prototype)}),define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function u(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;var i=r.folds;for(var s=0;s<i.length;s++){var o=i[s];if(o.range.contains(e,t)){if(n==1&&o.range.isEnd(e,t))continue;if(n==-1&&o.range.isStart(e,t))continue;return o}}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,r=this.$foldData,i=[];t.column+=1,n.column-=1;for(var s=0;s<r.length;s++){var o=r[s].range.compareRange(e);if(o==2)continue;if(o==-2)break;var u=r[s].folds;for(var a=0;a<u.length;a++){var f=u[a];o=f.range.compareRange(e);if(o==-2)break;if(o==2)continue;if(o==42)break;i.push(f)}}return t.column-=1,n.column+=1,i},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach(function(e){t=t.concat(this.getFoldsInRange(e))},this)}else var t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){var e=[],t=this.$foldData;for(var n=0;n<t.length;n++)for(var r=0;r<t[n].folds.length;r++)e.push(t[n].folds[r]);return e},this.getFoldStringAt=function(e,t,n,r){r=r||this.getFoldLine(e);if(!r)return null;var i={end:{column:0}},s,o;for(var u=0;u<r.folds.length;u++){o=r.folds[u];var a=o.range.compareEnd(e,t);if(a==-1){s=this.getLine(o.start.row).substring(i.end.column,o.start.column);break}if(a===0)return null;i=o}return s||(s=this.getLine(o.start.row).substring(i.end.column)),n==-1?s.substring(0,t-i.end.column):n==1?s.substring(t-i.end.column):s},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i<n.length;i++){var s=n[i],o=s.end.row,u=s.start.row;if(o>=t){u<t&&(u>=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u<f||u==f&&a<=l-2){var c=this.getFoldAt(u,a,1),h=this.getFoldAt(f,l,-1);if(c&&h==c)return c.addSubFold(o);c&&!c.range.isStart(u,a)&&this.removeFold(c),h&&!h.range.isEnd(f,l)&&this.removeFold(h);var p=this.getFoldsInRange(o.range);p.length>0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d<n.length;d++){var v=n[d];if(f==v.start.row){v.addFold(o),r=!0;break}if(u==v.end.row){v.addFold(o),r=!0;if(!o.sameRow){var m=n[d+1];if(m&&m.start.row==f){v.merge(m);break}}break}if(f<=v.start.row)break}return r||(v=this.$addFoldLine(new i(this.$foldData,o))),this.$useWrapMode?this.$updateWrapData(v.start.row,v.start.row):this.$updateRowLengthCache(v.start.row,v.start.row),this.$modified=!0,this._emit(\"changeFold\",{data:o,action:\"add\"}),o}throw new Error(\"The range has to be at least 2 characters width\")},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,i=this.$foldData,s=t.folds;if(s.length==1)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))s.pop(),t.end.row=s[s.length-1].end.row,t.end.column=s[s.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))s.shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column;else if(e.sameRow)s.splice(s.indexOf(e),1);else{var o=t.split(e.start.row,e.start.column);s=o.folds,s.shift(),o.start.row=s[0].start.row,o.start.column=s[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r)),this.$modified=!0,this._emit(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){var t=[];for(var n=0;n<e.length;n++)t.push(e[n]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(t){e.restoreRange(t),this.addFold(t)},this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e==\"number\"?n=new r(e,0,e,this.getLine(e).length):\"row\"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o=\"\";return e.walk(function(e,t,n,u){if(t<r)return;if(t==r){if(n<i)return;u=Math.max(i,u)}e!=null?o+=e:o+=s.getLine(t).substring(u,n)},t,n),o},this.getDisplayLine=function(e,t,n,r){var i=this.getFoldLine(e);if(!i){var s;return s=this.doc.getLine(e),s.substring(r||0,t||s.length)}return this.getFoldDisplayLine(i,e,t,n,r)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var n=t.folds.map(function(e){return e.clone()});return new i(e,n)}),e},this.toggleFold=function(e){var t=this.selection,n=t.getRange(),r,i;if(n.isEmpty()){var s=n.start;r=this.getFoldAt(s.row,s.column);if(r){this.expandFold(r);return}(i=this.findMatchingBracket(s))?n.comparePoint(i)==1?n.end=i:(n.start=i,n.start.column++,n.end.column--):(i=this.findMatchingBracket({row:s.row,column:s.column+1}))?(n.comparePoint(i)==1?n.end=i:n.start=i,n.start.column++):n=this.getCommentFoldRange(s.row,s.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length){this.expandFolds(o);return}o.length==1&&(r=o[0])}r||(r=this.getFoldAt(n.start.row,n.start.column));if(r&&r.range.toString()==n.toString()){this.expandFold(r);return}var u=\"...\";if(!n.isMultiLine()){u=this.getTextRange(n);if(u.length<4)return;u=u.trim().substring(0,2)+\"..\"}this.addFold(u,n)},this.getCommentFoldRange=function(e,t,n){var i=new o(this,e,t),s=i.getCurrentToken();if(s&&/^comment|string/.test(s.type)){var u=new r,a=new RegExp(s.type.replace(/\\..*/,\"\\\\.\"));if(n!=1){do s=i.stepBackward();while(s&&a.test(s.type));i.stepForward()}u.start.row=i.getCurrentTokenRow(),u.start.column=i.getCurrentTokenColumn()+2,i=new o(this,e,t);if(n!=-1){do s=i.stepForward();while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return u.end.row=i.getCurrentTokenRow(),u.end.column=i.getCurrentTokenColumn()+s.value.length-2,u}},this.foldAll=function(e,t,n){n==undefined&&(n=1e5);var r=this.foldWidgets;if(!r)return;t=t||this.getLength(),e=e||0;for(var i=e;i<t;i++){r[i]==null&&(r[i]=this.getFoldWidget(i));if(r[i]!=\"start\")continue;var s=this.getFoldWidgetRange(i);if(s&&s.isMultiLine()&&s.end.row<=t&&s.start.row>=e){i=s.end.row;try{var o=this.addFold(\"...\",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle==e)return;this.$foldStyle=e,e==\"manual\"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._emit(\"changeAnnotation\");if(!e||this.$foldStyle==\"manual\"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s==\"start\"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n===\"end\"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s){t.children||t.all?this.removeFold(s):this.expandFold(s);return}var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range)){this.removeFold(s);return}}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,o.end.row,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold(\"...\",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold(\"...\",n)}},this.updateFoldWidgets=function(e){var t=e.data,n=t.range,r=n.start.row,i=n.end.row-r;if(i===0)this.foldWidgets[r]=null;else if(t.action==\"removeText\"||t.action==\"removeLines\")this.foldWidgets.splice(r,i+1,null);else{var s=Array(i+1);s.unshift(r,1),this.foldWidgets.splice.apply(this.foldWidgets,s)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e(\"../range\").Range,i=e(\"./fold_line\").FoldLine,s=e(\"./fold\").Fold,o=e(\"../token_iterator\").TokenIterator;t.Folding=u}),define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n==\"\")return null;var r=n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end|start|begin)\\b/,\"\")+\")+\"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:end|start|begin)\\b/,\"\")+\")+\"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a<l){var c=f.charAt(a);if(c==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else c==e&&(s+=1);a+=1}do u=o.stepForward();while(u&&!n.test(u.type));if(u==null)break;a=0}return null}}var r=e(\"../token_iterator\").TokenIterator,i=e(\"../range\").Range;t.BracketMatch=s}),define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./config\"),o=e(\"./lib/event_emitter\").EventEmitter,u=e(\"./selection\").Selection,a=e(\"./mode/text\").Mode,f=e(\"./range\").Range,l=e(\"./document\").Document,c=e(\"./background_tokenizer\").BackgroundTokenizer,h=e(\"./search_highlight\").SearchHighlight,p=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this);if(typeof e!=\"object\"||!e.getLine)e=new l(e);this.setDocument(e),this.selection=new u(this),s.resetOptions(this),this.setMode(t),s._signal(\"session\",this)};(function(){function m(e){return e<4352?!1:e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,o),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),this.doc=e,e.on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t<s))return i;r=i-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){var t=e.data;this.$modified=!0,this.$resetRowCache(t.range.start.row);var n=this.$updateInternalDataOnChange(e);!this.$fromUndo&&this.$undoManager&&!t.ignore&&(this.$deltasDoc.push(t),n&&n.length!=0&&this.$deltasFold.push({action:\"removeFolds\",folds:n}),this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(t),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n=this.bgTokenizer.getTokens(e),r,i=0;if(t==null)s=n.length-1,i=this.getLine(e).length;else for(var s=0;s<n.length;s++){i+=n[s].value.length;if(i>=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:\"fold\",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:\"doc\",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:\"aceupdate\",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(\" \",this.getTabSize()):\"\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){t===undefined&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,n,r){var i=this.$markerId++,s={range:e,type:n||\"line\",renderer:typeof n==\"function\"?n:null,clazz:t,inFront:!!r,id:i};return r?(this.$frontMarkers[i]=s,this._signal(\"changeFrontMarker\")):(this.$backMarkers[i]=s,this._signal(\"changeBackMarker\")),i},this.addDynamicMarker=function(e,t){if(!e.update)return;var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[n]=e,this._signal(\"changeBackMarker\")),e},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(!t)return;var n=t.inFront?this.$frontMarkers:this.$backMarkers;t&&(delete n[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\"))},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new h(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){typeof t!=\"number\"&&(n=t,t=e),n||(n=\"ace_step\");var i=new f(e,0,t,Infinity);return i.id=this.addMarker(i,n,\"fullLine\",r),i},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r?\\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine=\"\\n\"},this.getWordRange=function(e,t){var n=this.getLine(e),r=!1;t>0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\\s+$/.test(n.slice(t-1,t+1)))var i=/\\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(o<n.length&&n.charAt(o).match(i))o++;return new f(e,s,e,o)},this.getAWordRange=function(e,t){var n=this.getWordRange(e,t),r=this.getLine(n.end.row);while(r.charAt(n.end.column).match(/[ \\t]/))n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal(\"tokenizerUpdate\",e)},this.$modes={},this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&typeof e==\"object\"){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,r=n.path}else r=e||\"ace/mode/text\";this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new a);if(this.$modes[r]&&!n){this.$onChangeMode(this.$modes[r]),t&&t();return}this.$modeId=r,s.loadModule([\"mode\",r],function(e){if(this.$modeId!==r)return t&&t();if(this.$modes[r]&&!n)return this.$onChangeMode(this.$modes[r]);e&&e.Mode&&(e=new e.Mode(n),n||(this.$modes[r]=e,e.$id=r),this.$onChangeMode(e),t&&t())}.bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){t||(this.$modeId=e.$id);if(this.$mode===e)return;this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(n.addEventListener!==undefined){var r=this.onReloadTokenizer.bind(this);n.addEventListener(\"update\",r)}if(!this.bgTokenizer){this.bgTokenizer=new c(n);var i=this;this.bgTokenizer.addEventListener(\"update\",function(e){i._signal(\"tokenizerUpdate\",e)})}else this.bgTokenizer.setTokenizer(n);this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\"))},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){s.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){if(this.$scrollTop===e||isNaN(e))return;this.$scrollTop=e,this._signal(\"changeScrollTop\",e)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){if(this.$scrollLeft===e||isNaN(e))return;this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e)},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(this.lineWidgetsWidth!=null)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach(function(t){t&&t.screenWidth>e&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;a<u;a++){if(a>o){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=e.length-1;r!=-1;r--){var i=e[r];i.group==\"doc\"?(this.doc.revertDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!0,n)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=0;r<e.length;r++){var i=e[r];i.group==\"doc\"&&(this.doc.applyDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!1,n))}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t,n){function r(e){var n=e.action===\"insertText\"||e.action===\"insertLines\";return t?!n:n}var i=e[0],s,o,u=!1;r(i)?(s=f.fromPoints(i.range.start,i.range.end),u=!0):(s=f.fromPoints(i.range.start,i.range.start),u=!1);for(var a=1;a<e.length;a++)i=e[a],r(i)?(o=i.range.start,s.compare(o.row,o.column)==-1&&s.setStart(i.range.start),o=i.range.end,s.compare(o.row,o.column)==1&&s.setEnd(i.range.end),u=!0):(o=i.range.start,s.compare(o.row,o.column)==-1&&(s=f.fromPoints(i.range.start,i.range.start)),u=!1);if(n!=null){f.comparePoints(n.start,s.start)===0&&(n.start.column+=s.end.column-s.start.column,n.end.column+=s.end.column-s.start.column);var l=n.compareRange(s);l==1?s.setStart(n.start):l==-1&&s.setEnd(n.end)}return s},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var r=this.getTextRange(e),i=this.getFoldsInRange(e),s=f.fromPoints(t,t);if(!n){this.remove(e);var o=e.start.row-e.end.row,u=o?-e.end.column:e.start.column-e.end.column;u&&(s.start.row==e.end.row&&s.start.column>e.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,l=s.start,o=l.row-a.row,u=l.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var r=e;r<=t;r++)this.insert({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new f(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o<r;++o)if(s.charAt(o)!=\" \")break;o<r&&s.charAt(o)==\"\t\"?(n.start.column=o,n.end.column=o+1):(n.start.column=0,n.end.column=o),this.remove(n)}},this.$moveLines=function(e,t,n){e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t);if(n<0){var r=this.getRowFoldStart(e+n);if(r<0)return 0;var i=r-e}else if(n>0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new f(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeLines(e,t);return this.doc.insertLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this._signal(\"changeWrapMode\")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n,r=e.data.action,i=e.data.range.start.row,s=e.data.range.end.row,o=e.data.range.start,u=e.data.range.end,a=null;r.indexOf(\"Lines\")!=-1?(r==\"insertLines\"?s=i+e.data.lines.length:s=i,n=e.data.lines?e.data.lines.length:s-i):n=s-i,this.$updating=!0;if(n!=0)if(r.indexOf(\"remove\")!=-1){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(i,n);var f=this.$foldData;a=this.getFoldsInRange(e.data.range),this.removeFolds(a);var l=this.getFoldLine(u.row),c=0;if(l){l.addRemoveChars(u.row,u.column,o.column-u.column),l.shiftRow(-n);var h=this.getFoldLine(i);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=u.row&&l.shiftRow(-n)}s=i}else{var p=Array(n);p.unshift(i,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(i),c=0;if(l){var v=l.range.compareInside(o.row,o.column);v==0?(l=l.split(o.row,o.column),l&&(l.shiftRow(n),l.addRemoveChars(s,0,u.column-o.column))):v==-1&&(l.addRemoveChars(i,0,u.column-o.column),l.shiftRow(n)),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=i&&l.shiftRow(n)}}else{n=Math.abs(e.data.range.start.column-e.data.range.end.column),r.indexOf(\"remove\")!=-1&&(a=this.getFoldsInRange(e.data.range),this.removeFolds(a),n=-n);var l=this.getFoldLine(i);l&&l.addRemoveChars(i,o.column,n)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(i,s):this.$updateRowLengthCache(i,s),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),s=this.$wrapData,o=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,s){var o;if(e!=null){o=this.$getDisplayTokens(e,a.length),o[0]=n;for(var f=1;f<o.length;f++)o[f]=u}else o=this.$getDisplayTokens(r[t].substring(s,i),a.length);a=a.concat(o)}.bind(this),f.end.row,r[f.end.row].length+1),s[f.start.row]=this.$computeWrapSplits(a,o,i),l=f.end.row+1):(a=this.$getDisplayTokens(r[l]),s[l]=this.$computeWrapSplits(a,o,i),l++)};var e=1,t=2,n=3,u=4,l=9,p=10,d=11,v=12;this.$computeWrapSplits=function(e,r){function c(t){var n=e.slice(o,t),r=n.length;n.join(\"\").replace(/12/g,function(){r-=1}).replace(/2/g,function(){r-=1}),a+=r,i.push(a),o=t}if(e.length==0)return[];var i=[],s=e.length,o=0,a=0,f=this.$wrapAsCode;while(s-o>r){var h=o+r;if(e[h-1]>=p&&e[h]>=p){c(h);continue}if(e[h]==n||e[h]==u){for(h;h!=o-1;h--)if(e[h]==n)break;if(h>o){c(h);continue}h=o+r;for(h;h<e.length;h++)if(e[h]!=u)break;if(h==e.length)break;c(h);continue}var d=Math.max(h-(f?10:r-(r>>2)),o-1);while(h>d&&e[h]<n)h--;if(f){while(h>d&&e[h]<n)h--;while(h>d&&e[h]==l)h--}else while(h>d&&e[h]<p)h--;if(h>d){c(++h);continue}h=o+r,e[h]==t&&h--,c(h)}return i},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o<n.length;o++){var u=n.charCodeAt(o);if(u==9){s=this.getScreenTabSize(i.length+r),i.push(d);for(var a=1;a<s;a++)i.push(v)}else u==32?i.push(p):u>39&&u<48||u>57&&u<64?i.push(l):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i<e.length;i++){r=e.charCodeAt(i),r==9?n+=this.getScreenTabSize(n):r>=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t){if(e<0)return{row:0,column:0};var n,r=0,i=0,s,o=0,u=0,a=this.$screenRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var o=a[f],r=this.$docRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getLength()-1,p=this.getNextFoldLine(r),d=p?p.start.row:Infinity;while(o<=e){u=this.getRowLength(r);if(o+u>e||r>=h)break;o+=u,r++,r>d&&(r=p.end.row+1,p=this.getNextFoldLine(r,p),d=p?p.start.row:Infinity),c&&(this.$docRowCache.push(r),this.$screenRowCache.push(o))}if(p&&p.start.row<=r)n=this.getFoldDisplayLine(p),r=p.start.row;else{if(o+u<=e||r>h)return{row:h,column:this.getLine(h).length};n=this.getLine(r),p=null}if(this.$useWrapMode){var v=this.$wrapData[r];if(v){var m=Math.floor(e-o);s=v[m],m>0&&v.length&&(i=v[m-1]||v[v.length-1],n=n.substring(i))}}return i+=this.$getStringScreenWidth(n,t)[1],this.$useWrapMode&&i>=s&&(i=s-1),p?p.idxToPosition(i):{row:r,column:i}},this.documentToScreenPosition=function(e,t){if(typeof t==\"undefined\")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u<e){if(u>=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d=\"\";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);if(this.$useWrapMode){var v=this.$wrapData[i];if(v){var m=0;while(d.length>=v[m])r++,m++;d=d.substring(v[m-1]||0,d.length)}}return{row:r,column:this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;r<n.length;r++)t=n[r],e-=t.end.row-t.start.row}else{var i=this.$wrapData.length,s=0,r=0,t=this.$foldData[r++],o=t?t.start.row:Infinity;while(s<i){var u=this.$wrapData[s];e+=u?u.length+1:1,s++,s>o&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(p.prototype),e(\"./edit_session/folding\").Folding.call(p.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(p.prototype),s.defineOptions(p.prototype,\"session\",{wrap:{set:function(e){!e||e==\"off\"?e=!1:e==\"free\"?e=!0:e==\"printMargin\"?e=-1:typeof e==\"string\"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;if(!e)this.setUseWrapMode(!1);else{var t=typeof e==\"number\"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}this.$wrap=e},get:function(){return this.getUseWrapMode()?this.$wrap==-1?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){e=e==\"auto\"?this.$mode.type!=\"text\":e!=\"text\",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:\"auto\"},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\")},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p}),define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i){if(!e.start){var o=e.offset+(i||0);r=new s(n,o,n,o+e.length);if(!e.length&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start))return r=null,!1}else r=e;return!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;h<a;h++)if(i[c+h].search(u[h])==-1)continue e;var p=i[c],d=i[c+a-1],v=p.length-p.match(u[0])[0].length,m=d.match(u[a-1])[0].length;if(l&&l.end.row===c&&l.end.column>v)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;g<i.length;g++){var y=r.getMatchOffsets(i[g],u);for(var h=0;h<y.length;h++){var b=y[h];o.push(new s(g,b.offset,g,b.offset+b.length))}}if(n){var w=n.start.column,E=n.start.column,g=0,h=o.length-1;while(g<h&&o[g].start.column<w&&o[g].start.row==n.start.row)g++;while(g<h&&o[h].end.column>E&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g<h;g++)o[g].start.row+=n.start.row,o[g].end.row+=n.start.row}return o},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(!r)return;var i=r.exec(e);if(!i||i[0].length!=e.length)return null;t=e.replace(r,t);if(n.preserveCase){t=t.split(\"\");for(var s=Math.min(e.length,e.length);s--;){var o=e[s];o&&o.toLowerCase()!=o?t[s]=t[s].toUpperCase():t[s]=t[s].toLowerCase()}t=t.join(\"\")}return t},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var i;if(t.$isMultiLine)var o=n.length,u=function(t,r,u){var a=t.search(n[0]);if(a==-1)return;for(var f=1;f<o;f++){t=e.getLine(r+f);if(t.search(n[f])==-1)return}var l=t.match(n[o-1])[0].length,c=new s(r,a,r+o-1,l);n.offset==1?(c.start.row--,c.start.column=Number.MAX_VALUE):u&&(c.start.column+=u);if(i(c))return!0};else if(t.backwards)var u=function(e,t,s){var o=r.getMatchOffsets(e,n);for(var u=o.length-1;u>=0;u--)if(i(o[u],t,s))return!0};else var u=function(e,t,s){var o=r.getMatchOffsets(e,n);for(var u=0;u<o.length;u++)if(i(o[u],t,s))return!0};var a=this.$lineIterator(e,t);return{forEach:function(e){i=e,a.forEach(u)}}},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n=e.needle;if(!e.needle)return e.re=!1;e.regExp||(n=r.escapeRegExp(n)),e.wholeWord&&(n=\"\\\\b\"+n+\"\\\\b\");var i=e.caseSensitive?\"gm\":\"gmi\";e.$isMultiLine=!t&&/[\\n\\r]/.test(n);if(e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(n,i);try{var s=new RegExp(n,i)}catch(o){s=!1}return e.re=s},this.$assembleMultilineRegExp=function(e,t){var n=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),r=[];for(var i=0;i<n.length;i++)try{r.push(new RegExp(n[i],t))}catch(s){return!1}return n[0]==\"\"?(r.shift(),r.offset=1):r.offset=0,r},this.$lineIterator=function(e,t){var n=t.backwards==1,r=t.skipCurrent!=0,i=t.range,s=t.start;s||(s=i?i[n?\"end\":\"start\"]:e.selection.getRange()),s.start&&(s=s[r!=n?\"end\":\"start\"]);var o=i?i.start.row:0,u=i?i.end.row:e.getLength()-1,a=n?function(n){var r=s.row,i=e.getLine(r).substring(0,s.column);if(n(i,r))return;for(r--;r>=o;r--)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=u,o=s.row;r>=o;r--)if(n(e.getLine(r),r))return}:function(n){var r=s.row,i=e.getLine(r).substr(s.column);if(n(i,r,s.column))return;for(r+=1;r<=u;r++)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=o,u=s.row;r<=u;r++)if(n(e.getLine(r),r))return};return{forEach:a}}}).call(o.prototype),t.Search=o}),define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e,t){this.platform=t||(i.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e(\"../lib/keys\"),i=e(\"../lib/useragent\"),s=r.KEY_MODS;u.prototype=o.prototype,function(){this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e==\"string\"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e==\"object\"&&(e=e[this.platform]);if(!e)return;if(typeof t==\"function\")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split(\"|\").forEach(function(e){var r=\"\";if(e.indexOf(\" \")!=-1){var i=e.split(/\\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?\" \":\"\")+n,this._addCommandToBinding(r,\"chainKeys\")},this),r+=\" \"}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(e,t,n){var r=this.commandKeyBinding,i;t?!r[e]||this.$singleCommand?r[e]=t:(Array.isArray(r[e])?(i=r[e].indexOf(t))!=-1&&r[e].splice(i,1):r[e]=[r[e]],n||t.isDefault?r[e].unshift(t):r[e].push(t)):delete r[e]},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n==\"string\")return this.bindKey(n,t);typeof n==\"function\"&&(n={exec:n});if(typeof n!=\"object\")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]==\"shift\")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!=\"undefined\"&&console.error(\"invalid modifier \"+t[o]+\" in \"+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=\" \"+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o==\"chainKeys\"||o[o.length-1]==\"chainKeys\")return e.$keyChain=e.$keyChain||i,{command:\"null\"};return e.$keyChain&&r>0&&(e.$keyChain=\"\"),{command:o}}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../keyboard/hash_handler\").MultiHashHandler,s=e(\"../lib/event_emitter\").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e==\"string\"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit(\"exec\",i),this._signal(\"afterExec\",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t==\"string\"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!=\"string\"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t){return{win:e,mac:t}}var r=e(\"../lib/lang\"),i=e(\"../config\"),s=e(\"../range\").Range;t.commands=[{name:\"showSettingsMenu\",bindKey:o(\"Ctrl-,\",\"Command-,\"),exec:function(e){i.loadModule(\"ace/ext/settings_menu\",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:\"goToNextError\",bindKey:o(\"Alt-E\",\"Ctrl-E\"),exec:function(e){i.loadModule(\"ace/ext/error_marker\",function(t){t.showErrorMarker(e,1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:o(\"Alt-Shift-E\",\"Ctrl-Shift-E\"),exec:function(e){i.loadModule(\"ace/ext/error_marker\",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",bindKey:o(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",bindKey:o(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",bindKey:o(\"Ctrl-L\",\"Command-L\"),exec:function(e){var t=parseInt(prompt(\"Enter line number:\"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:\"fold\",bindKey:o(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:o(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:o(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:o(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",bindKey:o(\"Ctrl-Alt-0\",\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",bindKey:o(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",bindKey:o(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",bindKey:o(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",bindKey:o(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",bindKey:o(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",bindKey:o(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",bindKey:o(\"Ctrl-F\",\"Command-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e)})},readOnly:!0},{name:\"overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",bindKey:o(\"Ctrl-Shift-Home\",\"Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:o(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:o(\"Shift-Up\",\"Shift-Up\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",bindKey:o(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",bindKey:o(\"Ctrl-Shift-End\",\"Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:o(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:o(\"Shift-Down\",\"Shift-Down\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",bindKey:o(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",bindKey:o(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",bindKey:o(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",bindKey:o(\"Alt-Shift-Left\",\"Command-Shift-Left\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",bindKey:o(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",bindKey:o(\"Shift-Left\",\"Shift-Left\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",bindKey:o(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",bindKey:o(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",bindKey:o(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",bindKey:o(\"Alt-Shift-Right\",\"Command-Shift-Right\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",bindKey:o(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",bindKey:o(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",bindKey:o(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",bindKey:o(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",bindKey:o(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",bindKey:o(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",bindKey:o(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",bindKey:o(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",bindKey:o(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",bindKey:o(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",bindKey:o(\"Ctrl-P\",\"Ctrl-P\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",bindKey:o(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",bindKey:o(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",bindKey:o(\"null\",\"null\"),exec:function(){},passEvent:!0,readOnly:!0},{name:\"cut\",exec:function(e){var t=e.getSelectionRange();e._emit(\"cut\",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"removeline\",bindKey:o(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:o(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:o(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:o(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:o(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:o(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:o(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:o(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e,!0)})}},{name:\"undo\",bindKey:o(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",bindKey:o(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",bindKey:o(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:o(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:o(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:o(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:o(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:o(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:o(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:o(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:o(\"Alt-Delete\",\"Ctrl-K\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:o(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:o(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:o(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:o(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:o(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:o(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(e,t){e.insert(r.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:o(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:o(\"Ctrl-T\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:o(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:o(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:o(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\\n\\s*/,\" \").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=\" \"+c),f+=c}i.row+1<e.session.doc.getLength()-1&&(f+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new s(n.row,0,i.row+2,0),f),a>0?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o<r.length;o++)o==r.length-1&&(r[o].end.row!==t||r[o].end.column!==n)&&i.push(new s(r[o].end.row,r[o].end.column,t,n)),o===0?(r[o].start.row!==0||r[o].start.column!==0)&&i.push(new s(0,0,r[o].start.row,r[o].start.column)):i.push(new s(r[o-1].end.row,r[o-1].end.column,r[o].start.row,r[o].start.column));e.exitMultiSelectMode(),e.clearSelection();for(var o=0;o<i.length;o++)e.selection.addRange(i[o],!1)},readOnly:!0,scrollIntoView:\"none\"}]}),define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/lang\"),o=e(\"./lib/useragent\"),u=e(\"./keyboard/textinput\").TextInput,a=e(\"./mouse/mouse_handler\").MouseHandler,f=e(\"./mouse/fold_handler\").FoldHandler,l=e(\"./keyboard/keybinding\").KeyBinding,c=e(\"./edit_session\").EditSession,h=e(\"./search\").Search,p=e(\"./range\").Range,d=e(\"./lib/event_emitter\").EventEmitter,v=e(\"./commands/command_manager\").CommandManager,m=e(\"./commands/default_commands\").commands,g=e(\"./config\"),y=e(\"./token_iterator\").TokenIterator,b=function(e,t){var n=e.getContainerElement();this.container=n,this.renderer=e,this.commands=new v(o.isMac?\"mac\":\"win\",m),this.textInput=new u(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.keyBinding=new l(this),this.$mouseHandler=new a(this),new f(this),this.$blockScrolling=0,this.$search=(new h).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=s.delayedCall(function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on(\"change\",function(e,t){t._$emitInputEvent.schedule(31)}),this.setSession(t||new c(\"\")),g.resetOptions(this),g._signal(\"editor\",this)};(function(){r.implement(this,d),this.$initOperationListeners=function(){function e(e){return e[e.length-1]}this.selections=[],this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=s.delayedCall(this.endOperation.bind(this)),this.on(\"change\",function(){this.curOp||this.startOperation(),this.curOp.docChanged=!0}.bind(this),!0),this.on(\"changeSelection\",function(){this.curOp||this.startOperation(),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.command.name&&this.$blockScrolling++},this.endOperation=function(e){if(this.curOp){if(e&&e.returnValue===!1)return this.curOp=null;this._signal(\"beforeEndOperation\");var t=this.curOp.command;t.name&&this.$blockScrolling&&this.$blockScrolling--;if(t&&t.scrollIntoView){switch(t.scrollIntoView){case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var n=this.selection.getRange(),r=this.renderer.layerConfig;(n.start.row>=r.lastRow||n.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}t.scrollIntoView==\"animate\"&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name==\"insertstring\"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\\s/.test(i)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!=\"always\"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e==\"string\"){this.$keybindingId=e;var n=this;g.loadModule([\"keybinding\",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;var t=this.session;if(t){this.session.removeEventListener(\"change\",this.$onDocumentChange),this.session.removeEventListener(\"changeMode\",this.$onChangeMode),this.session.removeEventListener(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.removeEventListener(\"changeTabSize\",this.$onChangeTabSize),this.session.removeEventListener(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.removeEventListener(\"changeWrapMode\",this.$onChangeWrapMode),this.session.removeEventListener(\"onChangeFold\",this.$onChangeFold),this.session.removeEventListener(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.removeEventListener(\"changeBackMarker\",this.$onChangeBackMarker),this.session.removeEventListener(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.removeEventListener(\"changeAnnotation\",this.$onChangeAnnotation),this.session.removeEventListener(\"changeOverwrite\",this.$onCursorChange),this.session.removeEventListener(\"changeScrollTop\",this.$onScrollTopChange),this.session.removeEventListener(\"changeScrollLeft\",this.$onScrollLeftChange);var n=this.session.getSelection();n.removeEventListener(\"changeCursor\",this.$onCursorChange),n.removeEventListener(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.addEventListener(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.addEventListener(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.addEventListener(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.addEventListener(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.addEventListener(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.addEventListener(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.addEventListener(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.addEventListener(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this})},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||i.computedStyle(this.container,\"fontSize\")},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,\"ace_bracket\",\"text\"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}i.type.indexOf(\"tag-open\")!=-1&&(i=r.stepForward());var s=i.value,o=0,u=r.stepBackward();if(u.value==\"<\"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(i&&o>=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(u&&o<=0);r.stepForward()}if(!i){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}var a=r.getCurrentTokenRow(),f=r.getCurrentTokenColumn(),l=new p(a,f,a,f+i.value.length);t.$tagHighlight&&l.compareRange(t.$backMarkers[t.$tagHighlight].range)!==0&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),l&&!t.$tagHighlight&&(t.$tagHighlight=t.addMarker(l,\"ace_bracket\",\"text\"))},50)},this.focus=function(){var e=this;setTimeout(function(){e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){if(this.$isFocused)return;this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e)},this.onBlur=function(e){if(!this.$isFocused)return;this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e)},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=e.data,n=t.range,r;n.start.row==n.end.row&&t.action!=\"insertLines\"&&t.action!=\"removeLines\"?r=n.end.row:r=Infinity,this.renderer.updateLines(n.start.row,r,this.session.$useWrapMode),this._signal(\"change\",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$blockScrolling||(g.warn(\"Automatically scrolling cursor into view after selection change\",\"this will be disabled in the next version\",\"set editor.$blockScrolling = Infinity to disable this message\"),this.renderer.scrollCursorIntoView()),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e=this.getSession(),t;if(this.$highlightActiveLine){if(this.$selectionStyle!=\"line\"||!this.selection.isMultiLine())t=this.getCursorPosition();this.renderer.$maxLines&&this.session.getLength()===1&&!(this.renderer.$minLines>1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,\"ace_active-line\",\"screenLine\"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,\"ace_selection\",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column-1,r=t.end.column+1,i=e.getLine(t.start.row),s=i.length,o=i.substring(Math.max(n,0),Math.min(r,s));if(n>=0&&/^[\\w\\d]/.test(o)||r<=s&&/[\\w\\d]$/.test(o))return;o=i.substring(t.start.column,t.end.column);if(!/^[\\w\\d]+$/.test(o))return;var u=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return u},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal(\"copy\",e),e},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e){if(this.$readOnly)return;var t={text:e};this._signal(\"paste\",t),e=t.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(e);else{var n=e.split(/\\r\\n|\\r|\\n/),r=this.selection.rangeList.ranges;if(n.length>r.length||n.length<2||!n[1])return this.commands.exec(\"insertstring\",this,e);for(var i=r.length;i--;){var s=r[i];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[i])}}this.renderer.scrollCursorIntoView()},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),\"insertion\",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}e==\"\t\"&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e==\"\\n\"||e==\"\\r\\n\"){var u=n.getLine(i.row);if(i.column>u.search(/\\S|$/)){var a=u.substr(i.column).search(/\\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(e==\"left\"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,\"deletion\",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]==\"\\n\"){var o=n.getLine(t.end.row);/^\\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;t<n.length?(r=n.charAt(t)+n.charAt(t-1),i=new p(e.row,t-1,e.row,t+1)):(r=n.charAt(t-1)+n.charAt(t-2),i=new p(e.row,t-2,e.row,t)),this.session.replace(i,r)},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(t.start.row<t.end.row){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}if(t.start.column<t.end.column){var r=e.getTextRange(t);if(!/^\\s+$/.test(r)){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}}var i=e.getLine(t.start.row),o=t.start,u=e.getTabSize(),a=e.documentToScreenColumn(o.row,o.column);if(this.session.getUseSoftTabs())var f=u-a%u,l=s.stringRepeat(\" \",f);else{var f=a%u;while(i[t.start.column]==\" \"&&f)t.start.column--,f--;this.selection.setSelectionRange(t),l=\"\t\"}return this.insert(l)},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,n=[];for(i=e.first;i<=e.last;i++)n.push(t.getLine(i));n.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});var r=new p(0,0,0,0);for(var i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex<t){var i=n.exec(r);if(i.index<=t&&i.index+i[0].length>=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(\".\")>=0?s.start+s.value.indexOf(\".\")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n<o?e*=Math.pow(10,s.end-n-1):e*=Math.pow(10,s.end-n),a+=e,a/=Math.pow(10,u);var f=a.toFixed(u),l=new p(t,s.start,t,s.end);this.session.replace(l,f),this.moveCursorTo(t,Math.max(s.start+1,n+f.length-s.value.length))}}},this.removeLines=function(){var e=this.$getSelectedRows(),t;e.first===0||e.last+1<this.session.getLength()?t=new p(e.first,0,e.last+1,0):t=new p(e.first-1,this.session.getLine(e.first-1).length,e.last,this.session.getLine(e.last).length),this.session.remove(t),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange(),r=e.isBackwards();if(n.isEmpty()){var i=n.start.row;t.duplicateLines(i,i)}else{var s=r?n.start:n.end,o=t.insert(s,t.getTextRange(n),!1);n.start=s,n.end=o,e.setSelectionRange(n,r)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n,r,i=this.selection;if(!i.inMultiSelectMode||this.inVirtualSelectionMode){var s=i.toOrientedRange();n=this.$getSelectedRows(s),r=this.session.$moveLines(n.first,n.last,t?0:e),t&&e==-1&&(r=0),s.moveBy(r,0),i.fromOrientedRange(s)}else{var o=i.rangeList.ranges;i.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;var u=0,a=0,f=o.length;for(var l=0;l<f;l++){var c=l;o[l].moveBy(u,0),n=this.$getSelectedRows(o[l]);var h=n.first,p=n.last;while(++l<f){a&&o[l].moveBy(a,0);var d=this.$getSelectedRows(o[l]);if(t&&d.first!=p)break;if(!t&&d.first>p+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(s.value.match(/[{}()\\[\\]]/g))for(;f<s.value.length&&!u;f++){if(!c[s.value[f]])continue;l=c[s.value[f]]+\".\"+s.type.replace(\"rparen\",\"lparen\"),isNaN(a[l])&&(a[l]=0);switch(s.value[f]){case\"(\":case\"[\":case\"{\":a[l]++;break;case\")\":case\"]\":case\"}\":a[l]--,a[l]===-1&&(o=\"bracket\",u=!0)}}else s&&s.type.indexOf(\"tag-name\")!==-1&&(isNaN(a[s.value])&&(a[s.value]=0),i.value===\"<\"?a[s.value]++:i.value===\"</\"&&a[s.value]--,a[s.value]===-1&&(o=\"tag\",u=!0));u||(i=s,s=r.stepForward(),f=0)}while(s&&!u);if(!o)return;var h,d;if(o===\"bracket\"){h=this.session.getBracketRange(n);if(!h){h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1,r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1),d=h.start;if(t||d.row===n.row&&Math.abs(d.column-n.column)<2)h=this.session.getBracketRange(d)}}else if(o===\"tag\"){if(!s||s.type.indexOf(\"tag-name\")===-1)return;var v=s.value;h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2,r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2);if(h.compare(n.row,n.column)===0){u=!1;do s=i,i=r.stepBackward(),i&&(i.type.indexOf(\"tag-close\")!==-1&&h.setEnd(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+1),s.value===v&&s.type.indexOf(\"tag-name\")!==-1&&(i.value===\"<\"?a[v]++:i.value===\"</\"&&a[v]--,a[v]===0&&(u=!0)));while(i&&!u)}s&&s.type.indexOf(\"tag-name\")&&(d=h.start,d.row==n.row&&Math.abs(d.column-n.column)<2&&(d=h.end))}d=h&&h.cursor||d,d&&(e?h&&t?this.selection.setRange(h):h&&h.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(d.row,d.column):this.selection.moveTo(d.row,d.column))},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.$blockScrolling+=1,this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.$blockScrolling-=1,this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),r=0;return n?(this.$tryReplace(n,e)&&(r=1),n!==null&&(this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end)),r):r},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;this.$blockScrolling+=1;var i=this.getSelectionRange();this.selection.moveTo(0,0);for(var s=n.length-1;s>=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e==\"string\"||e instanceof RegExp?t.needle=e:typeof e==\"object\"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var i=this.$scrollAnchor;i.style.cssText=\"position:absolute\",this.container.insertBefore(i,this.container.firstChild);var s=this.on(\"changeSelection\",function(){r=!0}),o=this.renderer.on(\"beforeRender\",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on(\"afterRender\",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.top<o.height&&s.top+t.top+o.lineHeight>window.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+\"px\",i.style.left=s.left+\"px\",i.style.height=o.lineHeight+\"px\",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.removeEventListener(\"changeSelection\",s),this.renderer.removeEventListener(\"afterRender\",u),this.renderer.removeEventListener(\"beforeRender\",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!=\"wide\",i.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e))}}).call(b.prototype),g.defineOptions(b.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",showLineNumbers:\"renderer\",showGutter:\"renderer\",displayIndentGuides:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",foldStyle:\"session\",mode:\"session\"}),t.Editor=b}),define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){this.reset()};(function(){this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),n=null;return t&&(n=this.$doc.undoChanges(t,e),this.$redoStack.push(t),this.dirtyCounter--),n},this.redo=function(e){var t=this.$redoStack.pop(),n=null;return t&&(n=this.$doc.redoChanges(t,e),this.$undoStack.push(t),this.dirtyCounter++),n},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return this.dirtyCounter===0}}).call(r.prototype),t.UndoManager=r}),define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"../lib/event_emitter\").EventEmitter,u=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener(\"change\",this.$updateAnnotations),this.session=e,e&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],r=n.row,i=this.$annotations[r];i||(i=this.$annotations[r]={text:[]});var o=n.text;o=o?s.escapeHTML(o):n.html||\"\",i.text.indexOf(o)===-1&&i.text.push(o);var u=n.type;u==\"error\"?i.className=\" ace_error\":u==\"warning\"&&i.className!=\" ace_error\"?i.className=\" ace_warning\":u==\"info\"&&!i.className&&(i.className=\" ace_info\")}},this.$updateAnnotations=function(e){if(!this.$annotations.length)return;var t=e.data,n=t.range,r=n.start.row,i=n.end.row-r;if(i!==0)if(t.action==\"removeText\"||t.action==\"removeLines\")this.$annotations.splice(r,i+1,null);else{var s=new Array(i+1);s.unshift(r,1),this.$annotations.splice.apply(this.$annotations,s)}},this.update=function(e){var t=this.session,n=e.firstRow,i=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1),s=t.getNextFoldLine(n),o=s?s.start.row:Infinity,u=this.$showFoldWidgets&&t.foldWidgets,a=t.$breakpoints,f=t.$decorations,l=t.$firstLineNumber,c=0,h=t.gutterRenderer||this.$renderer,p=null,d=-1,v=n;for(;;){v>o&&(v=s.end.row+1,s=t.getNextFoldLine(v,s),o=s?s.start.row:Infinity);if(v>i){while(this.$cells.length>d+1)p=this.$cells.pop(),this.element.removeChild(p.element);break}p=this.$cells[++d],p||(p={element:null,textNode:null,foldWidget:null},p.element=r.createElement(\"div\"),p.textNode=document.createTextNode(\"\"),p.element.appendChild(p.textNode),this.element.appendChild(p.element),this.$cells[d]=p);var m=\"ace_gutter-cell \";a[v]&&(m+=a[v]),f[v]&&(m+=f[v]),this.$annotations[v]&&(m+=this.$annotations[v].className),p.element.className!=m&&(p.element.className=m);var g=t.getRowLength(v)*e.lineHeight+\"px\";g!=p.element.style.height&&(p.element.style.height=g);if(u){var y=u[v];y==null&&(y=u[v]=t.getFoldWidget(v))}if(y){p.foldWidget||(p.foldWidget=r.createElement(\"span\"),p.element.appendChild(p.foldWidget));var m=\"ace_fold-widget ace_\"+y;y==\"start\"&&v==o&&v<s.end.row?m+=\" ace_closed\":m+=\" ace_open\",p.foldWidget.className!=m&&(p.foldWidget.className=m);var g=e.lineHeight+\"px\";p.foldWidget.style.height!=g&&(p.foldWidget.style.height=g)}else p.foldWidget&&(p.element.removeChild(p.foldWidget),p.foldWidget=null);var b=c=h?h.getText(t,v):v+l;b!=p.textNode.data&&(p.textNode.data=b),v++}this.element.style.height=e.minHeight+\"px\";if(this.$fixedWidth||t.$useWrapMode)c=t.getLength()+l;var w=h?h.getWidth(t,c,e):c.toString().length*e.characterWidth,E=this.$padding||this.$computePadding();w+=E.left+E.right,w!==this.gutterWidth&&!isNaN(w)&&(this.gutterWidth=w,this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._emit(\"changeGutterWidth\",w))},this.$fixedWidth=!1,this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return\"\"},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,\"ace_folding-enabled\"):r.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=parseInt(e.paddingLeft)+1||0,this.$padding.right=parseInt(e.paddingRight)||0,this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();if(e.x<t.left+n.left)return\"markers\";if(this.$showFoldWidgets&&e.x>n.right-t.right)return\"foldWidgets\"}}).call(u.prototype),t.Gutter=u}),define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../lib/dom\"),s=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){var e=e||this.config;if(!e)return;this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type==\"fullLine\"?this.drawFullLineMarker(t,i,r.clazz,e):r.type==\"screenLine\"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type==\"text\"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+\" ace_start\",e)}this.element.innerHTML=t.join(\"\")},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,n,i,s){var o=t.start.row,u=new r(o,t.start.column,o,this.session.getScreenLastRowColumn(o));this.drawSingleLineMarker(e,u,n+\" ace_start\",i,1,s),o=t.end.row,u=new r(o,0,o,t.end.column),this.drawSingleLineMarker(e,u,n,i,0,s);for(o=t.start.row+1;o<t.end.row;o++)u.start.row=o,u.end.row=o,u.end.column=this.session.getScreenLastRowColumn(o),this.drawSingleLineMarker(e,u,n,i,1,s)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||\"\",e.push(\"<div class='\",n,\" ace_start' style='\",\"height:\",o,\"px;\",\"right:0;\",\"top:\",u,\"px;\",\"left:\",a,\"px;\",i,\"'></div>\"),u=this.$getTop(t.end.row,r);var f=t.end.column*r.characterWidth;e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"width:\",f,\"px;\",\"top:\",u,\"px;\",\"left:\",s,\"px;\",i,\"'></div>\"),o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<0)return;u=this.$getTop(t.start.row+1,r),e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"right:0;\",\"top:\",u,\"px;\",\"left:\",s,\"px;\",i,\"'></div>\")},this.drawSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"width:\",u,\"px;\",\"top:\",a,\"px;\",\"left:\",f,\"px;\",s||\"\",\"'></div>\")},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"top:\",s,\"px;\",\"left:0;right:0;\",i||\"\",\"'></div>\")},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"top:\",s,\"px;\",\"left:0;right:0;\",i||\"\",\"'></div>\")}}).call(s.prototype),t.Marker=s}),define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/useragent\"),u=e(\"../lib/event_emitter\").EventEmitter,a=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){r.implement(this,u),this.EOF_CHAR=\"\\u00b6\",this.EOL_CHAR_LF=\"\\u00ac\",this.EOL_CHAR_CRLF=\"\\u00a4\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"\\u2192\",this.SPACE_CHAR=\"\\u00b7\",this.$padding=0,this.$updateEolChar=function(){var e=this.session.doc.getNewLineCharacter()==\"\\n\"?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n<e+1;n++)this.showInvisibles?t.push(\"<span class='ace_invisible ace_invisible_tab'>\"+this.TAB_CHAR+s.stringRepeat(\"\\u00a0\",n-1)+\"</span>\"):t.push(s.stringRepeat(\"\\u00a0\",n));if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var r=\"ace_indent-guide\",i=\"\",o=\"\";if(this.showInvisibles){r+=\" ace_invisible\",i=\" ace_invisible_space\",o=\" ace_invisible_tab\";var u=s.stringRepeat(this.SPACE_CHAR,this.tabSize),a=this.TAB_CHAR+s.stringRepeat(\"\\u00a0\",this.tabSize-1)}else var u=s.stringRepeat(\"\\u00a0\",this.tabSize),a=u;this.$tabStrings[\" \"]=\"<span class='\"+r+i+\"'>\"+u+\"</span>\",this.$tabStrings[\"\t\"]=\"<span class='\"+r+o+\"'>\"+a+\"</span>\"}},this.updateLines=function(e,t,n){(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)&&this.scrollLines(e),this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;u<r;u++){var a=this.session.getFoldLine(u);if(a){if(a.containsRow(r)){r=a.start.row;break}u=a.end.row}o++}var u=r,a=this.session.getNextFoldLine(u),f=a?a.start.row:Infinity;for(;;){u>f&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),f=a?a.start.row:Infinity);if(u>i)break;var l=s[o++];if(l){var c=[];this.$renderLine(c,u,!this.$useLineGroups(),u==f?a:!1),l.style.height=e.lineHeight*this.session.getRowLength(u)+\"px\",l.innerHTML=c.join(\"\")}u++}},this.scrollLines=function(e){var t=this.config;this.config=e;if(!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);var n=this.element;if(t.firstRow<e.firstRow)for(var r=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);r>0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(var r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRow<t.firstRow){var i=this.$renderLinesFragment(e,e.firstRow,t.firstRow-1);n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i)}if(e.lastRow>t.lastRow){var i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(i)}},this.$renderLinesFragment=function(e,t,n){var r=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=i.createElement(\"div\"),f=[];this.$renderLine(f,s,!1,s==u?o:!1),a.innerHTML=f.join(\"\");if(this.$useLineGroups())a.className=\"ace_line_group\",r.appendChild(a),a.style.height=e.lineHeight*this.session.getRowLength(s)+\"px\";else while(a.firstChild)r.appendChild(a.firstChild);s++}return r},this.update=function(e){this.config=e;var t=[],n=e.firstRow,r=e.lastRow,i=n,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>r)break;this.$useLineGroups()&&t.push(\"<div class='ace_line_group' style='height:\",e.lineHeight*this.session.getRowLength(i),\"px'>\"),this.$renderLine(t,i,!1,i==o?s:!1),this.$useLineGroups()&&t.push(\"</div>\"),i++}this.element.innerHTML=t.join(\"\")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/\\t|&|<|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g,u=function(e,n,r,o,u){if(n)return i.showInvisibles?\"<span class='ace_invisible ace_invisible_space'>\"+s.stringRepeat(i.SPACE_CHAR,e.length)+\"</span>\":s.stringRepeat(\"\\u00a0\",e.length);if(e==\"&\")return\"&\";if(e==\"<\")return\"<\";if(e==\"\t\"){var a=i.session.getScreenTabSize(t+o);return t+=a-1,i.$tabStrings[a]}if(e==\"\\u3000\"){var f=i.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",l=i.showInvisibles?i.SPACE_CHAR:\"\";return t+=1,\"<span class='\"+f+\"' style='width:\"+i.config.characterWidth*2+\"px'>\"+l+\"</span>\"}return r?\"<span class='ace_invisible ace_invisible_space ace_invalid'>\"+i.SPACE_CHAR+\"</span>\":(t+=1,\"<span class='ace_cjk' style='width:\"+i.config.characterWidth*2+\"px'>\"+e+\"</span>\")},a=r.replace(o,u);if(!this.$textToken[n.type]){var f=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),l=\"\";n.type==\"fold\"&&(l=\" style='width:\"+n.value.length*this.config.characterWidth+\"px;' \"),e.push(\"<span class='\",f,\"'\",l,\">\",a,\"</span>\")}else e.push(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);return r<=0||r>=n?t:t[0]==\" \"?(r-=r%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[\" \"],r/this.tabSize)),t.substr(r)):t[0]==\"\t\"?(e.push(s.stringRepeat(this.$tabStrings[\"\t\"],r)),t.substr(r)):t},this.$renderWrappedLine=function(e,t,n,r){var i=0,s=0,o=n[0],u=0;for(var a=0;a<t.length;a++){var f=t[a],l=f.value;if(a==0&&this.displayIndentGuides){i=l.length,l=this.renderIndentGuide(e,l,o);if(!l)continue;i-=l.length}if(i+l.length<o)u=this.$renderToken(e,u,f,l),i+=l.length;else{while(i+l.length>=o)u=this.$renderToken(e,u,f,l.substring(0,o-i)),l=l.substring(o-i),i=o,r||e.push(\"</div>\",\"<div class='ace_line' style='height:\",this.config.lineHeight,\"px'>\"),s++,u=0,o=n[s]||Number.MAX_VALUE;l.length!=0&&(i+=l.length,u=this.$renderToken(e,u,f,l))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s<t.length;s++)r=t[s],i=r.value,n=this.$renderToken(e,n,r,i)},this.$renderLine=function(e,t,n,r){!r&&r!=0&&(r=this.session.getFoldLine(t));if(r)var i=this.$getFoldLineTokens(t,r);else var i=this.session.getTokens(t);n||e.push(\"<div class='ace_line' style='height:\",this.config.lineHeight*(this.$useLineGroups()?1:this.session.getRowLength(t)),\"px'>\");if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,i,s,n):this.$renderSimpleLine(e,i)}this.showInvisibles&&(r&&(t=r.end.row),e.push(\"<span class='ace_invisible ace_invisible_eol'>\",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,\"</span>\")),n||e.push(\"</div>\")},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.length<t){s+=e[i].value.length,i++;if(i==e.length)return}if(s!=t){var o=e[i].value.substring(t-s);o.length>n-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(s<n&&i<e.length){var o=e[i].value;o.length+s>n?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:\"fold\",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i,s=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),i===undefined&&(i=\"opacity\"in this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=this.$updateVisibility.bind(this)};(function(){this.$updateVisibility=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.visibility=e?\"\":\"hidden\"},this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.opacity=e?\"\":\"0\"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&!i&&(this.smoothBlinking=e,r.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.$updateCursors=(e?this.$updateOpacity:this.$updateVisibility).bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+n.column*this.config.characterWidth,i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,i=t.length;n<i;n++){var s=this.getPixelPosition(t[n].cursor,!0);if((s.top>e.height+e.offset||s.top<0)&&n>1)continue;var o=(this.cursors[r++]||this.addCursor()).style;this.drawCursor?this.drawCursor(o,s,e,t[n],this.session):(o.left=s.left+\"px\",o.top=s.top+\"px\",o.width=e.characterWidth+\"px\",o.height=e.lineHeight+\"px\")}while(this.cursors.length>r)this.removeCursor();var u=this.session.getOverwrite();this.$setOverwrite(u),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,\"ace_overwrite-cursors\"):r.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s}),define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/event\"),o=e(\"./lib/event_emitter\").EventEmitter,u=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=i.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,\"scroll\",this.onScroll.bind(this)),s.addListener(this.element,\"mousedown\",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e}}).call(u.prototype);var a=function(e,t){u.call(this,e),this.scrollTop=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\"};r.inherits(a,u),function(){this.classSuffix=\"-v\",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit(\"scroll\",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=function(e){this.inner.style.height=e+\"px\"},this.setScrollHeight=function(e){this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=e)}}.call(a.prototype);var f=function(e,t){u.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};r.inherits(f,u),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(f.prototype),t.ScrollBar=a,t.ScrollBarV=a,t.ScrollBarH=f,t.VScrollBar=a,t.HScrollBar=f}),define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"./lib/event\"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){this.changes=this.changes|e;if(!this.pending&&this.changes){this.pending=!0;var t=this;r.nextFrame(function(){t.pending=!1;var e;while(e=t.changes)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/useragent\"),u=e(\"../lib/event_emitter\").EventEmitter,a=0,f=t.FontMetrics=function(e,t){this.el=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),a||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat(\"X\",a),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){r.implement(this,u),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement(\"div\");this.$setMeasureNodeStyles(e.style),e.style.width=\"0.2px\",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;t>0&&t<1?a=50:a=100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",o.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&this.$pollSizeChangesTimer},this.$measureSizes=function(){if(a===50){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var n={height:e.height,width:e.width/a}}else var n={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/a};return n.width===0||n.height===0?null:n},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,a);var t=this.$main.getBoundingClientRect();return t.width/a},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(f.prototype)}),define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./config\"),o=e(\"./lib/useragent\"),u=e(\"./layer/gutter\").Gutter,a=e(\"./layer/marker\").Marker,f=e(\"./layer/text\").Text,l=e(\"./layer/cursor\").Cursor,c=e(\"./scrollbar\").HScrollBar,h=e(\"./scrollbar\").VScrollBar,p=e(\"./renderloop\").RenderLoop,d=e(\"./layer/font_metrics\").FontMetrics,v=e(\"./lib/event_emitter\").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}';i.importCssString(m,\"ace_editor\");var g=function(e,t){var n=this;this.container=e||i.createElement(\"div\"),this.$keepTextAreaAtCursor=!o.isOldIE,i.addCssClass(this.container,\"ace_editor\"),this.setTheme(t),this.$gutter=i.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.scroller=i.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=i.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new u(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var r=this.$textLayer=new f(this.content);this.canvas=r.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new c(this.container,this),this.scrollBarV.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new d(this.container,500),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new p(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,v),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t};if(this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}if(this.$changedLines.firstRow>this.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var i=0,s=this.$size,o={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};r&&(e||s.height!=r)&&(s.height=r,i|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",i|=this.CHANGE_SCROLL);if(n&&(e||s.width!=n)){i|=this.CHANGE_SIZE,s.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+\"px\",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+\"px\",this.scroller.style.bottom=this.scrollBarH.getHeight()+\"px\";if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)i|=this.CHANGE_FULL}return s.$dirty=!n||!r,i&&this._signal(\"resize\",o),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+\"px\",this.$gutterLineHighlight.style.height=t+\"px\"},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=i.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var r=this.textarea.style,i=this.lineHeight;if(t<0||t>e.height-i){r.top=r.left=\"0\";return}var s=this.characterWidth;if(this.$composition){var o=this.textarea.value.replace(/^\\x01+/,\"\");s*=this.session.$getStringScreenWidth(o)[0]+2,i+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-s&&(n=this.$size.scrollerWidth-s),n+=this.gutterWidth,r.height=i+\"px\",r.width=s+\"px\",r.left=Math.min(n,this.$size.scrollerWidth-s)+\"px\",r.top=Math.min(t,this.$size.height-i)+\"px\"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+e},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\");var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+\"px\",this.content.style.marginTop=-n.offset+\"px\",this.content.style.width=n.width+2*this.$padding+\"px\",this.content.style.height=n.minHeight+\"px\"}e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+\"px\",this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this._signal(\"afterRender\");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal(\"afterRender\")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.max((this.$minLines||1)*this.lineHeight,Math.min(t,e))+this.scrollMargin.v+(this.$extraHeight||0),r=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||r!=this.$vScroll){r!=this.$vScroll&&(this.$vScroll=r,this.scrollBarV.setVisible(r));var i=this.container.clientWidth;this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,i,n),this.desiredHeight=n,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){this.$maxLines&&this.lineHeight>1&&this.$autosize();var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.scrollTop%this.lineHeight,o=t.scrollerHeight+this.lineHeight,u=this.$getLongestLine(),a=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-u-2*this.$padding<0),f=this.$horizScroll!==a;f&&(this.$horizScroll=a,this.scrollBarH.setVisible(a));var l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l,this.session.setScrollTop(Math.max(-this.scrollMargin.top,Math.min(this.scrollTop,i-t.scrollerHeight+this.scrollMargin.bottom))),this.session.setScrollLeft(Math.max(-this.scrollMargin.left,Math.min(this.scrollLeft,u+2*this.$padding-t.scrollerWidth+this.scrollMargin.right)));var c=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop),h=this.$vScroll!==c;h&&(this.$vScroll=c,this.scrollBarV.setVisible(c));var p=Math.ceil(o/this.lineHeight)-1,d=Math.max(0,Math.round((this.scrollTop-s)/this.lineHeight)),v=d+p,m,g,y=this.lineHeight;d=e.screenToDocumentRow(d,0);var b=e.getFoldLine(d);b&&(d=b.start.row),m=e.documentToScreenRow(d,0),g=e.getRowLength(d)*y,v=Math.min(e.screenToDocumentRow(v,0),e.getLength()-1),o=t.scrollerHeight+e.getRowLength(v)*y+g,s=this.scrollTop-m*y;var w=0;this.layerConfig.width!=u&&(w=this.CHANGE_H_SCROLL);if(f||h)w=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),h&&(u=this.$getLongestLine());return this.layerConfig={width:u,padding:this.$padding,firstRow:d,firstRowScreen:m,lastRow:v,lineHeight:y,characterWidth:this.characterWidth,minHeight:o,maxHeight:i,offset:s,gutterOffset:Math.max(0,Math.ceil((s+t.height-t.scrollerHeight)/y)),height:this.$size.scrollerHeight},w},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(t<n.firstRow)return;if(t===Infinity){this.$showGutter&&this.$gutterLayer.update(n),this.$textLayer.update(n);return}return this.$textLayer.updateLines(n,e,t),!0},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(this.$size.scrollerHeight===0)return;var r=this.$cursorLayer.getPixelPosition(e),i=r.left,s=r.top,o=n&&n.top||0,u=n&&n.bottom||0,a=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;a+o>s?(t&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-u<s+this.lineHeight&&(t&&(s+=t*this.$size.scrollerHeight),this.session.setScrollTop(s+this.lineHeight-this.$size.scrollerHeight));var f=this.scrollLeft;f>i?(i<this.$padding+2*this.layerConfig.characterWidth&&(i=-this.scrollMargin.left),this.session.setScrollLeft(i)):f+this.$size.scrollerWidth<i+this.characterWidth?this.session.setScrollLeft(Math.round(i+this.characterWidth-this.$size.scrollerWidth)):f<=this.$padding&&i-f<this.characterWidth&&this.session.setScrollLeft(0)},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){typeof e==\"number\"&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),r=this.$size.scrollerHeight-this.lineHeight,i=n.top-r*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var n=0,r=this.STEPS,i=[],s=function(e,t,n){return n*(Math.pow(e-1,3)+1)+t};for(n=0;n<r;++n)i.push(s(n/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,n,r){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}),s=i.top;t&&(s-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(s),n!==!1&&this.animateScrolling(o,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(!this.$animatedScroll)return;var r=this;if(e==n)return;if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length){e=i[0];if(e==n)return}}var s=r.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:s},clearInterval(this.$timer),r.session.setScrollTop(s.shift()),r.session.$scrollTop=n,this.$timer=setInterval(function(){s.length?(r.session.setScrollTop(s.shift()),r.session.$scrollTop=n):n!=null?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$scrollAnimation=null,t&&t())},10)},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){if(t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(r);return{row:i,column:s,side:r-s>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(r,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(r.column*this.characterWidth),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){i.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;i.removeCssClass(this.textarea,\"ace_composition\"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r.cssClass)return;i.importCssString(r.cssText,r.cssClass,n.container.ownerDocument),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s=\"padding\"in r?r.padding:\"padding\"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,\"ace_dark\",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent(\"themeLoaded\",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent(\"themeChange\",{theme:e});if(!e||typeof e==\"string\"){var r=e||this.$options.theme.initialValue;s.loadModule([\"theme\",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),s.defineOptions(g.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e==\"number\"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight){this.$gutterLineHighlight=i.createElement(\"div\"),this.$gutterLineHighlight.className=\"ace_gutter-active-line\",this.$gutter.appendChild(this.$gutterLineHighlight);return}this.$gutterLineHighlight.style.display=e?\"\":\"none\",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e==\"number\"&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0}}),t.VirtualRenderer=g}),define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/net\"),s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../config\"),u=function(t,n,r,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get(\"packaged\")||!e.toUrl)i=i||o.moduleUrl(n,\"worker\");else{var s=this.$normalizePath;i=i||s(e.toUrl(\"ace/worker/worker.js\",null,\"_\"));var u={};t.forEach(function(t){u[t]=s(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))})}try{this.$worker=new Worker(i)}catch(a){if(!(a instanceof window.DOMException))throw a;var f=this.$workerBlob(i),l=window.URL||window.webkitURL,c=l.createObjectURL(f);this.$worker=new Worker(c),l.revokeObjectURL(c)}this.$worker.postMessage({init:!0,tlns:u,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue?this.deltaQueue.push(e.data):(this.deltaQueue=[e.data],setTimeout(this.$sendDeltaQueue,0))},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>20&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e})},this.$workerBlob=function(e){var t=\"importScripts('\"+i.qualifyURL(e)+\"');\";try{return new Blob([t],{type:\"application/javascript\"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob(\"application/javascript\")}}}).call(u.prototype);var a=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,i=!1,u=Object.create(s),a=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){a.messageBuffer.push(e),r&&(i?setTimeout(f):f())},this.setEmitSync=function(e){i=e};var f=function(){var e=a.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};u.postMessage=function(e){a.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},o.loadModule([\"worker\",t],function(e){r=new e[n](u);while(a.messageBuffer.length)f()})};a.prototype=u.prototype,t.UIWorkerClient=a,t.WorkerClient=u}),define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/oop\"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session,i=this.$pos;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(i.row,i.column),this.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.pos.on(\"change\",function(t){n.removeMarker(e.markerId),e.markerId=n.addMarker(new r(t.value.row,t.value.column,t.value.row,t.value.column+e.length),e.mainClass,null,!1)}),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1),n.on(\"change\",function(i){e.removeMarker(n.markerId),n.markerId=e.addMarker(new r(i.value.row,i.value.column,i.value.row,i.value.column+t.length),t.othersClass,null,!1)})})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)},this.onUpdate=function(e){var t=e.data,n=t.range;if(n.start.row!==n.end.row)return;if(n.start.row!==this.pos.row)return;if(this.$updating)return;this.$updating=!0;var i=t.action===\"insertText\"?n.end.column-n.start.column:n.start.column-n.end.column;if(n.start.column>=this.pos.column&&n.start.column<=this.pos.column+this.length+1){var s=n.start.column-this.pos.column;this.length+=i;if(!this.session.$fromUndo){if(t.action===\"insertText\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column<u.column&&(a.column+=i),this.doc.insert(a,t.text)}else if(t.action===\"removeText\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column<u.column&&(a.column+=i),this.doc.remove(new r(a.row,a.column,a.row,a.column-i))}n.start.column===this.pos.column&&t.action===\"insertText\"?setTimeout(function(){this.pos.setPosition(this.pos.row,this.pos.column-i);for(var e=0;e<this.others.length;e++){var t=this.others[e],r={row:t.row,column:t.column-i};t.row===n.start.row&&n.start.column<t.column&&(r.column+=i),t.setPosition(r.row,r.column)}}.bind(this),0):n.start.column===this.pos.column&&t.action===\"removeText\"&&setTimeout(function(){for(var e=0;e<this.others.length;e++){var t=this.others[e];t.row===n.start.row&&n.start.column<t.column&&t.setPosition(t.row,t.column-i)}}.bind(this),0)}this.pos._emit(\"change\",{value:this.pos});for(var o=0;o<this.others.length;o++)this.others[o]._emit(\"change\",{value:this.others[o]})}this.$updating=!1},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.pos.detach();for(var e=0;e<this.others.length;e++)this.others[e].detach();this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)throw Error(\"Canceling placeholders only supported with undo manager attached to session.\");var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n<t;n++)e.undo(!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}).call(o.prototype),t.PlaceHolder=o}),define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){function s(e,t){return e.row==t.row&&e.column==t.column}function o(e){var t=e.domEvent,n=t.altKey,o=t.shiftKey,u=t.ctrlKey,a=e.getAccelKey(),f=e.getButton();u&&i.isMac&&(f=t.button);if(e.editor.inMultiSelectMode&&f==2){e.editor.textInput.onContextMenu(e.domEvent);return}if(!u&&!n&&!a){f===0&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode();return}if(f!==0)return;var l=e.editor,c=l.selection,h=l.inMultiSelectMode,p=e.getDocumentPosition(),d=c.getCursor(),v=e.inSelection()||c.isEmpty()&&s(p,d),m=e.x,g=e.y,y=function(e){m=e.clientX,g=e.clientY},b=l.session,w=l.renderer.pixelToScreenCoordinates(m,g),E=w,S;if(l.$mouseHandler.$enableJumpToDef)u&&n||a&&n?S=\"add\":n&&(S=\"block\");else if(a&&!n){S=\"add\";if(!h&&o)return}else n&&(S=\"block\");S&&i.isMac&&t.ctrlKey&&l.$mouseHandler.cancelContextMenu();if(S==\"add\"){if(!h&&v)return;if(!h){var x=c.toOrientedRange();l.addSelectionMarker(x)}var T=c.rangeList.rangeAtPoint(p);l.$blockScrolling++,l.inVirtualSelectionMode=!0,o&&(T=null,x=c.ranges[0],l.removeSelectionMarker(x)),l.once(\"mouseup\",function(){var e=c.toOrientedRange();T&&e.isEmpty()&&s(T.cursor,e.cursor)?c.substractPoint(e.cursor):(o?c.substractPoint(x.cursor):x&&(l.removeSelectionMarker(x),c.addRange(x)),c.addRange(e)),l.$blockScrolling--,l.inVirtualSelectionMode=!1})}else if(S==\"block\"){e.stop(),l.inVirtualSelectionMode=!0;var N,C=[],k=function(){var e=l.renderer.pixelToScreenCoordinates(m,g),t=b.screenToDocumentPosition(e.row,e.column);if(s(E,e)&&s(t,c.lead))return;E=e,l.$blockScrolling++,l.selection.moveToPosition(t),l.renderer.scrollCursorIntoView(),l.removeSelectionMarkers(C),C=c.rectangularRangeBlock(E,w),l.$mouseHandler.$clickSelection&&C.length==1&&C[0].isEmpty()&&(C[0]=l.$mouseHandler.$clickSelection.clone()),C.forEach(l.addSelectionMarker,l),l.updateSelectionMarkers(),l.$blockScrolling--};l.$blockScrolling++,h&&!a?c.toSingleRange():!h&&a&&(N=c.toOrientedRange(),l.addSelectionMarker(N)),o?w=b.documentToScreenPosition(c.lead):c.moveToPosition(p),l.$blockScrolling--,E={row:-1,column:-1};var L=function(e){clearInterval(O),l.removeSelectionMarkers(C),C.length||(C=[c.toOrientedRange()]),l.$blockScrolling++,N&&(l.removeSelectionMarker(N),c.toSingleRange(N));for(var t=0;t<C.length;t++)c.addRange(C[t]);l.inVirtualSelectionMode=!1,l.$mouseHandler.$clickSelection=null,l.$blockScrolling--},A=k;r.capture(l.container,y,L);var O=setInterval(function(){A()},20);return e.preventDefault()}}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\");t.onMouseDown=o}),define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],function(e,t,n){t.defaultCommands=[{name:\"addCursorAbove\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"addCursorBelow\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"addCursorAboveSkipCurrent\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"addCursorBelowSkipCurrent\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"selectMoreBefore\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"selectMoreAfter\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"selectNextBefore\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"selectNextAfter\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readonly:!0},{name:\"splitIntoLines\",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readonly:!0},{name:\"alignCursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readonly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readonly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var r=e(\"../keyboard/hash_handler\").HashHandler;t.keyboardHandler=new r(t.multiSelectCommands)}),define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],function(e,t,n){function h(e,t,n){return c.$options.wrap=!0,c.$options.needle=t,c.$options.backwards=n==-1,c.find(e)}function v(e,t){return e.row==t.row&&e.column==t.column}function m(e){if(e.$multiselectOnSessionChange)return;e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",o),e.commands.addCommands(f.defaultCommands),g(e)}function g(e){function r(t){n&&(e.renderer.setMouseCursor(\"\"),n=!1)}var t=e.textInput.getElement(),n=!1;u.addListener(t,\"keydown\",function(t){t.keyCode==18&&!(t.ctrlKey||t.shiftKey||t.metaKey)?n||(e.renderer.setMouseCursor(\"crosshair\"),n=!0):n&&r()}),u.addListener(t,\"keyup\",r),u.addListener(t,\"blur\",r)}var r=e(\"./range_list\").RangeList,i=e(\"./range\").Range,s=e(\"./selection\").Selection,o=e(\"./mouse/multi_select_handler\").onMouseDown,u=e(\"./lib/event\"),a=e(\"./lib/lang\"),f=e(\"./commands/multi_select_commands\");t.commands=f.defaultCommands.concat(f.multiSelectCommands);var l=e(\"./search\").Search,c=new l,p=e(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(p.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(!e)return;if(!this.inMultiSelectMode&&this.rangeCount===0){var n=this.toOrientedRange();this.rangeList.add(n),this.rangeList.add(e);if(this.rangeList.ranges.length!=2)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var r=this.rangeList.add(e);return this.$onAddRange(e),r.length&&this.$onRemoveRange(r),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal(\"removeRange\",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c<o;c++)f.push(this.getLineRange(c,!0));l=this.getLineRange(o,!0),l.end.column=n.end.column,f.push(l),f.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column<t.column;if(s)var o=e.column,u=t.column;else var o=t.column,u=e.column;var a=e.row<t.row;if(a)var f=e.row,l=t.row;else var f=t.row,l=e.row;o<0&&(o=0),f<0&&(f=0),f==l&&(n=!0);for(var c=f;c<=l;c++){var h=i.fromPoints(this.session.screenToDocumentPosition(c,o),this.session.screenToDocumentPosition(c,u));if(h.isEmpty()){if(p&&v(h.end,p))break;var p=h.end}h.cursor=s?h.start:h.end,r.push(h)}a&&r.reverse();if(!n){var d=r.length-1;while(r[d].isEmpty()&&d>0)d--;if(d>0){var m=0;while(r[m].isEmpty())m++}for(var g=d;g>=m;g--)r[g].isEmpty()&&r.splice(g,1)}return r}}.call(s.prototype);var d=e(\"./editor\").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction==\"forEach\"?r=n.forEachSelection(t,e.args):t.multiSelectAction==\"forEachLine\"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction==\"single\"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges();var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r<t.length;r++)n.push(this.session.getTextRange(t[r]));var i=this.session.getDocument().getNewLineCharacter();e=n.join(i),e.length==(n.length-1)*i.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var n=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var r=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor;(r.row!=t.row||this.session.$clipPositionToDocument(r.row,r.column).column!=t.column)&&this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange())}},this.findAll=function(e,t,n){t=t||{},t.needle=e||t.needle;if(t.needle==undefined){var r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(r)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;this.$blockScrolling+=1;var s=this.multiSelect;n||s.toSingleRange(i[0]);for(var o=i.length;o--;)s.addRange(i[o],!0);return r&&s.rangeList.rangeAtPoint(r.start)&&s.addRange(r,!0),this.$blockScrolling-=1,i.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o=this.session.screenToDocumentPosition(s.row+e,s.column);if(!n.isEmpty())var u=this.session.documentToScreenPosition(r?n.end:n.start),a=this.session.screenToDocumentPosition(u.row+e,u.column);else var a=o;if(r){var f=i.fromPoints(o,a);f.cursor=f.start}else{var f=i.fromPoints(a,o);f.cursor=f.end}f.desiredColumn=s.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(n);else if(t)var l=n.cursor;this.selection.addRange(f),l&&this.selection.substractPoint(l)},this.transposeSelections=function(e){var t=this.session,n=t.multiSelect,r=n.ranges;for(var i=r.length;i--;){var s=r[i];if(s.isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var u=[];for(var i=r.length;i--;){var s=r[i];u.unshift(t.getTextRange(s))}e<0?u.unshift(u.pop()):u.push(u.shift());for(var i=r.length;i--;){var s=r[i],o=s.clone();t.replace(s,u[i]),s.start.row=o.start.row,s.start.column=o.start.column}},this.selectMore=function(e,t,n){var r=this.session,i=r.multiSelect,s=i.toOrientedRange();if(s.isEmpty()){s=r.getWordRange(s.start.row,s.start.column),s.cursor=e==-1?s.start:s.end,this.multiSelect.addRange(s);if(n)return}var o=r.getTextRange(s),u=h(r,o,e);u&&(u.cursor=e==-1?u.start:u.end,this.$blockScrolling+=1,this.session.unfold(u),this.multiSelect.addRange(u),this.$blockScrolling-=1,this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(s.cursor)},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,s=n.filter(function(e){if(e.cursor.row==r)return!0;r=e.cursor.row});if(!n.length||s.length==n.length-1){var o=this.selection.getRange(),u=o.start.row,f=o.end.row,l=u==f;if(l){var c=this.session.getLength(),h;do h=this.session.getLine(f);while(/[=:]/.test(h)&&++f<c);do h=this.session.getLine(u);while(/[=:]/.test(h)&&--u>0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.doc.removeLines(u,f);p=this.$reAlignText(p,l),this.session.doc.insert({row:u,column:0},p.join(\"\\n\")+\"\\n\"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),i<v&&(v=i),i});n.forEach(function(t,n){var r=t.cursor,s=d-r.column,o=m[n]-v;s>o?e.insert(r,a.stringRepeat(\" \",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(\" \",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o,\" \")+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),s<t[2].length&&(s=t[2].length),o>t[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off(\"addRange\",this.$onAddRange),n.multiSelect.off(\"removeRange\",this.$onRemoveRange),n.multiSelect.off(\"multiSelect\",this.$onMultiSelect),n.multiSelect.off(\"singleSelect\",this.$onSingleSelect),n.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),n.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e(\"./config\").defineOptions(d.prototype,\"editor\",{enableMultiselect:{set:function(e){m(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",o)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",o))},value:!0}})}),define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../range\").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?\"start\":t==\"markbeginend\"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++t<a){var c=e.getLine(t).search(i);if(c==-1)continue;if(c<=o)break;l=t}if(l>f){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a==\"start\"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeEditor\",this.$onChangeEditor)}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./range\").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(!t)return;var n=e.data,r=n.range,i=r.start.row,s=r.end.row-i;if(s!==0)if(n.action==\"removeText\"||n.action==\"removeLines\"){var o=t.splice(i+1,s);o.forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var u=new Array(s);u.unshift(i,0),t.splice.apply(t,u),this.$updateRows()}},this.$updateRows=function(){var e=this.session.lineWidgets;if(!e)return;var t=!0;e.forEach(function(e,n){e&&(t=!1,e.row=n)}),t&&(this.session.lineWidgets=null)},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength())),this.session.lineWidgets[e.row]=e;var t=this.editor.renderer;return e.html&&!e.el&&(e.el=i.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,t.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),e.pixelHeight||(e.pixelHeight=e.el.offsetHeight),e.rowCount==null&&(e.rowCount=e.pixelHeight/t.layerConfig.lineHeight),this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,t),e},this.removeLineWidget=function(e){e._inDocument=!1,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el);if(e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(t){}this.session.lineWidgets&&(this.session.lineWidgets[e.row]=undefined),this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(!n||!n.length)return;var i=Infinity;for(var s=0;s<n.length;s++){var o=n[s];o._inDocument||(o._inDocument=!0,t.container.appendChild(o.el)),o.h=o.el.offsetHeight,o.fixedWidth||(o.w=o.el.offsetWidth,o.screenWidth=Math.ceil(o.w/r.characterWidth));var u=o.h/r.lineHeight;o.coverLine&&(u-=this.session.getRowLineCount(o.row),u<0&&(u=0)),o.rowCount!=u&&(o.rowCount=u,o.row<i&&(i=o.row))}i!=Infinity&&(this.session._emit(\"changeFold\",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]},this.renderWidgets=function(e,t){var n=t.layerConfig,r=this.session.lineWidgets;if(!r)return;var i=Math.min(this.firstRow,n.firstRow),s=Math.max(this.lastRow,n.lastRow,r.length);while(i>0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+\"px\";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+\"px\",u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+\"px\":u.el.style.right=\"\"}}}).call(o.prototype),t.LineWidgets=o}),define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length-1?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?\"unshift\":\"push\"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e(\"../line_widgets\").LineWidgets,i=e(\"../lib/dom\"),s=e(\"../range\").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.lineWidgets&&n.lineWidgets[o];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!=\"number\"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement(\"div\")},p=h.el.appendChild(i.createElement(\"div\")),d=h.el.appendChild(i.createElement(\"div\"));d.className=\"error_widget_arrow \"+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+\"px\",h.el.className=\"error_widget_wrapper\",p.className=\"error_widget \"+l.className,p.innerHTML=l.text.join(\"<br>\"),p.appendChild(i.createElement(\"div\"));var m=function(e,t,n){if(t===0&&(n===\"esc\"||n===\"return\"))return h.destroy(),{command:\"null\"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off(\"changeSelection\",h.destroy),e.off(\"changeSession\",h.destroy),e.off(\"mouseup\",h.destroy),e.off(\"change\",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on(\"changeSelection\",h.destroy),e.on(\"changeSession\",h.destroy),e.on(\"mouseup\",h.destroy),e.on(\"change\",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(\" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }\",\"\")}),define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./editor\").Editor,o=e(\"./edit_session\").EditSession,u=e(\"./undomanager\").UndoManager,a=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,t.edit=function(e){if(typeof e==\"string\"){var n=e;e=document.getElementById(n);if(!e)throw new Error(\"ace.edit can't find div #\"+n)}if(e&&e.env&&e.env.editor instanceof s)return e.env.editor;var o=\"\";if(e&&/input|textarea/i.test(e.tagName)){var u=e;o=u.value,e=r.createElement(\"pre\"),u.parentNode.replaceChild(e,u)}else o=r.getInnerText(e),e.innerHTML=\"\";var f=t.createEditSession(o),l=new s(new a(e));l.setSession(f);var c={document:f,editor:l,onResize:l.resize.bind(l,null)};return u&&(c.textarea=u),i.addListener(window,\"resize\",c.onResize),l.on(\"destroy\",function(){i.removeListener(window,\"resize\",c.onResize),c.editor.container.env=null}),l.container.env=l.env=c,l},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u});\n (function() {\n window.require([\"ace/ace\"], function(a) {\n a && a.config.init(true);\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n });\n })();\n "
}
}
}
{"tiddlers":{"$:/plugins/kookma/refnotes/history":{"title":"$:/plugins/kookma/refnotes/history","created":"20201211095732935","modified":"20210918162309893","tags":"","type":"text/vnd.tiddlywiki","text":"Full change log https://kookma.github.io/TW-Refnotes/#ChangeLog\n\n* ''1.7.2'' -- 2021.09.19 -- stable release based on TW 5.2.0\n* ''1.6.0'' -- 2021.04.02 -- development (beta) of new release\n* ''1.0.3'' -- 2019.03.20 -- first stable release\n"},"$:/plugins/kookma/refnotes/license":{"title":"$:/plugins/kookma/refnotes/license","created":"20201211095732937","modified":"20210917161905837","tags":"","type":"text/vnd.tiddlywiki","text":"Distributed under an MIT license.\n\nCopyright (c) 2019-2021 [[Mohammad Rahmani|https://github.com/kookma]]\n\n<<<\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n<<<"},"$:/plugins/kookma/refnotes/macros/abbr":{"title":"$:/plugins/kookma/refnotes/macros/abbr","created":"20181022071907838","modified":"20210917161905845","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define abbr(term:\"\", dict:\"Glossary\")\n<$set name=\"abbreviation\" \n tiddler=<<__dict__>>\n index=<<__term__>>\n emptyValue=\"Term not found\">\n <span class=refnotes-abbr><abbr title=<<abbreviation>> ><$text text=<<__term__>> /></abbr></span>\n</$set>\n\\end\n"},"$:/plugins/kookma/refnotes/macros/apa/authors":{"title":"$:/plugins/kookma/refnotes/macros/apa/authors","created":"20210918154536732","modified":"20210918182843051","tags":"","type":"text/vnd.tiddlywiki","text":"\\define show-authors-in-citation()\n<!-- used in ref macro APA7 -->\n<$vars number-authors={{{[<__tid__>get[bibtex-author]split[ and ]count[]]}}}>\n<$list filter=\"[<number-authors>compare:number:gt[2]]\" emptyMessage=\"\"\"<$view tiddler=<<__tid__>> field=\"bibtex-author\"/>\"\"\">\n<$text text={{{[<__tid__>get[bibtex-author]split[ and ]first[]addsuffix[, et al.]]}}} />\n</$list>\n</$vars>\n\\end\n\n\\define show-authors-in-references()\n<!-- display authors as comma separated list, removes \"and\" -->\n<!-- used in template -->\n\\whitespace trim\n<$vars authorlist={{!!bibtex-author}} replace1=\" and \" replace2=\",([^,]*)$\" >\n<$vars authors={{{ [<authorlist>search-replace:g:regexp<replace1>,[, ]search-replace:g:regexp<replace2>,[, and $1]]}}} >\n<<authors>>\n</$vars>\n</$vars>\n\\end\n\n\n<!--\n- These macros help to format the author list in citation and references in closer format to APA7\n- The author list in referenc list is not exactly wahat APA7 standard says! to be fixed\n-->\n"},"$:/plugins/kookma/refnotes/macros/apa/ref":{"title":"$:/plugins/kookma/refnotes/macros/apa/ref","created":"20210407044450831","modified":"20210918174611274","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define ref(tid)\n\\import $:/plugins/kookma/refnotes/macros/apa/authors\n\\whitespace trim\n<$set name=\"ref-tid\" tiddler=<<__tid__>> field=\"title\" emptyValue=\"RefNotFound\">\n<div class=\"refnotes-tooltip refcls\">\n<$reveal type=\"match\" default=<<ref-tid>> text=\"RefNotFound\">\n<$link overrideClass=\"link-refcls\">[<$view tiddler=<<__tid__>> field=\"title\"/>]</$link>\n<div class=\"refnotes-tooltiptext ref-notfound\"><b>Warning</b>: Reference Not Found.<br>Click to create it:<<create-notexisted-ref \"$tid$\">></div>\n</$reveal>\n<$reveal type=\"nomatch\" default=<<ref-tid>> text=\"RefNotFound\">\n<<show-authors-in-citation>> (<$view tiddler=<<__tid__>> field=\"bibtex-year\"/>)\n<div class=\"refnotes-tooltiptext\">\n<$macrocall $name=\"displayref-onhover\" refTid=<<ref-tid>> />\n</div>\n</$reveal>\n</div>\n</$set>\n\\end"},"$:/plugins/kookma/refnotes/macros/apa/showrefs":{"title":"$:/plugins/kookma/refnotes/macros/apa/showrefs","created":"20190117195536649","modified":"20210918174611753","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define showrefs(filter:\"[<currentTiddler>]\", title:\"Empty\", class:\"ref-list\", emptyMessage:\"\")\n\\import $:/plugins/kookma/refnotes/macros/apa/authors\n<$vars leftDelimiter=\"<<ref \">\n<$list filter=\"[subfilter<__filter__>search:text:literal<leftDelimiter>limit[1]]\" variable=null emptyMessage=<<__emptyMessage__>> ><!-- check to see if there is any citation -->\n<$reveal tag=\"div\" type=\"nomatch\" default=\"Empty\" text=<<__title__>> >\n<h2>$title$</h2>\n</$reveal>\n<$wikify name=\"mylist\" text=\"\"\"\n<$list filter=<<__filter__>> >\n<$macrocall $name=\"find-refs\" tid=<<currentTiddler>> />\n</$list>\n\"\"\">\n<ol class=\"$class$\">\n<$list filter=\"[enlist<mylist>trim[]sort[]]\" variable=\"reference\">\n\n<$vars currentType={{{[<reference>get[bibtex-entry-type]lowercase[]] ~[[miscellaneous]]}}} >\n<$set name=\"bodyLookup\" \n filter=\"[all[tiddlers+shadows]tag[$:/tags/Refnotes/ReflistTemplate]contains:list<currentType>] +[limit[1]get[title]]\"\n value=<<bodyLookup>> \n emptyValue=\"$:/plugins/kookma/refnotes/templates/reflist/default\">\n<$transclude tiddler=<<bodyLookup>> field=\"text\" mode=\"inline\"/>\n</$set>\n</$vars>\n\n</$list>\n</ol>\n</$wikify>\n</$list>\n</$vars>\n\\end"},"$:/plugins/kookma/refnotes/macros/bibtex/find-refs":{"title":"$:/plugins/kookma/refnotes/macros/bibtex/find-refs","created":"20181213121411187","modified":"20210917161905873","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define find-refs(tid)\n<$vars regexp=\"(?g)<<ref .+?>>\"\nregexp2='<<ref \"*(.*?)\"*>>'\nregexp3=\"^'(.*?)'\"\nregexp4=\"\\[\\[(.*?)\\]\\]\"\n>\n<$list filter=\"[[$tid$]regexprefs:text<regexp>]\">\n<$list filter=\"[all[current]regexprefs<regexp2>]\">\n<$list filter=\"[all[current]regexprefs<regexp3>] ~[all[current]]\" >\n<$list filter=\"[all[current]regexprefs<regexp4>] ~[all[current]]\" variable=p>\n<<pwrapper>>\n</$list>\n</$list>\n</$list>\n</$list>\n</$vars>\n\\end\n\n\\define pwrapper() \n[[[[$(p)$]]]]\n\\end"},"$:/plugins/kookma/refnotes/macros/bibtex/process-entries":{"title":"$:/plugins/kookma/refnotes/macros/bibtex/process-entries","created":"20210405065852415","modified":"20210917161905883","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define title-tolowercase()\n<$vars curTitle=<<currentTiddler>> newTitle={{{[<currentTiddler>lowercase[]]}}}>\n<$list filter=\"[<curTitle>!match<newTitle>]\" variable=null>\n<$action-sendmessage $message=\"tm-rename-tiddler\" from=<<currentTiddler>> to=<<newTitle>> />\n</$list>\n</$vars>\n\\end\n\n\\define tag-entries()\n<!-- change entry type to lower case -->\n<$action-setfield $tiddler=<<currentTiddler>> bibtex-entry-type={{{[<currentTiddler>get[bibtex-entry-type]lowercase[]]}}} />\n<!-- add bibtex-entry -->\n<$fieldmangler>\n<$action-sendmessage $message=\"tm-add-tag\" $param=\"bibtex-entry\" />\n</$fieldmangler>\n\\end\n\n\\define process-entries(title:\"Process New Bibtex Entries\")\n<$button> $title$\n<$list filter=\"[has[bibtex-title]]\">\n<<tag-entries>>\n<<title-tolowercase>>\n</$list>\n</$button>\n\\end"},"$:/plugins/kookma/refnotes/macros/bibtex/regexprefs.js":{"title":"$:/plugins/kookma/refnotes/macros/bibtex/regexprefs.js","text":"/*\\\ntitle: $:/plugins/kookma/macro/bibtex/regexprefs.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching and returning result. All results are returned if global flag used. All sub-groups are returned if not global and sub-group hits are found.\n\nThis is a hacked version of core macro: $:/core/modules/filters/regexp.js\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexprefs = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match, global,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\n\tglobal = /g/.test(flags) ;\n\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title), ret=\"\";\n\t\t\tif(text !== null) {\n\t\t\t\tret = text.match(regexp) ;\n\t\t\t\tif(ret !==null) {\n\t\t\t\t\tif(global) {\n\t\t\t\t\t\tresults.push.apply(results,ret) ; //DEBUG\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if there are sub groups return sub groups START\n\t\t\t\t\t\tif(ret.length > 1) { // return sub groups\n\t\t\t\t\t\t\tresults = results.concat(ret.slice(1)) ;\n\t\t\t\t\t\t} else { // if no sub-groups\n\t\t\t\t\t\t\tresults.push(ret[0]);\n\t\t\t\t\t\t} \n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();","type":"application/javascript","module-type":"filteroperator","created":"20190120190755258","modified":"20210917161905893"},"$:/plugins/kookma/refnotes/macros/bibtex/utility":{"title":"$:/plugins/kookma/refnotes/macros/bibtex/utility","created":"20210407045329557","modified":"20210917161905902","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define displayref-onhover(refTid)\n<$set name=\"ref-tid\" value=<<__refTid__>> >\n<$link overrideClass=\"link-refcls\" to=<<ref-tid>> >\n<$list filter=\"[<ref-tid>get[bibtex-entry-type]lowercase[]!match[website]]\" variable=null\nemptyMessage=\"\"\"<span class=\"ref-author\"><$view tiddler=<<ref-tid>> field=\"bibtex-url\"/>.</span>\"\"\">\n<span class=\"ref-author\"><$view tiddler=<<ref-tid>> field=\"bibtex-author\"/>.</span>\n</$list>\n</$link>\n<$view tiddler=<<ref-tid>> field=\"bibtex-title\"/>. (<$view tiddler=<<ref-tid>> field=\"bibtex-year\"/>)\n</$set>\n\\end\n\n\\define create-notexisted-ref(refTid)\n<$set name=\"myTid\" value=<<__refTid__>> >\n<$button class=\"tc-btn-invisible tc-tiddlylink\">\n<$action-sendmessage $message=\"tm-new-tiddler\"\n title=<<myTid>> \n bibtex-author=\"\" bibtex-year=\"\"\n bibtex-title=\"\" bibtex-abstract=\"\"\n bibtex-entry-type=\"\" bibtex-keywords=\"\"\n bibtex-doi=\"\" bibtex-url=\"\"\n tags=\"bibtex-entry\"\n /><<myTid>> \n</$button>\n</$set> \n\\end"},"$:/plugins/kookma/refnotes/macros/find":{"title":"$:/plugins/kookma/refnotes/macros/find","created":"20181213121411187","modified":"20211105070807510","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define find(text, begin, end, output:\"simple\", mode:\"all\")\n<$vars \n fulltext=<<__text__>>\n start=<<__begin__>>\n stop=<<__end__>>\n output-macro=<<__output__>>\n>\n<$list variable=p1 filter=\"[<fulltext>splitbefore<start>]\">\n<$list variable=p2 filter=\"[<fulltext>removeprefix<p1>]\">\n<$list variable=p3 filter=\"[<p2>splitbefore<stop>removesuffix<stop>]\">\n<$macrocall $name=<<output-macro>> p=<<p3>> />\n<$reveal type=\"match\" text=\"all\" default=<<__mode__>> >\n<$macrocall $name=\"find\"\n text={{{[<p2>removeprefix<p3>removeprefix<stop>]}}}\n begin=<<start>>\n end=<<stop>>\n output=<<output-macro>>\n/>\n</$reveal>\n</$list>\n</$list>\n</$list>\n</$vars>\n\\end\n\n\\define simple(p)\n<$text text=<<__p__>> />\n\\end\n\n\\define simple-list(p)\n<li><$text text=<<__p__>>/></li>\n\\end\n"},"$:/plugins/kookma/refnotes/macros/footnote":{"title":"$:/plugins/kookma/refnotes/macros/footnote","created":"20181214095749808","modified":"20210917161905912","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define fnote(note)\n<div class=\"refnotes-tooltip refnotes-footnote\"><div class=\"refnotes-tooltiptext\">$note$</div></div>\n\\end"},"$:/plugins/kookma/refnotes/macros/numbered/refnum":{"title":"$:/plugins/kookma/refnotes/macros/numbered/refnum","created":"20181210155346225","modified":"20210917161905920","tags":"disp","type":"text/vnd.tiddlywiki","text":"\\define refnum(tid)\n<$set name=\"ref-tid\" tiddler=<<__tid__>> field=\"title\" emptyValue=\"RefNotFound\">\n<div class=\"refnotes-tooltip refcls\">\n<$reveal type=\"match\" default=<<ref-tid>> text=\"RefNotFound\">\n<$link overrideClass=\"link-refcls\">\n[<$view tiddler=<<__tid__>> field=\"title\"/>]\n</$link>\n<div class=\"refnotes-tooltiptext ref-notfound\"><b>Warning</b>: Reference Not Found.<br>Click to create it:<<create-notexisted-ref \"$tid$\">></div>\n</$reveal>\n<$reveal type=\"nomatch\" default=<<ref-tid>> text=\"RefNotFound\">\n[<$view tiddler=<<__tid__>> field=\"caption\"><$view tiddler=<<__tid__>> field=\"title\"/></$view>]\n<div class=\"refnotes-tooltiptext\">\n<$macrocall $name=\"displayref-onhover\" refTid=<<ref-tid>> />\n</div>\n</$reveal>\n</div>\n</$set>\n\\end\n"},"$:/plugins/kookma/refnotes/macros/search-ui":{"title":"$:/plugins/kookma/refnotes/macros/search-ui","created":"20141231095518178","modified":"20210917161905924","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define searchTid() xx$:/temp/search\n\\define bibtexFields() [!is[shadow]!is[system]has[bibtex-title]fields[]prefix[bibtex-]sort[]]\n\\define mainFields() bibtex-title bibtex-author bibtex-year\n\\define searchUi()\n<div class=\"tc-search\">\n<$edit-text tiddler=<<searchTid>> type=\"search\" tag=\"input\" placeholder=\"search terms\" default=\"\"/> <$select field=\"field\" tiddler=<<searchTid>> default=\"bibtex-author\">\n<$set name=allfields filter= \"[subfilter<bibtexFields>split[ ]join[,]]\" >\n<option value=<<allfields>> >all fields</option>\n</$set>\n<optgroup label=\"Main fields\">\n<$list filter=\"[enlist<mainFields>removeprefix[bibtex-]]\" variable=\"field\">\n<option value={{{[<field>addprefix[bibtex-]]}}} ><<field>></option>\n</$list>\n</optgroup>\n<optgroup label=\"Other fields\">\n<$list filter=\"[subfilter<bibtexFields>] -[enlist<mainFields>] +[removeprefix[bibtex-]]\" variable=\"field\">\n<option value={{{[<field>addprefix[bibtex-]]}}} ><<field>></option>\n</$list>\n</optgroup>\n</$select>\n\n<$reveal state=<<searchTid>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=<<searchTid>> text=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\\end"},"$:/plugins/kookma/refnotes/macros/showabbrs":{"title":"$:/plugins/kookma/refnotes/macros/showabbrs","created":"20210404111656614","modified":"20211106193550015","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define showabbrs(filter:\"[<currentTiddler>]\", dtiddler:\"Glossary\", title:\"Empty\", emptyMessage:\"\")\n<$wikify name=\"indexes\" text=<<find-all-items>> > \n<$macrocall $name=\"abbr-list\" indexes=<<indexes>> dtiddler=<<__dtiddler__>> title=<<__title__>> emptyMessage=<<__emptyMessage__>> />\n</$wikify>\n\\end\n\n\\define patterndb() \\[\\[|\\]\\]\n\\define pattern() ('.*?'|\".*?\"|\\S+)\n\\define output-item(p)\n<$list filter=\"\"\"[<__p__>search-replace:g:regexp<patterndb>,[\"]]\"\"\" variable=pars>\n<$list filter=\"\"\"[<pars>trim[]!prefix[dict:]search-replace[term:],[]splitregexp<pattern>trim[]!is[blank]!prefix[dict:]first[]]\"\"\">\n<$text text=<<currentTiddler>>/>\n</$list>\n<$list filter=\"\"\"[<pars>trim[]prefix[dict:]search-replace[term:],[]splitregexp<pattern>trim[]!is[blank]!prefix[dict:]last[]]\"\"\">\n<$text text=<<currentTiddler>>/>\n</$list>\n</$list>\n\\end\n\n\\define find-all-items()\n<$list filter=<<__filter__>> >\n<$macrocall $name=\"find\" text={{!!text}} begin=\"<<abbr \" end=\">>\" output=\"output-item\"/>\n</$list>\n\\end\n\n\n\\define abbr-list(dtiddler, indexes, title:\"Empty\", emptyMessage:\"\")\n<$list filter=\"[<indexes>limit[1]]\" variable=null emptyMessage=<<__emptyMessage__>> ><!-- check to see if there is any abbreviations -->\n<$reveal tag=\"div\" type=\"nomatch\" default=\"Empty\" text=<<__title__>> >\n<h2><$text text=<<__title__>> /></h2>\n</$reveal>\n<table class=\"refnotes-table-borderless\">\n<$list filter=\"\"\"[subfilter<__indexes__>]\"\"\" variable=\"item\">\n<tr>\n<td class=\"refnotes-abbr-term\"><$text text=<<item>> /></td>\n<td>\n <$set name=\"term\" tiddler=<<__dtiddler__>> index=<<item>> emptyValue=<<term-not-found>> >\n <<term>>\n </$set>\n</td>\n</tr>\n</$list>\n</table>\n</$list>\n\\end\n\n\n\\define term-not-found()\n<span class=\"refnotes-abbr-term-not-found\">Term not found</span>\n\\end\n\n\n"},"$:/plugins/kookma/refnotes/macros/showfnotes":{"title":"$:/plugins/kookma/refnotes/macros/showfnotes","created":"20210404111935949","modified":"20210917161905937","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define showfnotes(filter:\"[<currentTiddler>]\", title:\"Empty\" class:\"fnote-list\", emptyMessage:\"\")\n<$vars leftDelimiter=\"<<fnote \">\n<$list filter=\"[subfilter<__filter__>search:text:literal<leftDelimiter>limit[1]]\" variable=null emptyMessage=<<__emptyMessage__>> ><!-- check to see if there is any footnote -->\n<$reveal tag=\"div\" type=\"nomatch\" default=\"Empty\" text=<<__title__>> >\n<h2>$title$</h2>\n</$reveal>\n<ol class=\"$class$\">\n<$list filter=<<__filter__>> >\n<$macrocall $name=\"find\" \n text={{!!text}}\n begin=\"<<fnote \"\n end=\">>\"\n output=\"output-fnote\"\n/>\n</$list>\n</ol>\n</$list>\n</$vars>\n\\end\n\n\\define output-fnote(p)\n<$vars output=$p$>\n<li><<output>></li>\n</$vars>\n\\end\n\n"},"$:/plugins/kookma/refnotes/macros/stretch-text":{"title":"$:/plugins/kookma/refnotes/macros/stretch-text","created":"20210407132815001","modified":"20210917161905943","tags":"$:/tags/Macro","type":"text/vnd.tiddlywiki","text":"\\define tTemp() xx$:/temp/refnotes/library/$(currentTiddler)$\n\n\\define stretchText(text, title:\"...\")\n<$button class=\"tc-btn-invisible\">$title$\n<$action-listops $tiddler=<<tTemp>> $field=\"text\" $subfilter=\"+[toggle[show]]\" />\n</$button> <$reveal type=\"match\" stateTitle=<<tTemp>> sateField=text text=\"show\">$text$</$reveal>\n\\end\n"},"$:/plugins/kookma/refnotes/readme":{"title":"$:/plugins/kookma/refnotes/readme","created":"20201211095732939","modified":"20211107080244453","tags":"","type":"text/vnd.tiddlywiki","text":"; Refnotes\nRefnotes is a Tiddlywiki plugin to create and manage footnotes, abbreviations, citations, and references. Refnotes can create bibliography, but for the best performance, and to use import bibtex entries, the use of the official ''bibtex importer'' plugin is required.\n\n;Code and demo\nFor learning Refnotes features, syntax, tutorial and examples see the plugin demo and code pages\n\n* Demo: https://kookma.github.io/TW-Refnotes/\n* Code: https://github.com/kookma/TW-Refnotes\n"},"$:/plugins/kookma/refnotes/styles/abbr":{"title":"$:/plugins/kookma/refnotes/styles/abbr","text":"/* Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3 */ \n.refnotes-abbr abbr[title] {\n\tcolor: inherit;\n\tfont-style: normal;\n\ttext-decoration: none;\n\tborder-bottom: 1px dotted #aaa;\n\tcursor: help;\n}\n\n.refnotes-abbr-term-not-found{\n/*\tcolor:red;*/\n\tfont-style: oblique;\n}\n\n.refnotes-abbr-term{\n/*\tcolor:blue;*/\n}\n\n\n/* Ref:https://aarontgrogg.com/lab/\nShow the title for small screen\n*/ \n/* this works based on the max-width*/\n@media only screen and (max-width: 960px) {\n.refnotes-abbr abbr:hover:after { content: ' ('attr(title)')'; }\n}\n\n@media (hover: none) {\n/* Push the title attribute into generated content after the abbr. */\n.refnotes-abbr abbr[title]::after { \n content: ' ('attr(title)')'; }\n}\n","created":"20181022085407237","modified":"20210917161905961","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/bibtex-details":{"title":"$:/plugins/kookma/refnotes/styles/bibtex-details","text":".refnotes-details > summary{\n\tpadding-left:0;\n\tpadding-top:15px;\n\tpadding-bottom:15px;\n\twidth: 160px;\n\tcursor: pointer;\n\tfont-weight:bold;\n}\n\n","created":"20210405105138630","modified":"20210917161905977","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/bibtex-entryview":{"title":"$:/plugins/kookma/refnotes/styles/bibtex-entryview","text":"/* used for viewtemplate displaying the bibtex entry */\n.refnotes-bibtex-field{\n\tdisplay:table-row\n}\n.refnotes-bibtex-field span{\n\tdisplay:table-cell\n}\n.refnotes-bibtex-field span:first-of-type{\n\tfont-weight:bold;\n\tpadding-right:10px;\n\twhite-space: nowrap;\n}","created":"20210403171918460","modified":"20210917161905986","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/bibtex":{"title":"$:/plugins/kookma/refnotes/styles/bibtex","created":"20181220161713706","modified":"20210917161905970","tags":"$:/tags/Stylesheet","type":"text/vnd.tiddlywiki","text":".ref-nonumber{\n/* color:blue;*/\n font-size:90%;\n list-style-type:none;\n}\n\n.ref-nonumber li{\n padding-bottom:8px;\n}\n\n.ref-list{\n/* color:blue;*/\n font-size:90%;\n}\n\n.link-refcls{\n font-weight:400;\n/* color:#00008B;*/ /*darkblue*/\n text-decoration:none;\n color: <<colour tiddler-link-foreground>>; \t\n}\n\n.refcls{\n/* color:#00008B;*/\n color: <<colour tiddler-link-foreground>>; \n/* text-transform: capitalize;*/\n}\n\n.ref-notfound{\n/* color: #856404 !important;*/\n/* background-color: #fff3cd !important;*/\n}\n\n.ref-author{\n/* color:#00008B;*/ /*color for author in tooltip*/\n}"},"$:/plugins/kookma/refnotes/styles/dropzone":{"title":"$:/plugins/kookma/refnotes/styles/dropzone","text":".bibtex-dropzone{\n\tmin-height:30px;\n\tmax-width:100%;\n\tmargin:4px auto;\n\tborder:2px dotted green;\n\ttext-align:center;\n}\n\n.bibtex-dropzone:focus {\n\tbackground: #fffedd;\n}","created":"20210813153817949","modified":"20210917161905993","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/footnote-counter":{"title":"$:/plugins/kookma/refnotes/styles/footnote-counter","text":"/*automatic counter for fnote macro. The counter resets at the begining of each tiddler*/\n.tc-tiddler-frame {\n counter-reset: fnote-count;\n}\n.refnotes-footnote {\n counter-increment: fnote-count;\n}\n.refnotes-footnote:after {\n content: counter(fnote-count);\n font-size:small;\n /* color:#0000ee;*/\n vertical-align: super;\n line-height: 1.5;\n margin-left: -0.1em;\n}\n","created":"20181214085707714","modified":"20210917161906001","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/library":{"title":"$:/plugins/kookma/refnotes/styles/library","text":"/* in folding-editor*/\n.refnotes-library button svg{\n\tfont-size:0.8em;\n\tvertical-align: middle;\n\tmargin-right:0;\n\tmargin-left:0;\n\n}\n\n","created":"20210407142636629","modified":"20210917161906006","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/showfnotes":{"title":"$:/plugins/kookma/refnotes/styles/showfnotes","text":"/* Footnote class*/\n\n.fnote-list{\n/* color:blue;*/\n font-size:90%;\n}\n\n.fnote-pretty{\n display: block;\n margin: 0.5em;\n margin-right: auto;\n width: 100% !important;\n border-collapse: collapse;\n padding: 15px 15px 15px 25px; /*left padding=25px*/\n border-width: 0px;\n border-style: solid;\n border-left-width: 1px;\n background-color: rgb(255,248,220);\n color: rgb(91,49,7);\n line-height: 1.2em; \n font-size:0.9em;\n}\n","created":"20181219144814573","modified":"20210917161906014","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/table-borderless":{"title":"$:/plugins/kookma/refnotes/styles/table-borderless","text":"/*Borderless table*/\n.refnotes-table-borderless, \n.refnotes-table-borderless th, \n.refnotes-table-borderless tr, \n.refnotes-table-borderless td{\n border:0;\n}","created":"20190320094538299","modified":"20210917161906022","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/styles/tooltip":{"title":"$:/plugins/kookma/refnotes/styles/tooltip","text":"/* tooltip class used for ref, fnote and other macros */\n.refnotes-tooltip {\n\tposition: relative;\n\tdisplay: inline-block;\n\tcursor: pointer; \n}\n\n.refnotes-tooltip .refnotes-tooltiptext{\n\tfont-size: 0.90em; /* change if it is too small */\n}\n\n.refnotes-tooltip .refnotes-tooltiptext {\n\tvisibility: hidden;\n\tbackground-color: #fff;\n\tcolor: #222222; \n\ttext-align: left;\n\tborder-radius: 2px;\n\tpadding: 5px 10px;\n\tmax-width: 30vw;\n\tmax-height:20em;\n\toverflow-y: auto;\n\tcursor: auto;\n\twidth: max-content;\n\twidth: -moz-max-content;\n\twidth: -webkit-max-content;\n\twidth: -o-max-content;\n\n\t/* Position the tooltip */\n\tposition: absolute;\n\tz-index: 1;\n\tbottom: 100%;\n\tleft: 50%;\n\tmargin-left: -40px;\n\tbox-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19);\n}\n\n.refnotes-tooltip:hover .refnotes-tooltiptext {\n\tvisibility: visible;\n\t/*opacity: 0.9;*/\n}\n\n/* for small screens */\n\n@media screen and (max-width: 960px) {\n.refnotes-tooltip .refnotes-tooltiptext {\n /* Position the tooltip */\n \tposition:fixed;\n top:0;\n left: 0;\n margin-left: 0px;\n bottom: unset;\n width:100%;\n max-width: 100vw;\n z-index: 9999;\n} \n\n.refnotes-tooltip:hover .refnotes-tooltiptext {\n opacity: 1;\n} \n \n}","created":"20181215201115750","modified":"20210917161906027","tags":"$:/tags/Stylesheet","type":"text/css"},"$:/plugins/kookma/refnotes/templates/reflist/article":{"title":"$:/plugins/kookma/refnotes/templates/reflist/article","created":"20210406035737424","list":"article","modified":"20210918154925145","tags":"$:/tags/Refnotes/ReflistTemplate","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=title emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><<show-authors-in-references>>. (<$view field=\"bibtex-year\"/>). <$text text={{{ [{!!bibtex-title}lowercase[]sentencecase[]] }}} />. <span style=\"font-style:italic\"><$view field=\"bibtex-journal\"/></span>. <$view field=\"bibtex-volume\"/>. <$view field=\"bibtex-pages\"/>. <a href={{{[<currentTiddler>get[bibtex-doi]]}}}><$view field=\"bibtex-doi\"/></a></li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b><$text text=<<reference>>/></b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>\n\n<!-- APA 7 \nAuthor. (Year). Title [Translated Title] [Type of Article] [Reviewed Item]|. Journal|, Volume|(Issue)|, Pages|, Article Article Number|.| `https://doi.org/`DOI (Reprint Edition) (Original Publication) (Errata)\n-->"},"$:/plugins/kookma/refnotes/templates/reflist/book":{"title":"$:/plugins/kookma/refnotes/templates/reflist/book","created":"20210406035831544","list":"book incollection","modified":"20210918173607385","tags":"$:/tags/Refnotes/ReflistTemplate","type":"text/vnd.tiddlywiki","text":"\\define disp-bibtex-edition()\n<$list filter=\"[<currentTiddler>has[bibtex-edition]]\" variable=null>(<$view field=\"bibtex-edition\"/>).</$list>\n\\end\n\n\n<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=title emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><<show-authors-in-references>>. (<$view field=\"bibtex-year\"/>). <span style=\"font-style:italic;\"><$text text={{{ [{!!bibtex-title}lowercase[]sentencecase[]] }}} /></span>. <<disp-bibtex-edition>> <$view field=\"bibtex-publisher\"/>.</li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b><$text text=<<reference>>/></b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>\n\n<!--\nAuthor. (Year). Title [Translated Title] (|Translator, Trans.;| Editor, Ed.^Eds.| Edition ed.,| Vol. Volume|)| [Type of Work]|. Publisher|. `https://doi.org/`DOI (Original Publication)\n-->"},"$:/plugins/kookma/refnotes/templates/reflist/default":{"title":"$:/plugins/kookma/refnotes/templates/reflist/default","created":"20210406035344521","modified":"20210918173547862","tags":"$:/tags/Refnotes/ReflistTemplate","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=\"title\" emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><<show-authors-in-references>>. (<$view field=\"bibtex-year\"/>). <$text text={{{ [{!!bibtex-title}lowercase[]sentencecase[]] }}} />.</li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b><$text text=<<reference>>/></b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>"},"$:/plugins/kookma/refnotes/templates/reflist/inproceedings":{"title":"$:/plugins/kookma/refnotes/templates/reflist/inproceedings","created":"20210411092205967","list":"inproceedings","modified":"20210918173627363","tags":"$:/tags/Refnotes/ReflistTemplate","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=title emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><<show-authors-in-references>>. (<$view field=\"bibtex-year\"/>). <$text text={{{ [{!!bibtex-title}lowercase[]sentencecase[]] }}} />. In <span style=\"font-style:italic\"><$view field=\"bibtex-booktitle\"/></span>. pp. <$view field=\"bibtex-pages\"/>. <a href={{{[<currentTiddler>get[bibtex-doi]]}}}><$view field=\"bibtex-doi\"/></a></li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b><$text text=<<reference>>/></b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>\n\n<!-- APA 7\nAuthor, A. A. (Date). Title of paper. In A. Editor & B. Editor (Eds.), Title of proceedings (page numbers). Publisher. DOI OR URL if relevant.\n-->"},"$:/plugins/kookma/refnotes/templates/reflist/numbered/article":{"title":"$:/plugins/kookma/refnotes/templates/reflist/numbered/article","created":"20210407034252960","list":"article","modified":"20210917161906073","tags":"","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=title emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><$view field=\"bibtex-author\"/>, <i><span style=\"text-transform: capitalize;\"><$view field=\"bibtex-title\"/></span></i>, <$view field=\"bibtex-journal\"/>, <$view field=\"bibtex-year\"/>.</li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b>$p$</b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>"},"$:/plugins/kookma/refnotes/templates/reflist/numbered/book":{"title":"$:/plugins/kookma/refnotes/templates/reflist/numbered/book","created":"20210407034324705","list":"book","modified":"20210918164607908","tags":"","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=title emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><<show-authors-in-references>>, <span style=\"text-transform: capitalize;font-style:italic;\"><$view field=\"bibtex-title\"/></span>, <$view field=\"bibtex-edition\"/>, <$view field=\"bibtex-year\"/>, <$view field=\"bibtex-address\"/>, <$view field=\"bibtex-publisher\"/>.</li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b>$p$</b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>"},"$:/plugins/kookma/refnotes/templates/reflist/numbered/default":{"title":"$:/plugins/kookma/refnotes/templates/reflist/numbered/default","created":"20210407034401566","modified":"20210917161906089","tags":"","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=\"title\" emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><$view field=\"bibtex-author\"/>, <span style=\"text-transform: capitalize;\"><$view field=\"bibtex-title\"/></span>,<i><$view field=\"bibtex-journal\"/></i>, <$view field=\"bibtex-year\"/>.</li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b>$p$</b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>"},"$:/plugins/kookma/refnotes/templates/reflist/numbered/website":{"title":"$:/plugins/kookma/refnotes/templates/reflist/numbered/website","created":"20210407034338287","list":"website","modified":"20210917161906093","tags":"","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=\"curtid\" tiddler=<<bibtexEntryTiddler>> field=\"title\" emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<curtid>> >\n<li><span style=\"text-transform: capitalize;\"><$view field=\"bibtex-title\" tiddler=<<curtid>>/></span>, <a href={{{[<curtid>get[bibtex-url]]}}} target=\"_blank\"><$text text={{{ [<curtid>get[bibtex-url]] }}}/></a>, <$view field=\"bibtex-year\" tiddler=<<curtid>>/>.</li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<curtid>> >\n<li>Reference <b>$p$</b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>"},"$:/plugins/kookma/refnotes/templates/reflist/website":{"title":"$:/plugins/kookma/refnotes/templates/reflist/website","created":"20210406040657728","list":"website","modified":"20210917161906098","tags":"$:/tags/Refnotes/ReflistTemplate","type":"text/vnd.tiddlywiki","text":"<$wikify name=bibtexEntryTiddler text=<<reference>> >\n<$set name=currentTiddler tiddler=<<bibtexEntryTiddler>> field=\"title\" emptyValue=\"RefNotFound\">\n<$reveal type=\"nomatch\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li><$text text={{{ [{!!bibtex-title}lowercase[]sentencecase[]] }}} />. (<$view field=\"bibtex-year\"/>). <a href={{!!bibtex-url}} target=\"_blank\"><$text text={{!!bibtex-url}} /></a>.</li>\n</$reveal>\n<$reveal type=\"match\" default=\"RefNotFound\" text=<<currentTiddler>> >\n<li>Reference <b><$text text=<<reference>>/></b> NOT FOUND. Check your input.</li>\n</$reveal>\n</$set></$wikify>"},"$:/plugins/kookma/refnotes/ui/bibtexlibrary":{"title":"$:/plugins/kookma/refnotes/ui/bibtexlibrary","caption":"Bibliography","created":"20181220153648454","description":"This code adds the `bibtex-entry` tag to all tiddlers imported by `BibTeX Importer` plugin thus having a `bibtex-title` field.","modified":"20210917161906108","tags":"$:/tags/SideBar","type":"text/vnd.tiddlywiki","text":"\\define dispEntry()\n<$link/>\n<$macrocall $name=stretchText text=\"\"\"\n<$view field=\"bibtex-author\"/>. (<$view field=\"bibtex-year\"/>). <$view field=\"bibtex-title\"/>.\"\"\" />\n\\end\n\n\n\\define searchFilter() [has[bibtex-title]search:$(sField)$[$(sTerm)$]]\n\n\\define bibLibrary()\n<$vars sField={{{[<searchTid>get[field]] ~[[bibtex-author]]}}} sTerm={{{[<searchTid>get[text]]}}}>\n\n<!-- show hide entry details -->\n<div class=\"tc-search refnotes-library\" style=\"margin:10px 0 0 20px;\">\nShow and Hide Details: \n<$button class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}}\n<$list filter=\"[subfilter<searchFilter>]\">\n<$action-setfield $tiddler=<<tTemp>> text=show />\n</$list>\n</$button>\n<$button class=\"tc-btn-invisible\">{{$:/core/images/up-arrow}}\n<$list filter=\"[subfilter<searchFilter>]\">\n<$action-deletetiddler $tiddler=<<tTemp>> />\n</$list>\n</$button>\n</div>\n\n<!-- show the library data -->\n<ol>\n<$list filter=\"[subfilter<searchFilter>]\">\n<li><<dispEntry>></li>\n</$list>\n</ol>\n</$vars>\n\\end\n\n<!-- interface -->\n<div style=\"margin-bottom:8px;\">\n<<process-entries \"Process New Entries\">>\n{{$:/plugins/kookma/refnotes/ui/dropzone}}\n</div>\n\n<!-- make this optional\n[[Bibliography Table]]\n-->\n\n<<searchUi>>\n\n<<bibLibrary>>\n\n\n\n"},"$:/plugins/kookma/refnotes/ui/dropzone":{"title":"$:/plugins/kookma/refnotes/ui/dropzone","caption":"Dropzone","created":"20210813153727310","modified":"20210917161906113","tags":"","type":"text/vnd.tiddlywiki","text":"<$dropzone \n deserializer=\"application/x-bibtex\"\n filesOnly=no \n\timportTitle=\"Import Bibtex\">\n<div class=\"bibtex-dropzone\" tabindex=1>\nPaste your Bibtex Entry here\n</div>\n</$dropzone>"},"$:/plugins/kookma/refnotes/viewtemplates/article":{"title":"$:/plugins/kookma/refnotes/viewtemplates/article","created":"20210403164845276","list":"article","modified":"20210917161906128","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-author bibtex-journal bibtex-year bibtex-pages bibtex-number bibtex-volume bibtex-doi bibtex-entry-type\n\n<!-- display fields -->\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"},"$:/plugins/kookma/refnotes/viewtemplates/book":{"title":"$:/plugins/kookma/refnotes/viewtemplates/book","created":"20210403164856132","list":"book","modified":"20210917161906138","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-author bibtex-year bibtex-publisher bibtex-entry-type\n\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"},"$:/plugins/kookma/refnotes/viewtemplates/default":{"title":"$:/plugins/kookma/refnotes/viewtemplates/default","created":"20210403165027581","modified":"20210917161906146","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-author bibtex-year bibtex-doi bibtex-entry-type\n\n<!-- display fields -->\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"},"$:/plugins/kookma/refnotes/viewtemplates/helper":{"title":"$:/plugins/kookma/refnotes/viewtemplates/helper","created":"20210405112132790","modified":"20210917161906155","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define display-bibtex-field()\n<div class=\"refnotes-bibtex-field\">\n<span><$text text={{{ [<currentField>removeprefix[bibtex-]titlecase[]] }}} /></span>\n<span><$transclude tiddler=<<currentTiddler>> field=<<currentField>> mode=inline /></span>\n</div>\n\\end\n\n<!-- display main bibtex fields -->\n<$list filter=\"[enlist<mainFields>]\" variable=currentField>\n<<display-bibtex-field>>\n</$list>\n\n<!-- display other bibtex fields -->\n<details class=\"refnotes-details\">\n <summary>More details</summary>\n<$list filter=\"[<currentTiddler>fields[]prefix[bibtex]sort[]] -[enlist<mainFields>]\" variable=currentField>\n<<display-bibtex-field>>\n</$list>\n</details>"},"$:/plugins/kookma/refnotes/viewtemplates/incollection":{"title":"$:/plugins/kookma/refnotes/viewtemplates/incollection","created":"20210411044534237","list":"incollection","modified":"20210917161906165","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-author bibtex-year bibtex-booktitle bibtex-editor bibtex-publisher bibtex-entry-type\n\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"},"$:/plugins/kookma/refnotes/viewtemplates/inproceedings":{"title":"$:/plugins/kookma/refnotes/viewtemplates/inproceedings","created":"20210411094926217","list":"inproceedings","modified":"20210917161906174","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-author bibtex-year bibtex-booktitle bibtex-editor bibtex-doi bibtex-entry-type\n\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"},"$:/plugins/kookma/refnotes/viewtemplates/main":{"title":"$:/plugins/kookma/refnotes/viewtemplates/main","created":"20181220142502642","modified":"20210917161906181","tags":"$:/tags/ViewTemplate","type":"text/vnd.tiddlywiki","text":"<$list filter=\"[all[current]has[bibtex-title]]\">\n<$vars currentType={{{[<currentTiddler>get[bibtex-entry-type]lowercase[]] ~[[miscellaneous]]}}} >\n<$set name=\"bodyLookup\" \n filter=\"[all[tiddlers+shadows]tag[$:/tags/Refnotes/Template]contains:list<currentType>] +[limit[1]get[title]]\"\n\t\t\tvalue=<<bodyLookup>> \n emptyValue=\"$:/plugins/kookma/refnotes/viewtemplates/default\">\n<$transclude tiddler=<<bodyLookup>> field=\"text\" mode=\"inline\"/>\n</$set>\n</$vars>\n</$list>"},"$:/plugins/kookma/refnotes/viewtemplates/thesis":{"title":"$:/plugins/kookma/refnotes/viewtemplates/thesis","created":"20210410200742891","list":"phdthesis mastersthesis thesis","modified":"20210917161906189","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-author bibtex-year bibtex-school bibtex-entry-type\n\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"},"$:/plugins/kookma/refnotes/viewtemplates/unpublished":{"title":"$:/plugins/kookma/refnotes/viewtemplates/unpublished","created":"20210411041928587","list":"unpublished","modified":"20210917161906197","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-author bibtex-year bibtex-note bibtex-entry-type\n\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"},"$:/plugins/kookma/refnotes/viewtemplates/website":{"title":"$:/plugins/kookma/refnotes/viewtemplates/website","created":"20210403164529700","list":"website","modified":"20210917161906202","tags":"$:/tags/Refnotes/Template","type":"text/vnd.tiddlywiki","text":"\\define mainFields() bibtex-title bibtex-url bibtex-year bibtex-entry-type\n\n<!-- display fields -->\n<$transclude tiddler=\"$:/plugins/kookma/refnotes/viewtemplates/helper\"/>"}}}
{
"tiddlers": {
"$:/plugins/telmiger/details/details.css": {
"text": "/* details and summary */\n\ndetails {\n transition: height 1s ease;\n padding: 0 0.5em 0 0.66em;\n margin-top: 0.66em;\n margin-bottom: 0.66em;\n}\n\ndetails + details {\n margin-top: -0.46em;\n}\n\ndetails[open] {\n padding-bottom: 1em;\n}\n\ndetails:not([open]) { \n cursor: pointer;\n}\n\ndetails > summary {\n display: list-item;\n margin: 0 -0.5em 0 -0.66em;\n padding: 0.2em 0.5em 0.2em 0.66em;\n padding-left: 1.76em; /* adjust for indentation */\n text-indent: -1.1em;\n cursor: pointer;\n}\n\ndetails[open] > summary {\n margin-bottom: 1em;\n}\n\ndetails[open] > *:first-child:not(summary) {\n margin-top: 1em;\n}\n",
"title": "$:/plugins/telmiger/details/details.css",
"tags": "$:/tags/Stylesheet",
"modifier": "Thomas Elmiger",
"modified": "20180929131615369",
"creator": "Thomas Elmiger",
"created": "20170122140815442"
},
"$:/plugins/telmiger/details/details.js": {
"text": "/*\\\ntitle: $:/plugins/telmiger/details/details.js\ntype: application/javascript\nmodule-type: widget\n\nDetails widget v 0.8\n\nWill output an HTML 5 <details> section including a <summary>\n\n```\n\t<details>\n\t\t<summary>This sums it up</summary> \n\t\tAll the details follow here.\n\t</details>\n```\n\n|Parameter |Description |h\n|summary |Optional text to display as summary. Wins over field (see below). |\n|open |Optional initial state, set to \"open\" to show details on load. Defaults to \"\". |\n|state |An optional TextReference containing the state. Wins over open. |\n|field |Optionally, the summary is taken from the field with this name in a given tiddler. Defaults to \"title\". |\n|tiddler |Optional title of a tiddler to watch, connected to field. Defaults to current tiddler. |\n|class |Optional CSS classes to be assigned to the details tag. |\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DetailsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDetailsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDetailsWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute attributes\n\tthis.computeAttributes();\n\t// Execute logic\n\tthis.execute();\n\t// Create elements\n\tthis.detailsDomNode = this.document.createElement(\"details\");\n\tif(this.detailsClass !== \"\") {\n\t\t// this.detailsClass += \" \";\n\t\t// this.detailsClass += \"tc-details\";\n\t\tthis.detailsDomNode.setAttribute(\"class\",this.detailsClass);\n\t}\n\tif(this.detailsOpen == \"open\") {\n\t\tthis.detailsDomNode.setAttribute(\"open\",\"open\");\n\t}\n\tif(this.detailsSummary !== \"\") {\n\t\tthis.summaryDomNode = this.document.createElement(\"summary\");\n\t\t// this.summaryDomNode.setAttribute(\"class\",\"tc-summary\");\n\t\tthis.detailsDomNode.appendChild(this.summaryDomNode);\n\t\tthis.summaryDomNode.appendChild(this.document.createTextNode(this.detailsSummary));\n\t}\n// register an event listener\n/* Maybe this can be reactivated later, see below.\n\tif(this.detailsStateTitle) {\n\t\t$tw.utils.addEventListeners(this.detailsDomNode,[\n\t\t\t{name: \"toggle\", handlerObject: this, handlerMethod: \"handleToggleEvent\"},\n\t\t]);\n\t}\n*/\n// As iOS mobile browsers lack support of toggle events on details \n// we emulate the toggle event using click\n\tif(this.detailsStateTitle && this.summaryDomNode) {\n\t\t$tw.utils.addEventListeners(this.summaryDomNode,[\n\t\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleToggleEvent\"},\n\t\t]);\n\t} else {\n\t\tif(this.detailsStateTitle) {\n\t\t\t$tw.utils.addEventListeners(this.detailsDomNode,[\n\t\t\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleToggleEvent\"},\n\t\t\t]);\n\t\t}\n\t}\n\t// Insert the details into the DOM and render any children\n\tthis.parentDomNode.insertBefore(this.detailsDomNode,nextSibling);\n\tthis.renderChildren(this.detailsDomNode,null);\n\tthis.domNodes.push(this.detailsDomNode);\n};\n\n/*\nRetrieve the value of the summary\n*/\nDetailsWidget.prototype.getSummary = function() {\n\tvar summary = \"\";\n\tif(this.summaryTitle === \"Tiddler not found\" && this.summaryField === \"\") {\n\t// nothing defined: leave empty \n\t\tsummary = \"\";\n\t} else {\n\t\t// tiddler defined? use defined field or title\n\t\tif(this.myTiddler) {\n\t\t\tif(this.summaryField === \"title\" || this.summaryField === \"\") {\n\t\t\t\tsummary = this.summaryTitle;\n\t\t\t} else {\n\t\t\t\tif(this.summaryField === \"text\") {\n \t\t// getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\t\tsummary = this.wiki.getTiddlerText(this.summaryTitle);\n\t\t\t\t} else {\n\t\t\t\t\tsummary = this.myTiddler.fields[this.summaryField];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.summaryField !== \"\" && this.summaryField !== \"text\") {\n\t\t\t\t// try defined field in current tiddler\n\t\t\t\tvar tiddler = this.wiki.getTiddler(this.getVariable(\"currentTiddler\"));\n\t\t\t\tsummary = tiddler.fields[this.summaryField];\n\t\t\t} else {\n\t\t\t\tsummary = \"\";\n\t\t\t}\n\t\t}\n\t}\n return summary;\n};\n\n/*\nRetrieve the value of the state text reference\n*/\nDetailsWidget.prototype.getStateFromReference = function() {\n var state = this.detailsStateTitle ? this.wiki.getTextReference(this.detailsStateTitle,\"\",this.getVariable(\"currentTiddler\")) : \"\";\n return state;\n};\n\n/*\nCheck all open signals, state fields/tiddlers get priority\n*/\nDetailsWidget.prototype.getOpenState = function() {\n\tvar result = \"\";\n\tif((this.detailsOpenDefault !== \"\" && this.detailsOpenDefault !== \"no\") \n\t || this.detailsState === \"open\") {\n\t\tresult = \"open\";\n\t } \n\tif(this.detailsStateTitle !==\"\" && this.detailsState !== \"open\") {\n\t\tresult = \"\";\n\t}\n\treturn result;\n};\n\n/*\nUpdate the state text reference after click event\n*/\nDetailsWidget.prototype.updateState = function(openState) {\n\tvar fieldValue = \"false\";\n\tvar currentTiddler = this.getVariable(\"currentTiddler\");\n // get the title for the (existing/new) tiddler\n\tvar tr = $tw.utils.parseTextReference(this.detailsStateTitle);\n\tvar tidTitle = tr.title || currentTiddler;\n // is it an existing state tiddler?\n\tvar isStateTiddler = (tr.title === this.detailsStateTitle);\n\tvar hasStateTiddler = this.wiki.tiddlerExists(tr.title);\n\tvar currentStateTiddler = (tr.title === currentTiddler);\n\tif(isStateTiddler || hasStateTiddler || (currentStateTiddler && tr.field !== \"text\")) { \n\t\t// Set the state field (but never overwrite the current tiddler’s text field\n\t\tthis.wiki.setText(tidTitle,tr.field,tr.index,openState);\n\t} else {\n\t\tif(!hasStateTiddler && tidTitle !== currentTiddler) {\n\t\t\tthis.createTiddler(tidTitle);\n\t\t\tthis.wiki.setText(tidTitle,tr.field,tr.index,openState);\n\t\t} else {\n\t\t\tconsole.log (\"Something went wrong in updateState\");\n\t\t}\n\t}\n};\n\n/*\nCreate a tiddler with a title only\n*/\nDetailsWidget.prototype.createTiddler = function(tidTitle) {\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: tidTitle,\n\t\t\ttags: []\n\t\t}\n\t));\n};\n\n/*\nSet openState according to click\n*/\nDetailsWidget.prototype.handleToggleEvent = function(event) {\n\t// check if an open attribute is present\n\tvar newState = this.detailsDomNode.open ? \"\" : \"open\";\n\t// update only, if the node has a new state\n\tif(newState !== this.detailsState) {\n\t\tthis.updateState(newState);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDetailsWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes \n\tvar tryTiddler = this.getAttribute(\"tiddler\");\n\tthis.myTiddler = this.wiki.getTiddler(tryTiddler);\n\tthis.summaryTitle = this.myTiddler ? tryTiddler : \"Tiddler not found\";\n\tthis.summaryField = this.getAttribute(\"field\",\"\");\n\tthis.detailsSummary = this.getAttribute(\"summary\") || this.getSummary();\n\tthis.detailsStateTitle = this.getAttribute(\"state\",\"\");\n\tthis.detailsState = this.getStateFromReference();\n\tthis.detailsOpenDefault = this.getAttribute(\"open\",\"\");\n\tthis.detailsOpen = this.getOpenState();\n\tthis.detailsClass = this.getAttribute(\"class\",\"\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDetailsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.summary || changedAttributes.state || changedAttributes.open || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tvar testState = this.getStateFromReference();\n\t\tif(testState !== this.detailsState) {\n\t\t\t// state change\n\t\t\tthis.refreshSelf();\n\t\t\trefreshed = true;\n\t\t} \n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.details = DetailsWidget;\n\n})();",
"type": "application/javascript",
"title": "$:/plugins/telmiger/details/details.js",
"tags": "Plugins",
"module-type": "widget",
"modifier": "Thomas Elmiger",
"modified": "20180929212032187",
"creator": "Thomas Elmiger",
"created": "20170124173619910"
},
"$:/plugins/telmiger/details/icon": {
"created": "20170205205314072",
"text": "<svg class=\"tc-image-button telmiger-icon\" viewBox=\"0 0 128 128\" xmlns=\"http://www.w3.org/2000/svg\" fill-rule=\"evenodd\" viewBox=\"0 0 128 128\" role=\"img\" aria-labelledby=\"title\"><title id=\"title\">T</title><path class=\"circle\" d=\"M64 2C30 2 2 29.753 2 64c0 34.235 27.753 62 62 62s62-27.752 62-62C126 29.753 98.221 2 64 2z\"/><path class=\"t\" d=\"M100.41 63.254c-2.886 1.92-7.544 2.883-13.979 2.883h-8.008c-4.246 0-7.331.845-9.254 2.536-1.922 1.69-3.449 5.086-4.576 10.19 0 0-.181 1.481-.503 1.481s-.369-.877-.518-1.586a37.897 37.897 0 0 0-.721-2.754c-.631-2.137-1.262-3.753-1.894-4.847-.764-1.359-1.727-2.452-2.889-3.28-1.162-.83-2.49-1.326-3.985-1.492l-2.092-.248H41.73c-6.144 0-10.711-.962-13.7-2.884-4.976-3.159-7.649-9.129-8.02-17.91-.03-.706.003-1.351.132-2.171h.585c.399 3.975 3.679 7.048 6.086 9.219 2.408 2.172 6.269 3.258 11.581 3.258h9.313c5.347 0 9.257 1.226 11.731 3.68 2.231 2.213 3.701 5.68 4.406 10.4.076.511.03.736.178.736.149 0 .11-.256.17-.783.713-6.122 3.085-10.219 7.117-12.294 2.487-1.292 6.434-1.906 11.841-1.839l6.368.1c4.311.066 7.942-.788 10.893-2.56 2.953-1.773 6.447-5.079 6.844-9.917h.595c.183.478.16 1.576.127 2.333-.371 8.752-2.894 14.668-7.567 17.749z\"/></svg>\n<style>\n.telmiger-icon .circle { fill: #e2001a }\n.telmiger-icon .t { fill: #fff }\n</style>",
"title": "$:/plugins/telmiger/details/icon",
"tags": "",
"modified": "20171219183752113"
},
"$:/plugins/telmiger/details/license": {
"text": "!! Plugin license\n!!!The MIT License (MIT)\n\n```\nCopyright © 2017/2018 Thomas Elmiger – thomas-elmiger.ch\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```",
"title": "$:/plugins/telmiger/details/license",
"tags": "",
"modified": "20170205214435064",
"created": "20170205213335455"
},
"$:/plugins/telmiger/details/readme": {
"created": "20170205212323032",
"text": "! ~DetailsWidget\n\n{{$:/plugins/telmiger/details/about}}\n\nDocumentation can be found at http://tid.li/tw5/plugins.html#DetailsWidget\n",
"title": "$:/plugins/telmiger/details/readme",
"tags": "",
"modified": "20200603211110057"
},
"$:/plugins/telmiger/details/colours.css": {
"text": "/* details and summary colours */\n\ndetails {\n background-color: <<colour tiddler-info-tab-background>>;\n color: <<colour foreground>>;\n}\n\ndetails summary {\n background-color: <<colour dropdown-tab-background>>;\n}\n\ndetails.notification summary {\n background-color: <<colour notification-background>>;\n /* TW leaves color undefined/uses foreground */\n}\n\ndetails.warning summary {\n background-color: #ffbbaf;\n color: #000;\n}\n\ndetails.success summary {\n background-color: #88edc5;\n color: #000;\n}\n",
"title": "$:/plugins/telmiger/details/colours.css",
"tags": "$:/tags/Stylesheet",
"modifier": "Thomas Elmiger",
"modified": "20180926204140772",
"creator": "Thomas Elmiger",
"created": "20180925155320737"
},
"$:/plugins/telmiger/DetailsWidget/support": {
"created": "20200603204816640",
"text": "{{$:/plugins/telmiger/support}}",
"title": "$:/plugins/telmiger/DetailsWidget/support",
"tags": "",
"modified": "20200603204849180"
},
"$:/plugins/telmiger/support": {
"created": "20200604213259310",
"text": "!! Support the Author\n\n''Hi!'' I’m Thomas, the author of [[tid.li/tw5/plugins.html|https://tid.li/tw5/plugins.html]]. Feedback is always welcome, as well as funding for maintenance, support and new projects :)\n\n---\n\n!!! One Time Support\n\nIf using my plugins just makes you happy, consider a one time payment via ~PayPal to reward the effort:\n\nhttps://www.paypal.me/telmiger\n\n---\n\n!!! Permanent Support\n\nIf my tools make you more productive or save you time in your job or your everyday life, you can support me as a Patron: \n\nhttps://www.patreon.com/telmiger\n\n---\n\n!!! Thank You\n\nSubstantial parts of my availabe time go to the deveopment of useful plugins for [[TiddlyWiki|https://tiddlywiki.com/]]. – Many others do the same and I would like to thank them all, especially [[Jeremy Ruston|https://tiddlywiki.com/#JeremyRuston]] and all the active members of the community!\n\n//Hereby I promise to share future revenues (if any) with other developers who’s works I use or who inspired me.//\n\nIf you like my work, I would be very happy to hear from you.\n\n''Thank you very much for your support!''<br>\n//Thomas//\n\nhttps://thomas-elmiger.ch",
"title": "$:/plugins/telmiger/support",
"tags": "",
"modifier": "Thomas Elmiger",
"modified": "20200604213305050",
"creator": "Thomas Elmiger"
},
"$:/plugins/telmiger/details/about": {
"created": "20200603211101398",
"modified": "20200603211101398",
"title": "$:/plugins/telmiger/details/about",
"text": "Create HTML 5 `<details>` elements including a `<summary>` using this widget.\n\n<$details summary=\"The details element – W3C definition\">\n\n<<<\nThe [[details|http://w3c.github.io/html/interactive-elements.html#elementdef-details]] element represents a disclosure widget from which the user can obtain additional information or controls.\n<<< W3C\n\n</$details>\n\n<$details summary=\"Code example\" open=\"no\">\n\n```\n<$details summary=\"This should be open\" open=\"yes\">\n\nContent will be immediately visible if open is set to \"yes\".\n\n</$details>\n```\n\n</$details>",
"tags": ""
}
}
}
{
"tiddlers": {
"$:/plugins/telmiger/WMR/plugin-macros": {
"created": "20181124191802720",
"text": "\\define wt(wikitext:\"example\")\n<$wikify name=\"in\" text=\"\"\"$wikitext$\"\"\" type=\"text/plain\">\n<$set name=\"out\" value=\"\"\"\n\n$wikitext$\n\n\"\"\">\n<$macrocall $name=\"renderWT\" input=<<in>> output=<<out>>/>\n</$set>\n</$wikify>\n\\end\n\n\\define renderWT(input,output)\n<div class=\"wmr-input\">\n\n```\n$input$\n```\n</div>\n<div class=\"wmr-output\">$output$</div>\n\\end\n\n\\define revealstate(tiddler,stateID)\n<$set name=\"qualstate\" value=<<qualify \"$:/state/wiki-markup/$stateID$\">> >\n<$reveal type=\"nomatch\" state=<<qualstate>> text=\"visible\" animate=\"yes\">\n <$button set=<<qualstate>> setTo=\"visible\" class=\"btnClosed\">Show</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<qualstate>> text=\"visible\" animate=\"yes\">\n <$button set=<<qualstate>> setTo=\"hidden\" class=\"btnOpen\">Hide section</$button>\n<article class=\"wikitext-examples\">\n<$transclude tiddler=\"$tiddler$\" mode=\"block\"/>\n<footer>\n<$list filter=\"[{$tiddler$!!wmr-source-link}prefix[https://tiddlywiki.com]]\">\n<a href={{$tiddler$!!wmr-source-link}}>More on tiddlywiki.com</a> | </$list>\n<$link to=\"$tiddler$\">Open separately</$link>\n</footer>\n</article>\n</$reveal>\n</$set>\n\\end\n",
"title": "$:/plugins/telmiger/WMR/plugin-macros",
"tags": "$:/tags/Macro",
"modified": "20181125091902187"
},
"$:/plugins/telmiger/WMR/styles.css": {
"created": "20181124215313762",
"text": ".wikitext-examples .wmr-input {\n margin-top: 2rem;\n max-width: 28rem;\n}\n\n.wikitext-examples footer {\n background-color: #e9e9e9;\n padding: 0.25rem;\n border-bottom: 1px solid #999;\n}\n\n.wmr-output .red {\n color: red;\n fill: red;\n}\n\n\n/* Buttons */\n\n.wikitext-examples .btnClosed,\n.wikitext-examples .btnOpen {\n width: 100%;\n text-align: left;\n background: #e9e9e9;\n border: none;\n padding: 0.25rem;\n}\n\n.wikitext-examples .btnClosed:before {\n content: \"▶\";\n margin-right: 0.5rem;\n}\n\n.wikitext-examples .btnOpen:before {\n content: \"▼\";\n margin-right: 0.5rem;\n}",
"title": "$:/plugins/telmiger/WMR/styles.css",
"tags": "$:/tags/Stylesheet",
"modified": "20181125100726086"
},
"$:/plugins/telmiger/WMR/about": {
"created": "20181125122609022",
"modified": "20181125122609022",
"title": "$:/plugins/telmiger/WMR/about",
"text": "!!! About the Wikitext Markup Reference \n\nExamples are copied from or inspired by\n\n* [[Tobi Beer's Markup Reference|http://tobibeer.github.io/tb5/#Markup%20Reference]]\n** try the [[searchable version|http://tobibeer.github.io/tb5/#Markup]] too!\n\nA great idea found via [[Greg Davis' Begin plugin|http://gdplugins.tiddlyspot.com/#%24%3A%2Fplugins%2Fgdavis%2Ftwbegin]].",
"tags": ""
},
"CircleJack.svg": {
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\"><circle cx=\"128\" cy=\"128\" r=\"128\"/><path fill=\"#FFF\" d=\"M181.035 228.486c-9.88 0-14.08-.336-19.035-8.486 0 0-6.002.148-9 0-5.014-.193-6-4.928-6-8 0-8.04 3.104-16.455 3-25-.035-3.04-4.467-14.16-6-18-4.81.906-9.5 2-18 2s-19.914-2.254-31-4c-2.16 8.926-8.31 21.928-3 31 6.442 9.383 10.992 11.436 18 12s8.695 8.174 7 11c-2.125 3.375-4.883 3-9 3s-8.858-1.53-12-3c-5.25-2.932-7.973-6.625-12-11 .938 1.748-.3 4.807-2 6-3.47 2.434-13.328 2.62-17 1-5.358-2.383-19-19.477-21-32 5.325-10.074 13.074-18.03 17-29-8.556-5.46-13.674-16.99-11.993-25.143.89-4.324 1.993-6.84-3.007-9.857-22.066-10.832-18.714-46.676-11-65 6.706-15.934 22.39-23.95 31-16 7.623 7.04 7.375 13 4 13-3.376 0-5.01-6.266-8-8-8.052-4.676-16.65 6.92-20 17-4.586 13.797-8.236 47.324 14 48 4.284-.146 6.647-.51 10-2 5.48-2.434 13.572-3.895 18-4 15.02-.48 33.03 5.746 42 6 8.967.252 21.168-2.508 29-2 5.68.26 11.518 1.54 17 3 3.55-17.297 3.586-30.05 12-33 4.936.78 9.184 7.406 12 11 5.746-.23 10.574 1.387 16 3 9.824-1.395 18.324-6.707 27-11-8.79 7.18-10.004 18.2-9 29 .373 5.605-1.045 12.26-3 18-3.664 9.352-10.79 19.504-19 19-3.105-.1-5.693-2.123-8-4-.447 3.8-2.303 7.637-4 11-3.914 7.453-13.527 10.04-23 18s2.97 36.82 6 42c3.033 5.18 11.195 6.176 9 11-.71 2.1-2.812 3.486-6.965 3.486zm-109.03-23.59c2.187.862 6.98.556 8.995 1.104-3.707-3.51-8.977-8.752-13-12-1.32-3.93-1-12-1-12-1.584 3.215-3.918 6.62-5 10-1.137 3.71 5.34 11.053 10.006 12.895z\"/></svg>",
"type": "image/svg+xml",
"title": "CircleJack.svg",
"tags": "picture",
"modifier": "Thomas Elmiger",
"modified": "20170918220236294",
"creator": "Thomas Elmiger",
"created": "20170918060138058"
},
"$:/plugins/telmiger/WMR/icon": {
"created": "20181125123109958",
"text": "{{CircleJack.svg}}",
"title": "$:/plugins/telmiger/WMR/icon",
"tags": "$:/tags/Macro",
"modified": "20181125123135913"
},
"$:/plugins/telmiger/WMR/bar": {
"created": "20181129205651711",
"creator": "Thomas",
"text": "He ordered another beer.",
"title": "$:/plugins/telmiger/WMR/bar",
"tags": "Bar",
"modifier": "Thomas Elmiger",
"modified": "20181130195238270",
"caption": "Bar"
},
"$:/plugins/telmiger/WMR/code": {
"created": "20181124200421812",
"creator": "Thomas",
"text": "<<wt \"Display `code` via backticks.\">> \n\nUse double backticks ... <<wt \"``for `embedded` backticks`` in code.\">>\n\nFor longer code use a [[code block|https://tiddlywiki.com/#Code%20Blocks%20in%20WikiText]]:\n\n<div class=\"wmr-input\">\n<pre>```\nmonospaced\ncodeblock\n```</pre>\n</div>\n\n```\nmonospaced\ncodeblock\n```",
"title": "$:/plugins/telmiger/WMR/code",
"tags": "ShortReference",
"modifier": "Thomas",
"modified": "20181129172414626"
},
"$:/plugins/telmiger/WMR/filters": {
"created": "20181128065322406",
"creator": "Thomas",
"title": "$:/plugins/telmiger/WMR/filters",
"modified": "20181130200642067",
"modifier": "Thomas Elmiger",
"tags": "ShortReference",
"text": "\n!!! Display the result of a filter expression\n\nUse [[filter operators|https://tiddlywiki.com/#Filter%20Operators]] like `tag` to select tiddlers.\n\nList tiddlers tagged `Foo`:\n\n<<wt \"{{{ [tag[Foo]] }}}\n\">>\n\nList tiddlers tagged `Foo` OR `Bar`:\n\n<<wt \"{{{ [tag[Foo]][tag[Bar]] }}}\n\">>\n\nList tiddlers tagged `Foo` AND `Bar`:\n\n<<wt \"{{{ [tag[Foo]] +[tag[Bar]] }}}\n\">>\n\nList tiddlers tagged `Foo` NOT `Bar`:\n\n<<wt \"{{{ [tag[Foo]] -[tag[Bar]] }}}\n\">>\n\n---\n\n!!! Limit results\n\n<<wt \"{{{ [tag[Foo]limit[1]] }}}\n\">>\n\n---\n\n!!! Sorting\n\nSort titles:\n\n<<wt \"{{{ [tag[Foo]][tag[Bar]] +[sort[]] }}}\n\">>\n\nSort reverse:\n\n<<wt \"{{{ [tag[Foo]][tag[Bar]] +[!sort[]] }}}\n\">>\n\nSort numbers:\n\n<<wt \"{{{ [[1]][[10]][[2]][[3]] +[nsort[]] }}}\n\">>\n\nFirst created:\n\n<<wt \"{{{ [tag[Foo]][tag[Bar]] +[sort[created]] }}}\n\">>\n\nLast modified:\n\n<<wt \"{{{ [tag[Foo]][tag[Bar]] +[!sort[modified]] }}}\n\">>\n\n---\n\n!!! Special effects\n\n!!!! If empty ... aka Else ~\n\nSince TW version 5.1.18\n\n<<wt \"{{{ [tag[foo]] ~[[no foo]] }}}\n\">>\n\n!!!! Range\n\n<<wt \"{{{ [range[3,1,0.5]] }}}\n\">>\n\nSee https://tiddlywiki.com/#range%20Operator",
"wmr-source-link": "https://tiddlywiki.com/#Filter%20Expression"
},
"$:/plugins/telmiger/WMR/font-variants": {
"created": "20181124191306552",
"creator": "Thomas",
"text": "<<wt \"Normal text: We don’t serve their kind here! What? Your droids. They’ll have to wait outside. We don’t want them here. Listen, why don’t you wait out by the speeder. We don’t want any trouble. I heartily agree with you sir. Negola dewaghi wooldugger?!? He doesn’t like you. I’m sorry.\">>\n\n<<wt \"''bold'' \">>\n\n\n<<wt //italics//>>\n\n\n<<wt \"''//bold italics//'' \">>\n\n\n<<wt __underline__>>\n\n\n<<wt ~~strikethrough~~>>\n\n\n<<wt super^^script^^>>\n\n\n<<wt sub,,script,,>>\n\n\n<<wt \"! Heading 1\n\n!! Heading 2\n\n!!! Heading 3\n\n!!!! Heading 4\n\n!!!!! Heading 5\n\n!!!!!! Heading 6\n\">>",
"title": "$:/plugins/telmiger/WMR/font-variants",
"tags": "ShortReference",
"modified": "20181128063401100",
"modifier": "Thomas"
},
"$:/plugins/telmiger/WMR/foo": {
"created": "20181127222534567",
"creator": "Thomas",
"text": "A man went into a ''bar''.\n\nHe ordered a beer.",
"title": "$:/plugins/telmiger/WMR/foo",
"tags": "Foo Dummy",
"modifier": "Thomas Elmiger",
"modified": "20181130210029401",
"caption": "Foo",
"wmr-example": "54rem"
},
"$:/plugins/telmiger/WMR/foo-bar": {
"created": "20181130170447615",
"creator": "Thomas Elmiger",
"text": "Dummy text",
"title": "$:/plugins/telmiger/WMR/foo-bar",
"tags": "Bar Foo Dummy",
"modifier": "Thomas Elmiger",
"modified": "20181130193831647",
"caption": "Foo Bar"
},
"$:/plugins/telmiger/WMR/html": {
"created": "20181124205849430",
"creator": "Thomas",
"text": "<div class=\"wmr-input\">\n\n```\n<article class=\"hello\">\nHTML tags work like that.\n<!-- even comments -->\n</article>\n```\n</div>\n\n<article class=\"hello\">\nHTML tags work like that.\n<!-- even comments -->\n</article>\n\n\n<div class=\"wmr-input\">\n\n```\n<a href={{TiddlerWithURL}}>link</a>\n<b class=<<getClass>>>bold</b>\n```\n</div>\n\n<a href={{TiddlerWithURL}}>link</a>\n<b class=<<version>>>bold</b>\n\nset attributes via transclusion or macro\n\n\n<div class=\"wmr-input\">\n\n```\n<div address=\"\"\"attribute,\n\"quoted\",\nwith,\nlinebreaks.\"\"\">inspect me!</div>\n```\n</div>\n\n<div address=\"\"\"attribute,\n\"quoted\",\nwith,\nlinebreaks.\"\"\">inspect me!</div>\n\n\n<div class=\"wmr-input\">\n\n```\n* nest<div>\n\n; via\n: html\n</div>\n```\n</div>\n\n*nest <div>\n\n;via\n:html\n</div>\n",
"title": "$:/plugins/telmiger/WMR/html",
"tags": "ShortReference",
"modified": "20181128063415521",
"modifier": "Thomas"
},
"$:/plugins/telmiger/WMR/images": {
"created": "20181124203347203",
"creator": "Thomas",
"text": "!!! Internal images\n\nImages saved in the wiki:\n\n<<wt \"\"\"[img width=128 [CircleJack.svg]]\n[img width=64 [title/tooltip|CircleJack.svg]]\n[img width=32 [CircleJack.svg]]\n[img width=32 class=\"red\" [CircleJack.svg]]\n\"\"\">>\n\n\n!!! Images from the web\n\n<<wt \"\"\"[img[https://tiddlywiki.com/favicon.ico]]\n\"\"\">>\n\n\n!!! Images in separate files\n\n<<wt \"\"\"[img[path/image.jpg]]\n\"\"\">>\n\nSolutions can be found in the user group ...\n",
"title": "$:/plugins/telmiger/WMR/images",
"tags": "ShortReference",
"modified": "20181201150622535",
"wmr-source-link": "https://tiddlywiki.com/#Images%20in%20WikiText",
"modifier": "Thomas Elmiger"
},
"$:/plugins/telmiger/WMR/links": {
"created": "20181124191601375",
"creator": "Thomas",
"text": "!!! Internal Wiki Links\n\n<<wt \"[[Wikitext Markup Reference]]\n\n[[Missing Tiddler]] – italic\n\n$:/AdvancedSearch\n\n[[shadow tiddler|$:/AdvancedSearch]] – bold\n\">>\n\n\n<<wt \"CamelCaseLink\n\n~SuppressedLink\n\">>\n\n\n!!! External Links\n\n<<wt \"https://tiddlywiki.com\n\n[[web link|https://tiddlywiki.com]]\n\n~https://not.alink.com\n\">>\n\n\n!!! File Links\n\nLinks to local/external files: see [[tiddlywiki.com|https://tiddlywiki.com/#Linking%20in%20WikiText]]\n",
"wmr-source-link": "https://tiddlywiki.com/#Linking%20in%20WikiText",
"title": "$:/plugins/telmiger/WMR/links",
"tags": "ShortReference",
"modifier": "Thomas",
"modified": "20181129172442346"
},
"$:/plugins/telmiger/WMR/lists": {
"created": "20181124191350660",
"creator": "Thomas",
"text": "!! Wikitext lists\n\n!!! Unordered list\n\n<<wt \"* list item\n** list in list\n*** list in list in list\n\">>\n\n!!! Ordered list\n\n<<wt \"# list item\n#* list in list\n#** list in list in list\n# list item\n## numbered list in list\n\">>\n\n!!! [[Definition list|https://tiddlywiki.com/#Definitions%20in%20WikiText]]\n\n<<wt \"; term\n: definition of the term\n\">>\n\n---\n\n!! [[List widget|https://tiddlywiki.com/prerelease/#ListWidget]]\n\n<<wt \"\"\"<$list filter=\"[tag[Foo]sort[title]]\"/>\n\"\"\">>\n\n<<wt \"{{{ [tag[Foo]!sort[title]] }}}\"\n\"\"\">>\n\n\n!!! List format\n\n```\n<ul>\n<$list filter=\"[tag[Foo]sort[title]]\">\n<li><<currentTiddler>></li>\n</$list>\n</ul>\n```\n\n<ul>\n<$list filter=\"[tag[Foo]sort[title]]\">\n<li><<currentTiddler>></li>\n</$list>\n</ul>\n\n!!! Store list item in variable\n\nBy default, the title of the list item is stored in the Current Tiddler variable:\n\n\n```\n<$list filter=\"[tag[Bar]]\">\n<<currentTiddler>>\n{{||$:/core/ui/ViewTemplate/tags}}\n</$list>\n```\n\n<$list filter=\"[tag[Bar]]\">\n<<currentTiddler>>\n{{||$:/core/ui/ViewTemplate/tags}}\n</$list>\n\n\nWhen we store the title in our own variable, the Current Tiddler remains unchanged. In the following example, the tags of the displaying tiddler will be shown:\n\n```\n<$list filter=\"[tag[Bar]]\" variable=\"tiddler\">\n<<tiddler>>\n{{||$:/core/ui/ViewTemplate/tags}}\n</$list>\n```\n\n<$list filter=\"[tag[Bar]]\" variable=\"tiddler\">\n<<tiddler>>\n{{||$:/core/ui/ViewTemplate/tags}}\n</$list>\n\n!!! Empty message\n\n\n```\n<$list filter=\"[tag[foo]limit[1]]\" emptyMessage=\"No `foo` tagged tiddlers available.\">\n`foo` tagged tiddlers exist\n</$list>\n\n```\n\n<$list filter=\"[tag[foo]limit[1]]\" emptyMessage=\"No `foo` tagged tiddlers available.\">\n`foo` tagged tiddlers exist\n</$list>\n\n```\n<$list filter=\"[tag[Foo]limit[1]]\" emptyMessage=\"no `Foo` tagged tiddlers available\">\n`Foo` tagged tiddlers exist.\n</$list>\n```\n\n<$list filter=\"[tag[Foo]limit[1]]\" emptyMessage=\"no `Foo` tagged tiddlers available\">\n`Foo` tagged tiddlers exist.\n</$list>\n",
"title": "$:/plugins/telmiger/WMR/lists",
"tags": "ShortReference",
"modifier": "Thomas Elmiger",
"modified": "20181129231942492"
},
"$:/plugins/telmiger/WMR/macros": {
"created": "20181124210017691",
"creator": "Thomas",
"text": "<div class=\"wikitext-examples\">\n\n<div class=\"wmr-input\">\n\n```\n\\define run(foo:'bar') [[$foo$]]\n\n<<run \"foo bar\">>\n```\n</div>\n\n» defines macro `run`<br>\n» with parameter `foo`<br>\n» whose value defaults to `bar`<br>\n» outputs a link to value of param:<br>\n [[foo bar]]\n\n<div class=\"wmr-input\">\n\n```\n\\define test()\nI am $(x)$.\n\\end\n\n<$set name=\"x\" value=\"y\nof z\">\n<<test>>\n</$set>\n```\n</div>\n\n» defines macro test which<br>\n» outputs value of variable x<br><br>\n\n» sets variable x to: \"y<br>\n of z\" //(multiline allowed)//<br>\n» runs macro test which outputs:<br>\n \"I am y of z.\"\n\n<div class=\"wmr-input\">\n\n```\n\\define test(x, y, z:'0')\n$x$ $y$ $z$\n\\end\n\n<$macrocall\n$name=\"test\"\nx=<<version>>\ny={{!!title}}/>\n```\n</div>\n\n» defines macro test<br>\n» outputs 3 params<br><br>\n\n» calls test via macrocall widget<br>\n» using macro version as param x<br>\n» and transclusion as param y<br><br>\n\n» output: <<version>> {{!!title}} 0\n\n</div>",
"title": "$:/plugins/telmiger/WMR/macros",
"tags": "ShortReference",
"modified": "20181128065443126",
"modifier": "Thomas"
},
"$:/plugins/telmiger/WMR/new-lines": {
"created": "20181124200219330",
"creator": "Thomas",
"text": "<<wt \"Since\nnew paragraphs\nneed two linebreaks in TW5 ...\n\nYou can also use:\n\">>\n\n<div class=\"wmr-input\">\n\n```\n\"\"\"\ntripple quotes to \nforce hard linebreaks\nlike this.\n\"\"\"\n```\n</div>\n\n\"\"\"\ntripple quotes to \nforce hard linebreaks\nlike this.\n\"\"\"\n\n<<wt \"HTML tags: <br>\nas well as <br/> are accepted\n\">>\n\nBoth result in a `<br>` when rendered.\n",
"title": "$:/plugins/telmiger/WMR/new-lines",
"tags": "ShortReference",
"modifier": "Thomas",
"modified": "20181128063152165"
},
"$:/plugins/telmiger/WMR/quotes": {
"created": "20181129204618410",
"creator": "Thomas",
"text": "!!! [[Quotes and citations|https://tiddlywiki.com/#Block%20Quotes%20in%20WikiText]]\n\n<<wt \"<<<\nWe are the ones we have been waiting for. \n<<< Hopi wisdom\n\">>\n\n<<wt \"<<<.tc-big-quote\nWe are the ones we have been waiting for. \n<<< Hopi wisdom\n\">>\n",
"title": "$:/plugins/telmiger/WMR/quotes",
"tags": "ShortReference",
"modifier": "Thomas",
"modified": "20181129204700838"
},
"$:/plugins/telmiger/WMR/reference": {
"created": "20181125111047842",
"creator": "Thomas",
"text": "<div class=\"wikitext-examples\">\n\n!! Font Variants\n\n<<revealstate \"$:/plugins/telmiger/WMR/font-variants\" \"font-variants\">>\n\n\n!! Lists, Definitions\n\n<<revealstate \"$:/plugins/telmiger/WMR/lists\" \"lists\">>\n\n\n!! Links\n\n<<revealstate \"$:/plugins/telmiger/WMR/links\" \"links\">>\n\n\n!! Special Characters, Lines, Ruler\n\n<<revealstate \"$:/plugins/telmiger/WMR/special-chars\" \"special-chars\">>\n\n\n!! New Lines\n\n<<revealstate \"$:/plugins/telmiger/WMR/new-lines\" \"new-lines\">>\n\n\n!! Quotes\n\n<<revealstate \"$:/plugins/telmiger/WMR/quotes\" \"quotes\">>\n\n\n!! Styles\n\n<<revealstate \"$:/plugins/telmiger/WMR/styles\" \"styles\">>\n\n\n!! Images\n\n<<revealstate \"$:/plugins/telmiger/WMR/images\" \"images\">>\n\n\n!! Tables\n\n<<revealstate \"$:/plugins/telmiger/WMR/tables\" \"tables\">>\n\n\n!! Code\n\n<<revealstate \"$:/plugins/telmiger/WMR/code\" \"code\">>\n\n\n!! Plain HTML\n\n<<revealstate \"$:/plugins/telmiger/WMR/html\" \"html\">>\n\n\n!! Transclusion\n\n<<revealstate \"$:/plugins/telmiger/WMR/transclusion\" \"transclusion\">>\n\n\n!! Tabs\n\n<<revealstate \"$:/plugins/telmiger/WMR/tabs\" \"tabs\">>\n\n\n!! Special Cases\n\n<<revealstate \"$:/plugins/telmiger/WMR/special\" \"special\">>\n\n\n!! Variables\n\n<<revealstate \"$:/plugins/telmiger/WMR/variables\" \"variables\">>\n\n\n!! Macros\n\n<<revealstate \"$:/plugins/telmiger/WMR/macros\" \"macros\">>\n\n\n!! Filters\n\n<<revealstate \"$:/plugins/telmiger/WMR/filters\" \"filters\">>\n\n\n!! Templates\n\n<<revealstate \"$:/plugins/telmiger/WMR/templates\" \"templates\">>\n\n\n!! Typed Elements\n\n<<revealstate \"$:/plugins/telmiger/WMR/typed-elements\" \"typed-elements\">>\n\n</div>\n",
"title": "$:/plugins/telmiger/WMR/reference",
"tags": "ShortReference",
"modified": "20181130210006750",
"modifier": "Thomas Elmiger"
},
"$:/plugins/telmiger/WMR/special": {
"created": "20181124200507179",
"creator": "Thomas",
"text": "<div class=\"wmr-input\">\n\n```\n> block\n>> quotes\n>>> are easy\n```\n</div>\n\n> block\n>> quotes\n>>> are <br>easy\n\n\n<<wt \"# mixed\n#* lists\n#; you\n#: know\n#> like so\n\">>\n",
"title": "$:/plugins/telmiger/WMR/special",
"tags": "ShortReference",
"modified": "20181128065512504",
"modifier": "Thomas"
},
"$:/plugins/telmiger/WMR/special-chars": {
"created": "20181124191754197",
"creator": "Thomas",
"text": "<<wt \"Dashes come in two sizes---the longer is the em dash (HTML: —).\n\nThe en dash (HTML: –) is for ranges (2000--2018) and connections (London--New York) \n\">>\n\n<<wt \"---\nhorizontal rules: line with `---` only or HTML:\n<hr>\n\">>\n\n\n<<wt \"2 × 5 m = 10 m\n\næ – å – œ – ø – Æ – Å – Œ – Ø\n\">>\n\n<<wt \"* a non breaking space: entity\n* a narrow no-break space: (no entity available)\n* a en space: entity\n* a em space: entity\n* a 3-per-em space: entity\n* a 4-per-em space: entity\n* a 6-per-em space: (no entity available)\n* a figure space entity\n* a punctuation space: entity\n* a thin space: entity\n* a hair space: entity\n\">>\n\n[[More Unicode characters and HTML entities|https://www.key-shortcut.com/en/character-tables/unicode-2000-2fff/]]",
"title": "$:/plugins/telmiger/WMR/special-chars",
"tags": "ShortReference",
"modified": "20181128065614974",
"modifier": "Thomas"
},
"$:/plugins/telmiger/WMR/styles": {
"created": "20181124200539896",
"creator": "Thomas",
"text": "<<wt \"!.red CSS\n#.red classes can be\n;.red assigned\n:.red like\n>.red this\n\">>\n\n\n<<wt \"@@.myClass.red\nassign classes using double @\n@@\n\">>\n\n\n<<wt \"@@color:darkorange; apply styles directly @@\n\">>\n\n\n<<wt \"@@.red\n@@border:1px solid blue;\ncombine classes and styles \n@@\n\">>\n\n\n<<wt \"@@.purple Use style tags. @@ – Is it purple?\n\n<style>\n.purple{color:purple;}\n</style>\n\">>",
"title": "$:/plugins/telmiger/WMR/styles",
"tags": "ShortReference",
"modified": "20181128065714950",
"wmr-source-link": "https://tiddlywiki.com/#How%20to%20apply%20custom%20styles",
"modifier": "Thomas"
},
"$:/plugins/telmiger/WMR/tables": {
"created": "20181124205512397",
"creator": "Thomas",
"text": "!!! Positioning\n\n<<wt \"\"\"| highClass |k\n|!Left | !Center | !Right|\n|^NW |^ N |^ NE|\n|W | ✦ | E|\n|,SW |, S |, SE|\n\"\"\">>\n\n!!! Cells\n\n<<wt \"\"\"|!merge cells|<|<|\n| 1 | 2 | 3 |\n|to the |< left |<|\n|and|also| vertical <br>~ (up) |\n|>| right >|~|\n\n\"\"\">>\n\n!!! Header, Footer, Caption, Style\n<<wt \"\"\"|!header 1 |!header 2|\n| Footer |<|f\n| cell 1 | cell 2 |\n|This is a caption |c\n| red |k\n\"\"\">>\n\n<style>\n.highClass td {\n height: 2.75rem;\n min-width: 3.75rem; \n}\n</style>",
"title": "$:/plugins/telmiger/WMR/tables",
"tags": "ShortReference",
"modified": "20181128063215976",
"modifier": "Thomas"
},
"$:/plugins/telmiger/WMR/tabs": {
"created": "20181130193703180",
"creator": "Thomas Elmiger",
"text": "!!! Filter tiddlers for tabs\n\n<$macrocall $name=\"wt\" wikitext=\"\"\"<<tabs \"[tag[Foo]][tag[Bar]]\" default:\"$:/plugins/telmiger/WMR/foo\">>\"\"\"/>\n\n\n\n!!! Vertical tabs\n\n<$macrocall $name=\"wt\" wikitext=\"\"\"<<tabs \"[tag[Foo]][tag[Bar]]\" \"$:/plugins/telmiger/WMR/foo\" class:\"tc-vertical\">>\"\"\"/>",
"title": "$:/plugins/telmiger/WMR/tabs",
"modified": "20181130195012073",
"modifier": "Thomas Elmiger",
"tags": "ShortReference",
"wmr-source-link": "https://tiddlywiki.com/#tabs%20Macro"
},
"$:/plugins/telmiger/WMR/templates": {
"created": "20181129173332986",
"creator": "Thomas",
"text": "[[Transclude|https://tiddlywiki.com/#Transclusion%20in%20WikiText]] tiddler `.../foo` applying [[template|https://tiddlywiki.com/#TemplateTiddlers]] `.../tmpl-code`:\n\n<<wt \"{{$:/plugins/telmiger/WMR/foo||$:/plugins/telmiger/WMR/tmpl-code}}\">>\n\nUse template `Bar` for the [[Current Tiddler|https://tiddlywiki.com/#Current%20Tiddler]] (default):\n\n<div class=\"wmr-input\">\n\n```\n{{||Bar}}\n```\n</div>\n\n---\n\nA template can show different fields of a tiddler. While the list of tiddlers tagged `Foo` shows the content of the field `title` ...\n\n<<wt \"{{{ [tag[Foo]] }}}\n\">>\n\n... the same for tag `Bar` displayed through the template $:/core/ui/ViewTemplate/subtitle shows the content of the fields `modifier` and `modified`:\n\n<<wt \"{{{ [tag[Bar]]||$:/core/ui/ViewTemplate/subtitle }}}\n\">>",
"title": "$:/plugins/telmiger/WMR/templates",
"modified": "20181201142137043",
"modifier": "Thomas Elmiger",
"tags": "ShortReference",
"wmr-source-link": "https://tiddlywiki.com/#Transclusion%20with%20Templates"
},
"$:/plugins/telmiger/WMR/tmpl-code": {
"created": "20181130195051148",
"creator": "Thomas Elmiger",
"text": "<pre><code>{{!!text}}</code></pre>",
"title": "$:/plugins/telmiger/WMR/tmpl-code",
"modifier": "Thomas Elmiger",
"modified": "20181130195148774",
"caption": "Bar"
},
"$:/plugins/telmiger/WMR/transclusion": {
"created": "20181124205928499",
"creator": "Thomas",
"text": "!!! Display content from other tiddlers\n\nTransclude [[text|$:/plugins/telmiger/WMR/foo]] and [[images|$:/core/images/home-button]] from the main content (text field): \n\n<<wt \"{{$:/plugins/telmiger/WMR/foo}}\">>\n\n<<wt \"{{$:/core/images/home-button}}\">>\n\n\n!!! Content of tiddler fields\n\n<div class=\"wmr-input\">\n\n```\n{{Foo!!bar}}\n{{!!bar}}\n```\n</div>\n\n* field `bar` of tiddler `Foo`\n* field `bar` of the Current Tiddler\n\n!!! Data tiddler entries\n\n<div class=\"wmr-input\">\n\n```\n{{Foo##index}}\n{{##index}}\n```\n</div>\n\n* `index` of [[datatiddler|https://tiddlywiki.com/#DataTiddlers]] titled `Foo`\n* `index` of `CurrentTiddler`\n\n---\n\n!!! Transclude widget\n\nTry the [[transclude widget|https://tiddlywiki.com/#TranscludeWidget]] if you have to set the parsing mode manually.\n\n<<wt 'Story: <$transclude tiddler=\"$:/plugins/telmiger/WMR/foo\" mode=\"block\"/>'>>\n\n<<wt 'Story: <$transclude tiddler=\"$:/plugins/telmiger/WMR/foo\" mode=\"inline\"/>'>>",
"title": "$:/plugins/telmiger/WMR/transclusion",
"tags": "ShortReference",
"modifier": "Thomas Elmiger",
"modified": "20181130201019473",
"wmr-source-link": "http://tiddlywiki.com/#Transclusion%20in%20WikiText"
},
"$:/plugins/telmiger/WMR/typed-elements": {
"created": "20181124210140010",
"creator": "Thomas",
"text": "<div class=\"wmr-input\">\n\n```\n$$$text/unknown\nplain text, not //formatted//\n$$$\n```\n</div>\n\n$$$text/unknown\nplain text, not //formatted//\n$$$\n\n<br>\nThese are [[Typed Blocks|https://tiddlywiki.com/#Typed%20Blocks%20in%20WikiText]]\n\n<div class=\"wmr-input\">\n\n```\n$$$image/svg+xml\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke-width=\"0\" fill=\"green\" />\n</svg>\n$$$\n```\n</div>\n\n\n$$$image/svg+xml\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke-width=\"0\" fill=\"green\" />\n</svg>\n$$$\n\n<div class=\"wmr-input\">\n\n```\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"blue\" />\n</svg>\n$$$\n```\n</div>\n\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"blue\" />\n</svg>\n$$$\n\n\n<div class=\"wmr-input\">\n\n```\n$$$text/vnd.tiddlywiki>text/html\nThis is ''some'' wikitext\n$$$\n```\n</div>\n\n$$$text/vnd.tiddlywiki>text/html\nThis is ''some'' wikitext\n$$$\n\n<div class=\"wmr-input\">\n\n```\n$$$text/vnd.tiddlywiki>text/plain\nThis is ''some'' wikitext\n$$$\n```\n</div>\n\n$$$text/vnd.tiddlywiki>text/plain\nThis is ''some'' wikitext\n$$$\n",
"title": "$:/plugins/telmiger/WMR/typed-elements",
"tags": "ShortReference",
"modified": "20181201143104715",
"modifier": "Thomas Elmiger"
},
"$:/plugins/telmiger/WMR/variables": {
"created": "20181128064053957",
"creator": "Thomas",
"title": "$:/plugins/telmiger/WMR/variables",
"modified": "20181130211541726",
"modifier": "Thomas Elmiger",
"text": "\\define animal1() lion\n\\define animals1()\nseal <br>\npenguin\n\\end\n\n\n!!! Set the value of a variable\n\nTo use a local variable in a single tiddler, insert a definition at the very top of the tiddler:\n\n`\\define animal1() lion`\n\nTo use a variable in a limited part of a tiddler, use the [[set widget|https://tiddlywiki.com/#SetWidget]]: \n\n<$macrocall $name=\"wt\" wikitext=\"\"\"<$set name=\"animal2\" value=\"zebra\">\n<<animal1>> eats <<animal2>>\n</$set>\n\"\"\"/>\n\n!!! Multi-line variables\n\n```\n\\define animals1()\nseal <br>\npenguin\n\\end\n\n<<animals1>>\n```\n\n<<animals1>>\n\n<$macrocall $name=\"wt\" wikitext=\"\"\"<$set name=\"animals2\" value=\"\n* zebra\n* gnu\n* antelope\n\">\n\n<<animals2>>\n</$set>\n\"\"\"/>\n\n\n!!! Variables as parameters\n\n<$tiddler tiddler=\"$:/plugins/telmiger/WMR/foo\">\n\n<$macrocall $name=\"wt\" wikitext=\"\"\"<$set name=\"mywidth\" value={{!!wmr-example}}>\n[img width=<<mywidth>> [CircleJack.svg]]\n</$set>\n\"\"\"/>\n\n</$tiddler>\n\n!!!! Change the value\n\n<$macrocall $name=\"wt\" wikitext=\"\"\"<$edit-text tiddler=\"$:/plugins/telmiger/WMR/foo\" field=\"wmr-example\"/>\n\"\"\"/>\n\nHint: We also use the [[tiddler widget|https://tiddlywiki.com/#TiddlerWidget]] above to set $:/plugins/telmiger/WMR/foo as the current tiddler in the context of the image. This makes sure that the [[text reference|https://tiddlywiki.com/#TextReference]] `!!wmr-example` points to the right field.\n\nThe edit text widget should ''not'' be used to edit a field of the tiddler that contains it to ommit unwanted side effects. ",
"tags": "ShortReference"
}
}
}
{
"tiddlers": {
"$:/plugins/tg/ro/advanced-search-button-style": {
"created": "20150519114003182",
"text": "/* Hide advanced search button */\n.tc-image-advanced-search-button.tc-image-button {\n padding-left: 15px;\n}",
"type": "text/css",
"title": "$:/plugins/tg/ro/advanced-search-button-style",
"tags": "$:/tags/advanced-search-button",
"modifier": "TonGerner",
"modified": "20191230134649191",
"creator": "TonGerner"
},
"$:/plugins/tg/ro/change-settings": {
"created": "20161108100322449",
"text": "!!4) Settings\nTo customise the behaviour of TiddlyWiki\n\n{{$:/snippets/viewswitcher}}\n{{$:/plugins/tg/ro/sidebar-layout}}\n{{$:/core/ui/ControlPanel/Settings}}\n",
"title": "$:/plugins/tg/ro/change-settings",
"tags": "",
"modified": "20191230134715488",
"caption": "4. Settings"
},
"$:/plugins/tg/ro/help": {
"created": "20140716184603499",
"text": "!! Help\n\nBefore you 'publish' your ~TiddlyWiki:\n\n# Make a backup of your wiki\n# Get a defined start-up situation for your TW:\n#* Define your starting tiddler(s) in [[$:/DefaultTiddlers]]\n#* If required, define the state of the sidebar tabs\n#* If required create a tiddler (e.g. `xyz`) which transcludes $:/plugins/tg/ro/publish to create another option to return from readonly to edit mode\n#* If required change the keyboard shortut (Ctrl-Shift-Alt-P) for opening $:/plugins/tg/ro/publish via Control Panel > Keyboard Shortcuts\n# Follow the procedure given in tabs 1 to 5.\n\nThere are a few ways to return from readonly to edit mode:\n\n# Press the configured keyboard shortcut (default Ctrl-Shift-Alt-P), which opens $:/plugins/tg/ro/publish\n# Start the TW with `#xyz` appended which opens $:/plugins/tg/ro/publish\n# Search for:\n#* ''Publish'' to get to $:/plugins/tg/ro/publish\n#* ''~ControlPanel'' to get to ''$:/ControlPanel > Appearance > Publish''\n\n<<<\n''Note:''<br>\n@@.RED Although you can hide the 'Sidebar' and 'Advanced Search' button, they remain 'active'!@@\n<<<\n",
"title": "$:/plugins/tg/ro/help",
"modifier": "TonGerner",
"modified": "20200318122932944",
"creator": "TonGerner",
"caption": "Help"
},
"$:/plugins/tg/ro/hide-sidebar-buttons": {
"created": "20161108100124814",
"text": "!! Show/hide sidebar buttons\nUncheck to hide the appropriate sidebar button\n\n|Button |visible |note |h\n|Sidebar button (<<icn $:/core/images/chevron-left>>/<<icn $:/core/images/chevron-right>>) | <$checkbox tiddler=\"$:/core/ui/TopBar/menu\" tag=\"$:/tags/TopRightBar\"/> | 1 |\n|Advanced search button (<<icn $:/core/images/advanced-search-button>>) | <$checkbox tiddler=\"$:/plugins/tg/ro/advanced-search-button-style\" tag=\"$:/tags/Stylesheet\" invertTag=\"yes\"/> | 1 |\n|Publish button (<<icn $:/plugins/tg/ro/images/publish>>) | <$checkbox tiddler=\"$:/plugins/tg/ro/publish-button\" tag=\"$:/tags/TopRightBar\"/> | 2 |\n\n<<<\n''Note:''\n\n# Although 'invisible' (`display:none;`), ''Sidebar'' and ''Advanced search'' buttons stay active!\n# The ''Publish'' button is invisible and inactive (`$:/tags/TopRightBar` removed)\n<<<",
"title": "$:/plugins/tg/ro/hide-sidebar-buttons",
"tags": "",
"modified": "20200316123412336",
"caption": "3. Sidebar buttons"
},
"$:/plugins/tg/ro/hide-sidebar-tabs": {
"text": "\\define check()\n<$checkbox\ntag=\"$:/tags/SideBar\"\nchecked=\"$:/tags/SideBar\"\nunchecked=\"$:/tags/hide\"\ndefault=\"$:/tags/SideBar\"\ncheckactions=\"\"\"<$action-deletefield tags/><$action-setfield tags=\"$:/tags/SideBar\"/>\"\"\"\nuncheckactions=\"\"\"<$action-deletefield tags/><$action-setfield tags=\"$:/tags/hide\"/>\"\"\"\n<$link to={{!!title}}> \n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$checkbox>\n\\end\n\n!! Show/hide sidebar tabs\nUncheck to hide the appropriate sidebar tab\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]]\"><br>\n<<check>>\n</$list>\n<$list filter=\"[tag[$:/tags/hide]]\"><br>\n<<check>>\n</$list>\n",
"title": "$:/plugins/tg/ro/hide-sidebar-tabs",
"tags": "",
"modified": "20200319201054427",
"created": "20161108100017749",
"caption": "2. Sidebar tabs"
},
"$:/plugins/tg/ro/hide-toolbar-buttons": {
"created": "20161108095713019",
"text": "!! Hide toolbar buttons\n\nDisable in Control panel (Appearance > Toolbars) the buttons you do not need in read-only mode.\n\n''//Disable at least the following buttons://''\n\n* ~ViewToolbar\n** Edit button <<icn $:/core/images/edit-button>>\n** More button <<icn $:/core/images/down-arrow>>\n** Info button <<icn $:/core/images/info-button>> (Tools tab contains button configuration!)\n* Page control buttons\n** New tiddler button <<icn $:/core/images/new-button>>\n** Control panel button <<icn $:/core/images/options-button>>\n** Save button <<icn $:/core/images/save-button>>\n** More button <<icn $:/core/images/down-arrow>>\n\n{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar $:/core/ui/ControlPanel/Toolbars/PageControls\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>",
"title": "$:/plugins/tg/ro/hide-toolbar-buttons",
"tags": "",
"modified": "20200319203659025",
"caption": "1. Buttons"
},
"$:/plugins/tg/ro/icon": {
"created": "20170322100000766",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:svg=\"http://www.w3.org/2000/svg\">\n <metadata id=\"metadata7\">image/svg+xml</metadata>\n <g>\n <g stroke=\"null\" id=\"layer1\">\n <path stroke=\"#a0a0ff\" d=\"m62.98237,124.8691l-52.98313,-30.489l0,-60.97796l52.98313,-30.48897l52.98313,30.48897l0,60.97796l-52.98313,30.489z\" id=\"path4142\" stroke-miterlimit=\"4\" stroke-width=\"1.2218\" fill=\"#a0a0ff\"/>\n <g stroke=\"null\" transform=\"matrix(3.659923335400057,0,0,3.647856469142962,20.327076261330674,1218.0946222935067) \" id=\"g4657\">\n <path stroke=\"null\" d=\"m3.22135,-313.27808l4.72483,4.70973l10.79962,-10.7651l-4.72483,-4.70973l-10.79962,10.7651zm13.51982,-13.47661l-1.99364,1.98727l4.72409,4.70899l1.99364,-1.98727c0.6766,-0.67444 -0.00001,-1.34889 -0.00001,-1.34889l-3.37088,-3.3601c0,0 -0.6766,-0.67444 -1.3532,0zm-14.18411,14.11637l-0.99229,5.72125l5.7273,-1.00138l-4.735,-4.71987l-0.00001,0z\" id=\"editor_pencil_pen_edit_write_glyph\" fill=\"#000000\"/>\n <rect stroke=\"null\" stroke-width=\"null\" stroke-linejoin=\"null\" stroke-linecap=\"null\" x=\"-236.34445\" y=\"-219.86093\" width=\"26.11743\" height=\"2.10315\" id=\"svg_1\" transform=\"matrix(0.69825835,0.71584585,-0.71584585,0.69825835,11.119094,-4.6050809) \"/>\n </g>\n </g>\n </g>\n</svg>",
"type": "image/svg+xml",
"title": "$:/plugins/tg/ro/icon",
"tags": "",
"modified": "20191230134918451"
},
"$:/plugins/tg/ro/image-save-button": {
"created": "20140715185836189",
"text": "<svg class=\"tgc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <path d=\"M120.78304,34.329058 C125.424287,43.1924006 128.049406,53.2778608 128.049406,63.9764502 C128.049406,99.3226742 99.3956295,127.97645 64.0494055,127.97645 C28.7031816,127.97645 0.0494055385,99.3226742 0.0494055385,63.9764502 C0.0494055385,28.6302262 28.7031816,-0.0235498012 64.0494055,-0.0235498012 C82.8568763,-0.0235498012 99.769563,8.08898558 111.479045,21.0056358 L114.159581,18.3250998 C117.289194,15.1954866 122.356036,15.1939641 125.480231,18.3181584 C128.598068,21.4359957 128.601317,26.5107804 125.473289,29.6388083 L120.78304,34.329058 Z M108.72451,46.3875877 C110.870571,51.8341374 112.049406,57.767628 112.049406,63.9764502 C112.049406,90.4861182 90.5590735,111.97645 64.0494055,111.97645 C37.5397375,111.97645 16.0494055,90.4861182 16.0494055,63.9764502 C16.0494055,37.4667822 37.5397375,15.9764502 64.0494055,15.9764502 C78.438886,15.9764502 91.3495036,22.308215 100.147097,32.3375836 L58.9411255,73.5435552 L41.975581,56.5780107 C38.8486152,53.4510448 33.7746915,53.4551552 30.6568542,56.5729924 C27.5326599,59.6971868 27.5372202,64.7670668 30.6618725,67.8917192 L53.279253,90.5090997 C54.8435723,92.073419 56.8951519,92.8541315 58.9380216,92.8558261 C60.987971,92.8559239 63.0389578,92.0731398 64.6049211,90.5071765 L108.72451,46.3875877 Z\"></path>\n </g>\n</svg>",
"creator": "TonGerner",
"modified": "20191230134931683",
"modifier": "TonGerner",
"title": "$:/plugins/tg/ro/image-save-button"
},
"$:/plugins/tg/ro/images/publish": {
"created": "20170322105731731",
"text": "<svg class=\"tgc-publish-ro tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 486 438\">\n<style>\n .ro {\n fill:none;\n stroke-width:40;\n stroke:#FF00FF;\n }\n</style>\n <path class=\"ro\" d=\"m203.2 81.6l-141.6 0 0 311.7 313.3 0 0-139.5\"/>\n <path class=\"ro\" d=\"m176.4 279.6l0-60 188-188 60.5 60.5 -189.5 189.5 -59 0\"/>\n <path class=\"ro\" d=\"m326.9 69l61.1 61.1\"/>\n</svg>",
"title": "$:/plugins/tg/ro/images/publish",
"tags": "",
"modified": "20191230134946688"
},
"$:/plugins/tg/ro/license": {
"created": "20180124175202510",
"text": "[[Readonly plugin|http://tongerner.tiddlyspot.com/#Readonly%20plugin]] © Ton Gerner — 2018-2020\n\nMIT License: https://opensource.org/licenses/MIT\n",
"title": "$:/plugins/tg/ro/license",
"tags": "",
"modified": "20191230135005582"
},
"$:/plugins/tg/ro/publish": {
"created": "20140715185723459",
"text": "!! Readonly plugin\n<<tabs \"$:/plugins/tg/ro/help $:/plugins/tg/ro/hide-toolbar-buttons $:/plugins/tg/ro/hide-sidebar-tabs $:/plugins/tg/ro/hide-sidebar-buttons $:/plugins/tg/ro/change-settings $:/plugins/tg/ro/save\" \"Help\">>\n\n\n\n\n\n",
"title": "$:/plugins/tg/ro/publish",
"tags": "$:/tags/ControlPanel/Appearance",
"modifier": "TonGerner",
"modified": "20191230135048784",
"creator": "TonGerner",
"caption": "Publish"
},
"$:/plugins/tg/ro/publish-button": {
"created": "20170506162930803",
"text": "<$button class=\"tc-btn-invisible\" tooltip=\"Publish read-only\">\n<$action-sendmessage $message=\"tm-open-window\" $param=\"$:/plugins/tg/ro/publish\" height=\"700px\" width=\"550px\"/>\n{{$:/plugins/tg/ro/images/publish}}\n</$button>",
"title": "$:/plugins/tg/ro/publish-button",
"tags": "$:/tags/publish-button $:/tags/TopRightBar",
"modifier": "TonGerner",
"modified": "20191231184447737",
"list-before": "$:/core/ui/TopBar/menu",
"creator": "TonGerner"
},
"$:/plugins/tg/ro/readme": {
"text": "A plugin to make ~TiddlyWiki read-only.\n\nYou can hide:\n\n* ''All'' toolbar buttons\n* 'Sidebar' button (to switch Sidebar) and 'Advanced search' button (next to Search)\n* All Sidebar tabs tagged with $:/tags/SideBar.\n\nClick the Publish button <<icn $:/plugins/tg/ro/images/publish>> next to the sidebar button <<icn $:/core/images/chevron-left>>/<<icn $:/core/images/chevron-right>> to start making your TW 'publish-ready'. A new window with six tabs opens. Read the Help tab and follow the 5 steps.\n\n<<<\n''Note:''<br>@@.RED Although you can hide the 'Sidebar' button and 'Advanced Search' button, they remain 'active'!@@\n<<<\n\nThere are a few ways to return from readonly to edit mode, see [[Help|$:/plugins/tg/ro/help]].\n",
"title": "$:/plugins/tg/ro/readme",
"modifier": "TonGerner",
"modified": "20200319200627098",
"creator": "TonGerner",
"created": "20140821172500339"
},
"$:/plugins/tg/ro/save": {
"created": "20161108100434387",
"text": "! Save\n\n{{$:/core/ui/ControlPanel/Saving}}\n\n@@.BLUE ''Save''@@ {{$:/plugins/tg/ro/save-button}}\n",
"title": "$:/plugins/tg/ro/save",
"tags": "",
"modified": "20191230135228815",
"caption": "5. Save"
},
"$:/plugins/tg/ro/save-button": {
"created": "20170405200808621",
"text": "<$button message=\"tm-save-wiki\" param={{$:/config/SaveWikiButton/Template}}>\n<span class=\"tc-dirty-indicator\">\n{{$:/plugins/tg/ro/image-save-button}}\n</span>\n</$button>",
"title": "$:/plugins/tg/ro/save-button",
"tags": "",
"modifier": "TonGerner",
"modified": "20191230135303043",
"creator": "TonGerner"
},
"$:/plugins/tg/ro/sidebar-button-style": {
"created": "20140715185800387",
"text": "/* Hide sidebar button */\nsvg.tc-image-chevron-left {\n display: none;\n}\n\nsvg.tc-image-chevron-right {\n display: none;\n}\n",
"type": "text/css",
"title": "$:/plugins/tg/ro/sidebar-button-style",
"tags": "$:/tags/sidebar-button",
"modifier": "TonGerner",
"modified": "20191230135322974",
"creator": "TonGerner"
},
"$:/plugins/tg/ro/sidebar-layout": {
"created": "20170307110734575",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\nSidebar layout: <$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select>\n",
"title": "$:/plugins/tg/ro/sidebar-layout",
"tags": "",
"modified": "20191230135338759"
},
"$:/plugins/tg/ro/styles": {
"created": "20161104132710834",
"text": "/* Slider style */\n\nhtml .tgc-slider {\n color: #5778D8;\n font-weight: bold;\n}\n\n.tgc-slider:hover {\n color: #5778D8;\n text-decoration: underline;\n}\n\n.RED {\n color: red;\n font-weight: bold;\n}",
"title": "$:/plugins/tg/ro/styles",
"tags": "$:/tags/Stylesheet",
"modified": "20191230135353718",
"type": "text/css"
},
"$:/plugins/tg/ro/macros/doc": {
"created": "20200316122632179",
"text": "\\define icn(icon)\n<button class=\"tc-btn-invisible\"> {{$icon$}}</button>\n\\end",
"title": "$:/plugins/tg/ro/macros/doc",
"tags": "$:/tags/Macro",
"modified": "20200316123614203"
},
"$:/plugins/tg/ro/shortcut/publish": {
"created": "20200317164804429",
"text": "<$navigator story=\"$:/StoryList\">\n<$action-navigate $to=\"$:/plugins/tg/ro/publish\"/>\n</$navigator>",
"title": "$:/plugins/tg/ro/shortcut/publish",
"tags": "$:/tags/KeyboardShortcut",
"modified": "20200317185519894",
"key": "((publish))"
},
"$:/config/ShortcutInfo/publish": {
"created": "20200317164006337",
"text": "Open Publish window",
"title": "$:/config/ShortcutInfo/publish",
"tags": "",
"modified": "20200317164305031"
},
"$:/config/shortcuts/publish": {
"created": "20200317164439679",
"text": "ctrl-shift-alt-P",
"title": "$:/config/shortcuts/publish",
"modified": "20200318102428021"
}
}
}
{
"tiddlers": {
"$:/config/EditorTypeMappings/application/javascript": {
"title": "$:/config/EditorTypeMappings/application/javascript",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/application/json": {
"title": "$:/config/EditorTypeMappings/application/json",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/application/x-tiddler-dictionary": {
"title": "$:/config/EditorTypeMappings/application/x-tiddler-dictionary",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/css": {
"title": "$:/config/EditorTypeMappings/text/css",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/html": {
"title": "$:/config/EditorTypeMappings/text/html",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/plain": {
"title": "$:/config/EditorTypeMappings/text/plain",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/x-markdown": {
"title": "$:/config/EditorTypeMappings/text/x-markdown",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/x-tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/x-tiddlywiki",
"text": "codemirror"
},
"$:/config/codemirror/cursorBlinkRate": {
"title": "$:/config/codemirror/cursorBlinkRate",
"type": "integer",
"text": "530"
},
"$:/config/codemirror/extraKeysTW": {
"title": "$:/config/codemirror/extraKeysTW",
"extend": "extraKeys",
"type": "json",
"text": "{\n\t\"Ctrl-Esc\": \"singleSelection\",\n\t\"Esc\": \"\",\n\t\"Ctrl-S\": \"\",\n\t\"Ctrl-U\": \"\",\n\t\"Ctrl-T\": \"\",\n\t\"Alt-T\": \"transposeChars\",\n\t\"Alt-U\": \"undoSelection\",\n\t\"Shift-Alt-U\": \"redoSelection\",\n\t\"Cmd-U\": \"\",\n\t\"Tab\": \"indentAuto()\",\n\t\"Enter\": \"newLineAndIndent()\"\n}\n"
},
"$:/config/codemirror/indentUnit": {
"title": "$:/config/codemirror/indentUnit",
"type": "integer",
"text": "2"
},
"$:/config/codemirror/indentWithTabs": {
"title": "$:/config/codemirror/indentWithTabs",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/inputStyle": {
"title": "$:/config/codemirror/inputStyle",
"type": "string",
"text": "textarea"
},
"$:/config/codemirror/keyMap": {
"title": "$:/config/codemirror/keyMap",
"type": "string",
"text": "default"
},
"$:/config/codemirror/lineNumbers": {
"title": "$:/config/codemirror/lineNumbers",
"type": "bool",
"text": "false"
},
"$:/config/codemirror/lineWrapping": {
"title": "$:/config/codemirror/lineWrapping",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/showCursorWhenSelecting": {
"title": "$:/config/codemirror/showCursorWhenSelecting",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/smartIndent": {
"title": "$:/config/codemirror/smartIndent",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/styleActiveLine": {
"title": "$:/config/codemirror/styleActiveLine",
"type": "bool",
"text": "false"
},
"$:/config/codemirror/tabSize": {
"title": "$:/config/codemirror/tabSize",
"type": "integer",
"text": "2"
},
"$:/config/codemirror/theme": {
"title": "$:/config/codemirror/theme",
"type": "string",
"text": "tiddlywiki"
},
"$:/language/codemirror/homeUrl": {
"title": "$:/language/codemirror/homeUrl",
"text": "http://codemirror.net"
},
"$:/language/codemirror/addOnUrl": {
"title": "$:/language/codemirror/addOnUrl",
"text": "http://codemirror.net/doc/manual.html#addons"
},
"$:/language/codemirror/configUrl": {
"title": "$:/language/codemirror/configUrl",
"text": "http://codemirror.net/doc/manual.html#config"
},
"$:/language/codemirror/controlPanel/hint": {
"title": "$:/language/codemirror/controlPanel/hint",
"text": "These settings let you customise the behaviour of [[CodeMirror|$:/plugins/tiddlywiki/codemirror]]."
},
"$:/language/codemirror/controlPanel/keyboard": {
"title": "$:/language/codemirror/controlPanel/keyboard",
"text": "Keyboard shortcuts"
},
"$:/language/codemirror/controlPanel/usage": {
"title": "$:/language/codemirror/controlPanel/usage",
"text": "Usage information"
},
"$:/language/codemirror/cursorBlinkRate/hint": {
"title": "$:/language/codemirror/cursorBlinkRate/hint",
"text": "Cursor blink rate"
},
"$:/language/codemirror/editorFont/hint": {
"title": "$:/language/codemirror/editorFont/hint",
"text": "Editor font family"
},
"$:/language/codemirror/editorFont/info": {
"title": "$:/language/codemirror/editorFont/info",
"text": "Set the font family for the ~CodeMirror text-editor"
},
"$:/language/codemirror/indentUnit/hint": {
"title": "$:/language/codemirror/indentUnit/hint",
"text": "How many spaces a block should be indented"
},
"$:/language/codemirror/indentWithTabs/hint": {
"title": "$:/language/codemirror/indentWithTabs/hint",
"text": "Enable indenting with tabs"
},
"$:/language/codemirror/indentWithTabs/info": {
"title": "$:/language/codemirror/indentWithTabs/info",
"text": "Whether, when indenting, the first N*`tabSize` spaces should be replaced by N tabs."
},
"$:/language/codemirror/keyMap/hint": {
"title": "$:/language/codemirror/keyMap/hint",
"text": "~CodeMirror keymap"
},
"$:/language/codemirror/keyMap/info": {
"title": "$:/language/codemirror/keyMap/info",
"text": "~The Keyboard KeyMap used within the ~CodeMirror text-editor"
},
"$:/language/codemirror/lineNumbers/hint": {
"title": "$:/language/codemirror/lineNumbers/hint",
"text": "Enable line numbers"
},
"$:/language/codemirror/lineNumbers/info": {
"title": "$:/language/codemirror/lineNumbers/info",
"text": "Whether to show line numbers to the left of the editor."
},
"$:/language/codemirror/lineWrapping/hint": {
"title": "$:/language/codemirror/lineWrapping/hint",
"text": "Enable line wrapping"
},
"$:/language/codemirror/lineWrapping/info": {
"title": "$:/language/codemirror/lineWrapping/info",
"text": "Whether CodeMirror should scroll or wrap for long lines. Defaults to `false` (scroll)."
},
"$:/language/codemirror/showCursorWhenSelecting/hint": {
"title": "$:/language/codemirror/showCursorWhenSelecting/hint",
"text": "Show cursor, when selecting"
},
"$:/language/codemirror/showCursorWhenSelecting/info": {
"title": "$:/language/codemirror/showCursorWhenSelecting/info",
"text": "Whether the cursor should be drawn when a selection is active."
},
"$:/language/codemirror/smartIndent/hint": {
"title": "$:/language/codemirror/smartIndent/hint",
"text": "Enable smart indent"
},
"$:/language/codemirror/smartIndent/info": {
"title": "$:/language/codemirror/smartIndent/info",
"text": "Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before). Defaults to `true`."
},
"$:/language/codemirror/styleActiveLine/hint": {
"title": "$:/language/codemirror/styleActiveLine/hint",
"text": "Highlight active line"
},
"$:/language/codemirror/styleActiveLine/info": {
"title": "$:/language/codemirror/styleActiveLine/info",
"text": "Whether or not to highlight the active text-editor line"
},
"$:/language/codemirror/tabSize/hint": {
"title": "$:/language/codemirror/tabSize/hint",
"text": "Width of a tab character"
},
"$:/language/codemirror/theme/hint": {
"title": "$:/language/codemirror/theme/hint",
"text": "Select a theme"
},
"$:/language/codemirror/theme/info": {
"title": "$:/language/codemirror/theme/info",
"text": "Choose between ~CodeMirror themes"
},
"$:/plugins/tiddlywiki/codemirror/edit-codemirror.js": {
"title": "$:/plugins/tiddlywiki/codemirror/edit-codemirror.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/codemirror/edit-codemirror.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-codemirror widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tCodeMirrorEngine = require(\"$:/plugins/tiddlywiki/codemirror/engine.js\").CodeMirrorEngine;\n\nexports[\"edit-codemirror\"] = editTextWidgetFactory(CodeMirrorEngine,CodeMirrorEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/codemirror/engine.js": {
"title": "$:/plugins/tiddlywiki/codemirror/engine.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/codemirror/engine.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a CodeMirror instance\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CODEMIRROR_OPTIONS = \"$:/config/CodeMirror\",\nHEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\",\nCONFIG_FILTER = \"[all[shadows+tiddlers]prefix[$:/config/codemirror/]]\"\n\t\n// Install CodeMirror\nif($tw.browser && !window.CodeMirror) {\n\n\tvar modules = $tw.modules.types[\"codemirror\"];\n\tvar req = Object.getOwnPropertyNames(modules);\n\n\twindow.CodeMirror = require(\"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\");\n\t// Install required CodeMirror plugins\n\tif(req) {\n\t\tif($tw.utils.isArray(req)) {\n\t\t\tfor(var index=0; index<req.length; index++) {\n\t\t\t\trequire(req[index]);\n\t\t\t}\n\t\t} else {\n\t\t\trequire(req);\n\t\t}\n\t}\n}\n\nfunction getCmConfig() {\n\tvar type,\n\t\ttest,\n\t\tvalue,\n\t\telement,\n\t\textend,\n\t\ttiddler,\n\t\tconfig = {},\n\t\tconfigTiddlers = $tw.wiki.filterTiddlers(CONFIG_FILTER);\n\n\tif ($tw.utils.isArray(configTiddlers)) {\n\t\tfor (var i=0; i<configTiddlers.length; i++) {\n\t\t\ttiddler = $tw.wiki.getTiddler(configTiddlers[i]);\n\t\t\t\tif (tiddler) {\n\t\t\t\telement = configTiddlers[i].replace(/\\$:\\/config\\/codemirror\\//ig,\"\");\n\t\t\t\t\ttype = (tiddler.fields.type) ? tiddler.fields.type.trim().toLocaleLowerCase() : \"string\";\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase \"bool\":\n\t\t\t\t\ttest = tiddler.fields.text.trim().toLowerCase();\n\t\t\t\t\tvalue = (test === \"true\") ? true : false;\n\t\t\t\t\tconfig[element] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = tiddler.fields.text.trim();\n\t\t\t\t\tconfig[element] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"integer\":\n\t\t\t\t\tvalue = parseInt(tiddler.fields.text.trim(), 10);\n\t\t\t\t\tconfig[element] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"json\":\n\t\t\t\t\tvalue = JSON.parse(tiddler.fields.text.trim());\n\t\t\t\t\t\textend = (tiddler.fields.extend) ? tiddler.fields.extend : element;\n\n\t\t\t\t\tif (config[extend]) {\n\t\t\t\t\t\t$tw.utils.extend(config[extend], value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig[extend] = value;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn config;\n}\n\nfunction CodeMirrorEngine(options) {\n\n\t// Save our options\n\tvar self = this;\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create the wrapper DIV\n\tthis.domNode = this.widget.document.createElement(\"div\");\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tthis.domNode.style.display = \"inline-block\";\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n\t\n\t// Set all cm-plugin defaults\n\t// Get the configuration options for the CodeMirror object\n\tvar config = getCmConfig();\n\n\tconfig.mode = options.type;\n\tconfig.value = options.value;\n\tif(this.widget.editTabIndex) {\n\t\tconfig[\"tabindex\"] = this.widget.editTabIndex;\n\t}\n\t// Create the CodeMirror instance\n\tthis.cm = window.CodeMirror(function(cmDomNode) {\n\t\t// Note that this is a synchronous callback that is called before the constructor returns\n\t\tif(!self.widget.document.isTiddlyWikiFakeDom) {\n\t\t\tself.domNode.appendChild(cmDomNode);\n\t\t}\n\t},config);\n\n\t// Set up a change event handler\n\tthis.cm.on(\"change\",function() {\n\t\tself.widget.saveChanges(self.getText());\n\t\tif(self.widget.editInputActions) {\n\t\t\tself.widget.invokeActionString(self.widget.editInputActions);\n\t\t}\n\t});\n\tthis.cm.on(\"drop\",function(cm,event) {\n\t\tevent.stopPropagation(); // Otherwise TW's dropzone widget sees the drop event\n\t\treturn false;\n\t});\n\tthis.cm.on(\"keydown\",function(cm,event) {\n\t\treturn self.widget.handleKeydownEvent.call(self.widget,event);\n\t});\n\tthis.cm.on(\"focus\",function(cm,event) {\n\t\tif(self.widget.editCancelPopups) {\n\t\t\t$tw.popup.cancel(0);\t\n\t\t}\n\t});\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nCodeMirrorEngine.prototype.setText = function(text,type) {\n\tvar self = this;\n\tself.cm.setOption(\"mode\",type);\n\tif(!this.cm.hasFocus()) {\n\t\tthis.updateDomNodeText(text);\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nCodeMirrorEngine.prototype.updateDomNodeText = function(text) {\n\tthis.cm.setValue(text);\n};\n\n/*\nGet the text of the engine\n*/\nCodeMirrorEngine.prototype.getText = function() {\n\treturn this.cm.getValue();\n};\n\n/*\nFix the height of textarea to fit content\n*/\nCodeMirrorEngine.prototype.fixHeight = function() {\n\tif(this.widget.editAutoHeight) {\n\t\t// Resize to fit\n\t\tthis.cm.setSize(null,null);\n\t} else {\n\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\tthis.cm.setSize(null,fixedHeight);\n\t}\n};\n\n/*\nFocus the engine node\n*/\nCodeMirrorEngine.prototype.focus = function() {\n\tthis.cm.focus();\n}\n\n/*\nCreate a blank structure representing a text operation\n*/\nCodeMirrorEngine.prototype.createTextOperation = function() {\n\tvar selections = this.cm.listSelections();\n\tif(selections.length > 0) {\n\t\tvar anchorPos = this.cm.indexFromPos(selections[0].anchor),\n\t\theadPos = this.cm.indexFromPos(selections[0].head);\n\t}\n\tvar operation = {\n\t\ttext: this.cm.getValue(),\n\t\tselStart: Math.min(anchorPos,headPos),\n\t\tselEnd: Math.max(anchorPos,headPos),\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nCodeMirrorEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tthis.cm.replaceRange(operation.replacement,this.cm.posFromIndex(operation.cutStart),this.cm.posFromIndex(operation.cutEnd));\n\t\tthis.cm.setSelection(this.cm.posFromIndex(operation.newSelStart),this.cm.posFromIndex(operation.newSelEnd));\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t}\n\tthis.cm.focus();\n\treturn newText;\n};\n\nexports.CodeMirrorEngine = CodeMirrorEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js": {
"text": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).CodeMirror=t()}(this,function(){\"use strict\";var e=navigator.userAgent,t=navigator.platform,d=/gecko\\/\\d/i.test(e),n=/MSIE \\d/.test(e),r=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(e),i=/Edge\\/(\\d+)/.exec(e),w=n||r||i,v=w&&(n?document.documentMode||6:+(i||r)[1]),f=!i&&/WebKit\\//.test(e),r=f&&/Qt\\/\\d+\\.\\d+/.test(e),o=!i&&/Chrome\\//.test(e),p=/Opera\\//.test(e),c=/Apple Computer/.test(navigator.vendor),l=/Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(e),u=/PhantomJS/.test(e),s=!i&&/AppleWebKit/.test(e)&&/Mobile\\/\\w+/.test(e),a=/Android/.test(e),h=s||a||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),g=s||/Mac/.test(t),m=/\\bCrOS\\b/.test(e),y=/win/i.test(t),e=p&&e.match(/Version\\/(\\d*\\.\\d*)/);(e=e&&Number(e[1]))&&15<=e&&(f=!(p=!1));var b=g&&(r||p&&(null==e||e<12.11)),x=d||w&&9<=v;function C(e){return new RegExp(\"(^|\\\\s)\"+e+\"(?:$|\\\\s)\\\\s*\")}var S,L=function(e,t){var n=e.className,r=C(t).exec(n);r&&(t=n.slice(r.index+r[0].length),e.className=n.slice(0,r.index)+(t?r[1]+t:\"\"))};function k(e){for(var t=e.childNodes.length;0<t;--t)e.removeChild(e.firstChild);return e}function T(e,t){return k(e).appendChild(t)}function M(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),\"string\"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function N(e,t,n,r){r=M(e,t,n,r);return r.setAttribute(\"role\",\"presentation\"),r}function A(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function O(){var t;try{t=document.activeElement}catch(e){t=document.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function D(e,t){var n=e.className;C(t).test(n)||(e.className+=(n?\" \":\"\")+t)}function W(e,t){for(var n=e.split(\" \"),r=0;r<n.length;r++)n[r]&&!C(n[r]).test(t)&&(t+=\" \"+n[r]);return t}S=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(e){return r}return r.collapse(!0),r.moveEnd(\"character\",n),r.moveStart(\"character\",t),r};var H=function(e){e.select()};function F(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function E(e,t,n){for(var r in t=t||{},e)!e.hasOwnProperty(r)||!1===n&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function P(e,t,n,r,i){null==t&&-1==(t=e.search(/[^\\s\\u00a0]/))&&(t=e.length);for(var o=r||0,l=i||0;;){var s=e.indexOf(\"\\t\",o);if(s<0||t<=s)return l+(t-o);l+=s-o,l+=n-l%n,o=s+1}}s?H=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:w&&(H=function(e){try{e.select()}catch(e){}});var I=function(){this.id=null,this.f=null,this.time=0,this.handler=F(this.onTimeout,this)};function R(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}I.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)},I.prototype.set=function(e,t){this.f=t;t=+new Date+e;(!this.id||t<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,e),this.time=t)};var z=50,B={toString:function(){return\"CodeMirror.Pass\"}},G={scroll:!1},U={origin:\"*mouse\"},V={origin:\"+move\"};function K(e,t,n){for(var r=0,i=0;;){var o=e.indexOf(\"\\t\",r);-1==o&&(o=e.length);var l=o-r;if(o==e.length||t<=i+l)return r+Math.min(l,t-i);if(i+=o-r,r=o+1,t<=(i+=n-i%n))return r}}var j=[\"\"];function X(e){for(;j.length<=e;)j.push(Y(j)+\" \");return j[e]}function Y(e){return e[e.length-1]}function _(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function $(){}function q(e,t){e=Object.create?Object.create(e):($.prototype=e,new $);return t&&E(t,e),e}var Z=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;function Q(e){return/\\w/.test(e)||\"\"<e&&(e.toUpperCase()!=e.toLowerCase()||Z.test(e))}function J(e,t){return t?!!(-1<t.source.indexOf(\"\\\\w\")&&Q(e))||t.test(e):Q(e)}function ee(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return;return 1}var te=/[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;function ne(e){return 768<=e.charCodeAt(0)&&te.test(e)}function re(e,t,n){for(;(n<0?0<t:t<e.length)&&ne(e.charAt(t));)t+=n;return t}function ie(e,t,n){for(var r=n<t?-1:1;;){if(t==n)return t;var i=(t+n)/2,i=r<0?Math.ceil(i):Math.floor(i);if(i==t)return e(i)?t:n;e(i)?n=i:t=i+r}}var oe=null;function le(e,t,n){var r;oe=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&\"before\"==n?r=i:oe=i),o.from==t&&(o.from!=o.to&&\"before\"!=n?r=i:oe=i)}return null!=r?r:oe}var se,ae,ue,ce,he,de,fe,pe=(se=\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\",ae=\"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\",ue=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,ce=/[stwN]/,he=/[LRr]/,de=/[Lb1n]/,fe=/[1n]/,function(e,t){var n=\"ltr\"==t?\"L\":\"R\";if(0==e.length||\"ltr\"==t&&!ue.test(e))return!1;for(var r,i=e.length,o=[],l=0;l<i;++l)o.push((r=e.charCodeAt(l))<=247?se.charAt(r):1424<=r&&r<=1524?\"R\":1536<=r&&r<=1785?ae.charAt(r-1536):1774<=r&&r<=2220?\"r\":8192<=r&&r<=8203?\"w\":8204==r?\"b\":\"L\");for(var s=0,a=n;s<i;++s){var u=o[s];\"m\"==u?o[s]=a:a=u}for(var c=0,h=n;c<i;++c){var d=o[c];\"1\"==d&&\"r\"==h?o[c]=\"n\":he.test(d)&&\"r\"==(h=d)&&(o[c]=\"R\")}for(var f=1,p=o[0];f<i-1;++f){var g=o[f];\"+\"==g&&\"1\"==p&&\"1\"==o[f+1]?o[f]=\"1\":\",\"!=g||p!=o[f+1]||\"1\"!=p&&\"n\"!=p||(o[f]=p),p=g}for(var m=0;m<i;++m){var v=o[m];if(\",\"==v)o[m]=\"N\";else if(\"%\"==v){for(var y=void 0,y=m+1;y<i&&\"%\"==o[y];++y);for(var b=m&&\"!\"==o[m-1]||y<i&&\"1\"==o[y]?\"1\":\"N\",w=m;w<y;++w)o[w]=b;m=y-1}}for(var x=0,C=n;x<i;++x){var S=o[x];\"L\"==C&&\"1\"==S?o[x]=\"L\":he.test(S)&&(C=S)}for(var L=0;L<i;++L)if(ce.test(o[L])){for(var k=void 0,k=L+1;k<i&&ce.test(o[k]);++k);for(var T=\"L\"==(L?o[L-1]:n),M=T==(\"L\"==(k<i?o[k]:n))?T?\"L\":\"R\":n,N=L;N<k;++N)o[N]=M;L=k-1}for(var A,O=[],D=0;D<i;)if(de.test(o[D])){var W=D;for(++D;D<i&&de.test(o[D]);++D);O.push(new ge(0,W,D))}else{var H=D,F=O.length,E=\"rtl\"==t?1:0;for(++D;D<i&&\"L\"!=o[D];++D);for(var P=H;P<D;)if(fe.test(o[P])){H<P&&(O.splice(F,0,new ge(1,H,P)),F+=E);var I=P;for(++P;P<D&&fe.test(o[P]);++P);O.splice(F,0,new ge(2,I,P)),F+=E,H=P}else++P;H<D&&O.splice(F,0,new ge(1,H,D))}return\"ltr\"==t&&(1==O[0].level&&(A=e.match(/^\\s+/))&&(O[0].from=A[0].length,O.unshift(new ge(0,0,A[0].length))),1==Y(O).level&&(A=e.match(/\\s+$/))&&(Y(O).to-=A[0].length,O.push(new ge(0,i-A[0].length,i)))),\"rtl\"==t?O.reverse():O});function ge(e,t,n){this.level=e,this.from=t,this.to=n}function me(e,t){var n=e.order;return null==n&&(n=e.order=pe(e.text,t)),n}var ve=[],ye=function(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent?e.attachEvent(\"on\"+t,n):(e=e._handlers||(e._handlers={}))[t]=(e[t]||ve).concat(n)};function be(e,t){return e._handlers&&e._handlers[t]||ve}function we(e,t,n){var r;e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent?e.detachEvent(\"on\"+t,n):!(e=(r=e._handlers)&&r[t])||-1<(n=R(e,n))&&(r[t]=e.slice(0,n).concat(e.slice(n+1)))}function xe(e,t){var n=be(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)}function Ce(e,t,n){return\"string\"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),xe(e,n||t.type,e,t),Ne(t)||t.codemirrorIgnore}function Se(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==R(n,t[r])&&n.push(t[r])}function Le(e,t){return 0<be(e,t).length}function ke(e){e.prototype.on=function(e,t){ye(this,e,t)},e.prototype.off=function(e,t){we(this,e,t)}}function Te(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Me(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ne(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Ae(e){Te(e),Me(e)}function Oe(e){return e.target||e.srcElement}function De(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),g&&e.ctrlKey&&1==t&&(t=3),t}var We,He,Fe=function(){if(w&&v<9)return!1;var e=M(\"div\");return\"draggable\"in e||\"dragDrop\"in e}();var Ee=3!=\"\\n\\nb\".split(/\\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf(\"\\n\",t);-1==i&&(i=e.length);var o=e.slice(t,\"\\r\"==e.charAt(i-1)?i-1:i),l=o.indexOf(\"\\r\");-1!=l?(n.push(o.slice(0,l)),t+=l+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\\r\\n?|\\n/)},Pe=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints(\"StartToEnd\",t)},Ie=\"oncopy\"in(r=M(\"div\"))||(r.setAttribute(\"oncopy\",\"return;\"),\"function\"==typeof r.oncopy),Re=null;var ze={},Be={};function Ge(e){if(\"string\"==typeof e&&Be.hasOwnProperty(e))e=Be[e];else if(e&&\"string\"==typeof e.name&&Be.hasOwnProperty(e.name)){var t=Be[e.name];\"string\"==typeof t&&(t={name:t}),(e=q(t,e)).name=t.name}else{if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(e))return Ge(\"application/xml\");if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(e))return Ge(\"application/json\")}return\"string\"==typeof e?{name:e}:e||{name:\"null\"}}function Ue(e,t){t=Ge(t);var n=ze[t.name];if(!n)return Ue(e,\"text/plain\");var r=n(e,t);if(Ve.hasOwnProperty(t.name)){var i,o=Ve[t.name];for(i in o)o.hasOwnProperty(i)&&(r.hasOwnProperty(i)&&(r[\"_\"+i]=r[i]),r[i]=o[i])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}var Ve={};function Ke(e,t){E(t,Ve.hasOwnProperty(e)?Ve[e]:Ve[e]={})}function je(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n,r={};for(n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Xe(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Ye(e,t,n){return!e.startState||e.startState(t,n)}var _e=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function $e(e,t){if((t-=e.first)<0||t>=e.size)throw new Error(\"There is no line \"+(t+e.first)+\" in the document.\");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t<o){n=i;break}t-=o}return n.lines[t]}function qe(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){e=e.text;i==n.line&&(e=e.slice(0,n.ch)),i==t.line&&(e=e.slice(t.ch)),r.push(e),++i}),r}function Ze(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function Qe(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function Je(e){if(null==e.parent)return null;for(var t=e.parent,n=R(t.lines,e),r=t.parent;r;r=(t=r).parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function et(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(t<o){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l].height;if(t<s)break;t-=s}return n+l}function tt(e,t){return t>=e.first&&t<e.first+e.size}function nt(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function rt(e,t,n){if(void 0===n&&(n=null),!(this instanceof rt))return new rt(e,t,n);this.line=e,this.ch=t,this.sticky=n}function it(e,t){return e.line-t.line||e.ch-t.ch}function ot(e,t){return e.sticky==t.sticky&&0==it(e,t)}function lt(e){return rt(e.line,e.ch)}function st(e,t){return it(e,t)<0?t:e}function at(e,t){return it(e,t)<0?e:t}function ut(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function ct(e,t){if(t.line<e.first)return rt(e.first,0);var n=e.first+e.size-1;return t.line>n?rt(n,$e(e,n).text.length):(e=$e(e,(n=t).line).text.length,null==(t=n.ch)||e<t?rt(n.line,e):t<0?rt(n.line,0):n)}function ht(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=ct(e,t[r]);return n}_e.prototype.eol=function(){return this.pos>=this.string.length},_e.prototype.sol=function(){return this.pos==this.lineStart},_e.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},_e.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},_e.prototype.eat=function(e){var t=this.string.charAt(this.pos),e=\"string\"==typeof e?t==e:t&&(e.test?e.test(t):e(t));if(e)return++this.pos,t},_e.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},_e.prototype.eatSpace=function(){for(var e=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},_e.prototype.skipToEnd=function(){this.pos=this.string.length},_e.prototype.skipTo=function(e){e=this.string.indexOf(e,this.pos);if(-1<e)return this.pos=e,!0},_e.prototype.backUp=function(e){this.pos-=e},_e.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=P(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?P(this.string,this.lineStart,this.tabSize):0)},_e.prototype.indentation=function(){return P(this.string,null,this.tabSize)-(this.lineStart?P(this.string,this.lineStart,this.tabSize):0)},_e.prototype.match=function(e,t,n){if(\"string\"!=typeof e){var r=this.string.slice(this.pos).match(e);return r&&0<r.index?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}r=function(e){return n?e.toLowerCase():e};if(r(this.string.substr(this.pos,e.length))==r(e))return!1!==t&&(this.pos+=e.length),!0},_e.prototype.current=function(){return this.string.slice(this.start,this.pos)},_e.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},_e.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},_e.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var dt=function(e,t){this.state=e,this.lookAhead=t},ft=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function pt(t,n,r,e){var a=[t.state.modeGen],i={};St(t,n.text,t.doc.mode,r,function(e,t){return a.push(e,t)},i,e);for(var u=r.state,o=0;o<t.state.overlays.length;++o)!function(e){r.baseTokens=a;var o=t.state.overlays[e],l=1,s=0;r.state=!0,St(t,n.text,o.mode,r,function(e,t){for(var n=l;s<e;){var r=a[l];e<r&&a.splice(l,1,e,a[l+1],r),l+=2,s=Math.min(e,r)}if(t)if(o.opaque)a.splice(n,l-n,e,\"overlay \"+t),l=n+2;else for(;n<l;n+=2){var i=a[n+1];a[n+1]=(i?i+\" \":\"\")+\"overlay \"+t}},i),r.state=u,r.baseTokens=null,r.baseTokenPos=1}(o);return{styles:a,classes:i.bgClass||i.textClass?i:null}}function gt(e,t,n){var r,i,o;return t.styles&&t.styles[0]==e.state.modeGen||(r=mt(e,Je(t)),i=t.text.length>e.options.maxHighlightLength&&je(e.doc.mode,r.state),o=pt(e,t,r),i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))),t.styles}function mt(n,r,e){var t=n.doc,i=n.display;if(!t.mode.startState)return new ft(t,!0,r);var o=function(e,t,n){for(var r,i,o=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;l<s;--s){if(s<=o.first)return o.first;var a=$e(o,s-1),u=a.stateAfter;if(u&&(!n||s+(u instanceof dt?u.lookAhead:0)<=o.modeFrontier))return s;a=P(a.text,null,e.options.tabSize);(null==i||a<r)&&(i=s-1,r=a)}return i}(n,r,e),l=o>t.first&&$e(t,o-1).stateAfter,s=l?ft.fromSaved(t,l,o):new ft(t,Ye(t.mode),o);return t.iter(o,r,function(e){vt(n,e.text,s);var t=s.line;e.stateAfter=t==r-1||t%5==0||t>=i.viewFrom&&t<i.viewTo?s.save():null,s.nextLine()}),e&&(t.modeFrontier=s.line),s}function vt(e,t,n,r){var i=e.doc.mode,o=new _e(t,e.options.tabSize,n);for(o.start=o.pos=r||0,\"\"==t&&yt(i,n.state);!o.eol();)bt(i,o,n.state),o.start=o.pos}function yt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){t=Xe(e,t);return t.mode.blankLine?t.mode.blankLine(t.state):void 0}}function bt(e,t,n,r){for(var i=0;i<10;i++){r&&(r[0]=Xe(e,n).mode);var o=e.token(t,n);if(t.pos>t.start)return o}throw new Error(\"Mode \"+e.name+\" failed to advance stream.\")}ft.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ft.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,\"\"),size:this.baseTokens[this.baseTokenPos]-e}},ft.prototype.nextLine=function(){this.line++,0<this.maxLookAhead&&this.maxLookAhead--},ft.fromSaved=function(e,t,n){return t instanceof dt?new ft(e,je(e.mode,t.state),n,t.lookAhead):new ft(e,je(e.mode,t),n)},ft.prototype.save=function(e){e=!1!==e?je(this.doc.mode,this.state):this.state;return 0<this.maxLookAhead?new dt(e,this.maxLookAhead):e};var wt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function xt(e,t,n,r){var i,o,l=e.doc,s=l.mode,a=$e(l,(t=ct(l,t)).line),u=mt(e,t.line,n),c=new _e(a.text,e.options.tabSize,u);for(r&&(o=[]);(r||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=bt(s,c,u.state),r&&o.push(new wt(c,i,je(l.mode,u.state)));return r?o:new wt(c,i,u.state)}function Ct(e,t){if(e)for(;;){var n=e.match(/(?:^|\\s+)line-(background-)?(\\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?\"bgClass\":\"textClass\";null==t[r]?t[r]=n[2]:new RegExp(\"(?:^|\\\\s)\"+n[2]+\"(?:$|\\\\s)\").test(t[r])||(t[r]+=\" \"+n[2])}return e}function St(e,t,n,r,i,o,l){var s=n.flattenSpans;null==s&&(s=e.options.flattenSpans);var a=0,u=null,c=new _e(t,e.options.tabSize,r),h=e.options.addModeClass&&[null];for(\"\"==t&&Ct(yt(n,r.state),o);!c.eol();){var d,f=c.pos>e.options.maxHighlightLength?(s=!1,l&&vt(e,t,r,c.pos),c.pos=t.length,null):Ct(bt(n,c,r.state,h),o);if(!h||(d=h[0].name)&&(f=\"m-\"+(f?d+\" \"+f:d)),!s||u!=f){for(;a<c.start;)i(a=Math.min(c.start,a+5e3),u);u=f}c.start=c.pos}for(;a<c.pos;){var p=Math.min(c.pos,a+5e3);i(p,u),a=p}}var Lt=!1,kt=!1;function Tt(e,t,n){this.marker=e,this.from=t,this.to=n}function Mt(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function Nt(e,t){if(t.full)return null;var n=tt(e,t.from.line)&&$e(e,t.from.line).markedSpans,r=tt(e,t.to.line)&&$e(e,t.to.line).markedSpans;if(!n&&!r)return null;var i=t.from.ch,o=t.to.ch,e=0==it(t.from,t.to),l=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o,l=e[i],s=l.marker;!(null==l.from||(s.inclusiveLeft?l.from<=t:l.from<t))&&(l.from!=t||\"bookmark\"!=s.type||n&&l.marker.insertLeft)||(o=null==l.to||(s.inclusiveRight?l.to>=t:l.to>t),(r=r||[]).push(new Tt(s,l.from,o?null:l.to)))}return r}(n,i,e),s=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o,l=e[i],s=l.marker;!(null==l.to||(s.inclusiveRight?l.to>=t:l.to>t))&&(l.from!=t||\"bookmark\"!=s.type||n&&!l.marker.insertLeft)||(o=null==l.from||(s.inclusiveLeft?l.from<=t:l.from<t),(r=r||[]).push(new Tt(s,o?null:l.from-t,null==l.to?null:l.to-t)))}return r}(r,o,e),a=1==t.text.length,u=Y(t.text).length+(a?i:0);if(l)for(var c=0;c<l.length;++c){var h,d=l[c];null==d.to&&((h=Mt(s,d.marker))?a&&(d.to=null==h.to?null:h.to+u):d.to=i)}if(s)for(var f=0;f<s.length;++f){var p=s[f];null!=p.to&&(p.to+=u),null==p.from?Mt(l,p.marker)||(p.from=u,a&&(l=l||[]).push(p)):(p.from+=u,a&&(l=l||[]).push(p))}l=l&&At(l),s&&s!=l&&(s=At(s));var g=[l];if(!a){var m,v=t.text.length-2;if(0<v&&l)for(var y=0;y<l.length;++y)null==l[y].to&&(m=m||[]).push(new Tt(l[y].marker,null,null));for(var b=0;b<v;++b)g.push(m);g.push(s)}return g}function At(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Ot(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function Dt(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function Wt(e){return e.inclusiveLeft?-1:0}function Ht(e){return e.inclusiveRight?1:0}function Ft(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),i=t.find(),n=it(r.from,i.from)||Wt(e)-Wt(t);if(n)return-n;i=it(r.to,i.to)||Ht(e)-Ht(t);return i||t.id-e.id}function Et(e,t){var n,r=kt&&e.markedSpans;if(r)for(var i,o=0;o<r.length;++o)(i=r[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!n||Ft(n,i.marker)<0)&&(n=i.marker);return n}function Pt(e){return Et(e,!0)}function It(e){return Et(e,!1)}function Rt(e,t,n,r,i){var t=$e(e,t),o=kt&&t.markedSpans;if(o)for(var l=0;l<o.length;++l){var s=o[l];if(s.marker.collapsed){var a=s.marker.find(0),u=it(a.from,n)||Wt(s.marker)-Wt(i),c=it(a.to,r)||Ht(s.marker)-Ht(i);if(!(0<=u&&c<=0||u<=0&&0<=c)&&(u<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?0<=it(a.to,n):0<it(a.to,n))||0<=u&&(s.marker.inclusiveRight&&i.inclusiveLeft?it(a.from,r)<=0:it(a.from,r)<0)))return 1}}}function zt(e){for(var t;t=Pt(e);)e=t.find(-1,!0).line;return e}function Bt(e,t){var n=$e(e,t),e=zt(n);return n==e?t:Je(e)}function Gt(e,t){if(t>e.lastLine())return t;var n,r=$e(e,t);if(!Ut(e,r))return t;for(;n=It(r);)r=n.find(1,!0).line;return Je(r)+1}function Ut(e,t){var n=kt&&t.markedSpans;if(n)for(var r,i=0;i<n.length;++i)if((r=n[i]).marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&function e(t,n,r){if(null==r.to){var i=r.marker.find(1,!0);return e(t,i.line,Mt(i.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==n.text.length)return!0;for(var o=void 0,l=0;l<n.markedSpans.length;++l)if((o=n.markedSpans[l]).marker.collapsed&&!o.marker.widgetNode&&o.from==r.to&&(null==o.to||o.to!=r.from)&&(o.marker.inclusiveLeft||r.marker.inclusiveRight)&&e(t,n,o))return!0}(e,t,r))return!0}}function Vt(e){for(var t=0,n=(e=zt(e)).parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;o=(n=o).parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==n)break;t+=s.height}return t}function Kt(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=Pt(r);){var i=t.find(0,!0),r=i.from.line;n+=i.from.ch-i.to.ch}for(r=e;t=It(r);){var o=t.find(0,!0);n-=r.text.length-o.from.ch,n+=(r=o.to.line).text.length-o.to.ch}return n}function jt(e){var n=e.display,e=e.doc;n.maxLine=$e(e,e.first),n.maxLineLength=Kt(n.maxLine),n.maxLineChanged=!0,e.iter(function(e){var t=Kt(e);t>n.maxLineLength&&(n.maxLineLength=t,n.maxLine=e)})}var Xt=function(e,t,n){this.text=e,Dt(this,t),this.height=n?n(this):1};Xt.prototype.lineNo=function(){return Je(this)},ke(Xt);var Yt={},_t={};function $t(e,t){if(!e||/^\\s*$/.test(e))return null;t=t.addModeClass?_t:Yt;return t[e]||(t[e]=e.replace(/\\S+/g,\"cm-$&\"))}function qt(e,t){var n=N(\"span\",null,null,f?\"padding-right: .1px\":null),r={pre:N(\"pre\",[n],\"CodeMirror-line\"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption(\"lineWrapping\")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;r.pos=0,r.addToken=Qt,function(e){if(null!=He)return He;var t=T(e,document.createTextNode(\"AخA\")),n=S(t,0,1).getBoundingClientRect(),t=S(t,1,2).getBoundingClientRect();return k(e),n&&n.left!=n.right&&(He=t.right-n.right<3)}(e.display.measure)&&(l=me(o,e.doc.direction))&&(r.addToken=function(h,d){return function(e,t,n,r,i,o,l){n=n?n+\" cm-force-border\":\"cm-force-border\";for(var s=e.pos,a=s+t.length;;){for(var u=void 0,c=0;c<d.length&&!((u=d[c]).to>s&&u.from<=s);c++);if(u.to>=a)return h(e,t,n,r,i,o,l);h(e,t.slice(0,u.to-s),n,r,null,o,l),r=null,t=t.slice(u.to-s),s=u.to}}}(r.addToken,l)),r.map=[],function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(!r){for(var l=1;l<n.length;l+=2)t.addToken(t,i.slice(o,o=n[l]),$t(n[l+1],t.cm.options));return}for(var s,a,u,c,h,d,f,p=i.length,g=0,m=1,v=\"\",y=0;;){if(y==g){u=c=h=a=\"\",d=f=null,y=1/0;for(var b=[],w=void 0,x=0;x<r.length;++x){var C=r[x],S=C.marker;if(\"bookmark\"==S.type&&C.from==g&&S.widgetNode)b.push(S);else if(C.from<=g&&(null==C.to||C.to>g||S.collapsed&&C.to==g&&C.from==g)){if(null!=C.to&&C.to!=g&&y>C.to&&(y=C.to,c=\"\"),S.className&&(u+=\" \"+S.className),S.css&&(a=(a?a+\";\":\"\")+S.css),S.startStyle&&C.from==g&&(h+=\" \"+S.startStyle),S.endStyle&&C.to==y&&(w=w||[]).push(S.endStyle,C.to),S.title&&((f=f||{}).title=S.title),S.attributes)for(var L in S.attributes)(f=f||{})[L]=S.attributes[L];S.collapsed&&(!d||Ft(d.marker,S)<0)&&(d=C)}else C.from>g&&y>C.from&&(y=C.from)}if(w)for(var k=0;k<w.length;k+=2)w[k+1]==y&&(c+=\" \"+w[k]);if(!d||d.from==g)for(var T=0;T<b.length;++T)Jt(t,0,b[T]);if(d&&(d.from||0)==g){if(Jt(t,(null==d.to?p+1:d.to)-g,d.marker,null==d.from),null==d.to)return;d.to==g&&(d=!1)}}if(p<=g)break;for(var M=Math.min(p,y);;){if(v){var N,A=g+v.length;if(d||(N=M<A?v.slice(0,M-g):v,t.addToken(t,N,s?s+u:u,h,g+N.length==y?c:\"\",a,f)),M<=A){v=v.slice(M-g),g=M;break}g=A,h=\"\"}v=i.slice(o,o=n[m++]),s=$t(n[m++],t.cm.options)}}}(o,r,gt(e,o,t!=e.display.externalMeasured&&Je(o))),o.styleClasses&&(o.styleClasses.bgClass&&(r.bgClass=W(o.styleClasses.bgClass,r.bgClass||\"\")),o.styleClasses.textClass&&(r.textClass=W(o.styleClasses.textClass,r.textClass||\"\"))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(function(e){null==We&&(t=M(\"span\",\"\"),T(e,M(\"span\",[t,document.createTextNode(\"x\")])),0!=e.firstChild.offsetHeight&&(We=t.offsetWidth<=1&&2<t.offsetHeight&&!(w&&v<8)));var t=We?M(\"span\",\"\"):M(\"span\",\" \",null,\"display: inline-block; width: 1px; margin-right: -1px\");return t.setAttribute(\"cm-text\",\"\"),t}(e.display.measure))),0==i?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}return f&&(n=r.content.lastChild,(/\\bcm-tab\\b/.test(n.className)||n.querySelector&&n.querySelector(\".cm-tab\"))&&(r.content.className=\"cm-tab-wrap-hack\")),xe(e,\"renderLine\",e,t.line,r.pre),r.pre.className&&(r.textClass=W(r.pre.className,r.textClass||\"\")),r}function Zt(e){var t=M(\"span\",\"•\",\"cm-invalidchar\");return t.title=\"\\\\u\"+e.charCodeAt(0).toString(16),t.setAttribute(\"aria-label\",t.title),t}function Qt(e,t,n,r,i,o,l){if(t){var s,a=e.splitSpaces?function(e,t){if(1<e.length&&!/ /.test(e))return e;for(var n=t,r=\"\",i=0;i<e.length;i++){var o=e.charAt(i);\" \"!=o||!n||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=\" \"),r+=o,n=\" \"==o}return r}(t,e.trailingSpace):t,u=e.cm.state.specialChars,c=!1;if(u.test(t)){s=document.createDocumentFragment();for(var h=0;;){u.lastIndex=h;var d=u.exec(t),f=d?d.index-h:t.length-h;if(f&&(p=document.createTextNode(a.slice(h,h+f)),w&&v<9?s.appendChild(M(\"span\",[p])):s.appendChild(p),e.map.push(e.pos,e.pos+f,p),e.col+=f,e.pos+=f),!d)break;h+=1+f;var p=void 0;\"\\t\"==d[0]?(f=(f=e.cm.options.tabSize)-e.col%f,(p=s.appendChild(M(\"span\",X(f),\"cm-tab\"))).setAttribute(\"role\",\"presentation\"),p.setAttribute(\"cm-text\",\"\\t\"),e.col+=f):(\"\\r\"==d[0]||\"\\n\"==d[0]?(p=s.appendChild(M(\"span\",\"\\r\"==d[0]?\"␍\":\"\",\"cm-invalidchar\"))).setAttribute(\"cm-text\",d[0]):((p=e.cm.options.specialCharPlaceholder(d[0])).setAttribute(\"cm-text\",d[0]),w&&v<9?s.appendChild(M(\"span\",[p])):s.appendChild(p)),e.col+=1),e.map.push(e.pos,e.pos+1,p),e.pos++}}else e.col+=t.length,s=document.createTextNode(a),e.map.push(e.pos,e.pos+t.length,s),w&&v<9&&(c=!0),e.pos+=t.length;if(e.trailingSpace=32==a.charCodeAt(t.length-1),n||r||i||c||o||l){n=n||\"\";r&&(n+=r),i&&(n+=i);var g=M(\"span\",[s],n,o);if(l)for(var m in l)l.hasOwnProperty(m)&&\"style\"!=m&&\"class\"!=m&&g.setAttribute(m,l[m]);return e.content.appendChild(g)}e.content.appendChild(s)}}function Jt(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i=i||e.content.appendChild(document.createElement(\"span\"))).setAttribute(\"cm-marker\",n.id),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function en(e,t,n){this.line=t,this.rest=function(e){for(var t,n;t=It(e);)e=t.find(1,!0).line,(n=n||[]).push(e);return n}(t),this.size=this.rest?Je(Y(this.rest))-n+1:1,this.node=this.text=null,this.hidden=Ut(e,t)}function tn(e,t,n){for(var r=[],i=t;i<n;i=l){var o=new en(e.doc,$e(e.doc,i),i),l=i+o.size;r.push(o)}return r}var nn=null;function rn(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var i=e.ops[r];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(n<t.length)}(n)}finally{nn=null,t(n)}}var on=null;function ln(e,t){var n=be(e,t);if(n.length){var r,i=Array.prototype.slice.call(arguments,2);nn?r=nn.delayedCallbacks:on?r=on:(r=on=[],setTimeout(sn,0));for(var o=0;o<n.length;++o)!function(e){r.push(function(){return n[e].apply(null,i)})}(o)}}function sn(){var e=on;on=null;for(var t=0;t<e.length;++t)e[t]()}function an(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];\"text\"==o?function(e,t){var n=t.text.className,r=cn(e,t);t.text==t.node&&(t.node=r.pre);t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,hn(e,t)):n&&(t.text.className=n)}(e,t):\"gutter\"==o?dn(e,t,n,r):\"class\"==o?hn(e,t):\"widget\"==o&&function(e,t,n){t.alignable&&(t.alignable=null);for(var r=C(\"CodeMirror-linewidget\"),i=t.node.firstChild,o=void 0;i;i=o)o=i.nextSibling,r.test(i.className)&&t.node.removeChild(i);fn(e,t,n)}(e,t,r)}t.changes=null}function un(e){return e.node==e.text&&(e.node=M(\"div\",null,null,\"position: relative\"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),w&&v<8&&(e.node.style.zIndex=2)),e.node}function cn(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):qt(e,t)}function hn(e,t){var n,r;n=e,(r=(i=t).bgClass?i.bgClass+\" \"+(i.line.bgClass||\"\"):i.line.bgClass)&&(r+=\" CodeMirror-linebackground\"),i.background?r?i.background.className=r:(i.background.parentNode.removeChild(i.background),i.background=null):r&&(e=un(i),i.background=e.insertBefore(M(\"div\",null,r),e.firstChild),n.display.input.setUneditable(i.background)),t.line.wrapClass?un(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=\"\");var i=t.textClass?t.textClass+\" \"+(t.line.textClass||\"\"):t.line.textClass;t.text.className=i||\"\"}function dn(e,t,n,r){t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass&&(o=un(t),t.gutterBackground=M(\"div\",null,\"CodeMirror-gutter-background \"+t.line.gutterClass,\"left: \"+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\"px; width: \"+r.gutterTotalWidth+\"px\"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text));var i=t.line.gutterMarkers;if(e.options.lineNumbers||i){var o=un(t),l=t.gutter=M(\"div\",null,\"CodeMirror-gutter-wrapper\",\"left: \"+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\"px\");if(e.display.input.setUneditable(l),o.insertBefore(l,t.text),t.line.gutterClass&&(l.className+=\" \"+t.line.gutterClass),!e.options.lineNumbers||i&&i[\"CodeMirror-linenumbers\"]||(t.lineNumber=l.appendChild(M(\"div\",nt(e.options,n),\"CodeMirror-linenumber CodeMirror-gutter-elt\",\"left: \"+r.gutterLeft[\"CodeMirror-linenumbers\"]+\"px; width: \"+e.display.lineNumInnerWidth+\"px\"))),i)for(var s=0;s<e.display.gutterSpecs.length;++s){var a=e.display.gutterSpecs[s].className,u=i.hasOwnProperty(a)&&i[a];u&&l.appendChild(M(\"div\",[u],\"CodeMirror-gutter-elt\",\"left: \"+r.gutterLeft[a]+\"px; width: \"+r.gutterWidth[a]+\"px\"))}}}function fn(e,t,n){if(pn(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)pn(e,t.rest[r],t,n,!1)}function pn(e,t,n,r,i){if(t.widgets)for(var o=un(n),l=0,s=t.widgets;l<s.length;++l){var a=s[l],u=M(\"div\",[a.node],\"CodeMirror-linewidget\"+(a.className?\" \"+a.className:\"\"));a.handleMouseEvents||u.setAttribute(\"cm-ignore-events\",\"true\"),function(e,t,n,r){e.noHScroll&&((n.alignable||(n.alignable=[])).push(t),n=r.wrapperWidth,t.style.left=r.fixedPos+\"px\",e.coverGutter||(n-=r.gutterTotalWidth,t.style.paddingLeft=r.gutterTotalWidth+\"px\"),t.style.width=n+\"px\");e.coverGutter&&(t.style.zIndex=5,t.style.position=\"relative\",e.noHScroll||(t.style.marginLeft=-r.gutterTotalWidth+\"px\"))}(a,u,n,r),e.display.input.setUneditable(u),i&&a.above?o.insertBefore(u,n.gutter||n.text):o.appendChild(u),ln(a,\"redraw\")}}function gn(e){if(null!=e.height)return e.height;var t,n=e.doc.cm;return n?(A(document.body,e.node)||(t=\"position: relative;\",e.coverGutter&&(t+=\"margin-left: -\"+n.display.gutters.offsetWidth+\"px;\"),e.noHScroll&&(t+=\"width: \"+n.display.wrapper.clientWidth+\"px;\"),T(n.display.measure,M(\"div\",[e.node],null,t))),e.height=e.node.parentNode.offsetHeight):0}function mn(e,t){for(var n=Oe(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&\"true\"==n.getAttribute(\"cm-ignore-events\")||n.parentNode==e.sizer&&n!=e.mover)return 1}function vn(e){return e.lineSpace.offsetTop}function yn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function bn(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=T(e.measure,M(\"pre\",\"x\",\"CodeMirror-line-like\")),t=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,t={left:parseInt(t.paddingLeft),right:parseInt(t.paddingRight)};return isNaN(t.left)||isNaN(t.right)||(e.cachedPaddingH=t),t}function wn(e){return z-e.display.nativeBarWidth}function xn(e){return e.display.scroller.clientWidth-wn(e)-e.display.barWidth}function Cn(e){return e.display.scroller.clientHeight-wn(e)-e.display.barHeight}function Sn(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var i=0;i<e.rest.length;i++)if(Je(e.rest[i])>n)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Ln(e,t,n,r){return Mn(e,Tn(e,t),n,r)}function kn(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[er(e,t)];e=e.display.externalMeasured;return e&&t>=e.lineN&&t<e.lineN+e.size?e:void 0}function Tn(e,t){var n,r,i=Je(t),o=kn(e,i);o&&!o.text?o=null:o&&o.changes&&(an(e,o,i,$n(e)),e.curOp.forceUpdate=!0),o||(n=e,e=Je(r=zt(r=t)),(r=n.display.externalMeasured=new en(n.doc,r,e)).lineN=e,e=r.built=qt(n,r),r.text=e.pre,T(n.display.lineMeasure,e.pre),o=r);i=Sn(o,t,i);return{line:t,view:o,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function Mn(e,t,n,r,i){t.before&&(n=-1);var o,l=n+(r||\"\");return t.cache.hasOwnProperty(l)?o=t.cache[l]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(function(e,t,n){var r=e.options.lineWrapping,e=r&&xn(e);if(!t.measure.heights||r&&t.measure.width!=e){var i=t.measure.heights=[];if(r){t.measure.width=e;for(var o=t.text.firstChild.getClientRects(),l=0;l<o.length-1;l++){var s=o[l],a=o[l+1];2<Math.abs(s.bottom-a.bottom)&&i.push((s.bottom+a.top)/2-n.top)}}i.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,n,r){var i,o=On(t.map,n,r),l=o.node,s=o.start,a=o.end,u=o.collapse;if(3==l.nodeType){for(var c=0;c<4;c++){for(;s&&ne(t.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+a<o.coverEnd&&ne(t.line.text.charAt(o.coverStart+a));)++a;if((i=w&&v<9&&0==s&&a==o.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():function(e,t){var n=An;if(\"left\"==t)for(var r=0;r<e.length&&(n=e[r]).left==n.right;r++);else for(var i=e.length-1;0<=i&&(n=e[i]).left==n.right;i--);return n}(S(l,s,a).getClientRects(),r)).left||i.right||0==s)break;a=s,--s,u=\"right\"}w&&v<11&&(i=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=Re)return Re;var e=(t=T(e,M(\"span\",\"x\"))).getBoundingClientRect(),t=S(t,0,1).getBoundingClientRect();return Re=1<Math.abs(e.left-t.left)}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,e=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*e,bottom:t.bottom*e}}(e.display.measure,i))}else 0<s&&(u=r=\"right\"),i=e.options.lineWrapping&&1<(g=l.getClientRects()).length?g[\"right\"==r?g.length-1:0]:l.getBoundingClientRect();!(w&&v<9)||s||i&&(i.left||i.right)||(m=l.parentNode.getClientRects()[0],i=m?{left:m.left,right:m.left+_n(e.display),top:m.top,bottom:m.bottom}:An);for(var h=i.top-t.rect.top,n=i.bottom-t.rect.top,d=(h+n)/2,f=t.view.measure.heights,p=0;p<f.length-1&&!(d<f[p]);p++);var g=p?f[p-1]:0,m=f[p],m={left:(\"right\"==u?i.right:i.left)-t.rect.left,right:(\"left\"==u?i.left:i.right)-t.rect.left,top:g,bottom:m};i.left||i.right||(m.bogus=!0);e.options.singleCursorHeightPerLine||(m.rtop=h,m.rbottom=n);return m}(e,t,n,r)).bogus||(t.cache[l]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var Nn,An={left:0,right:0,top:0,bottom:0};function On(e,t,n){for(var r,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l=\"left\"):t<a?o=(i=t-s)+1:(u==e.length-3||t==a&&e[u+3]>t)&&(i=(o=a-s)-1,a<=t&&(l=\"right\")),null!=i){if(r=e[u+2],s==a&&n==(r.insertLeft?\"left\":\"right\")&&(l=n),\"left\"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l=\"left\";if(\"right\"==n&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)r=e[(u+=3)+2],l=\"right\";break}return{node:r,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function Dn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Wn(e){e.display.externalMeasure=null,k(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)Dn(e.display.view[t])}function Hn(e){Wn(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Fn(){return o&&a?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function En(){return o&&a?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Pn(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e.widgets[n].above&&(t+=gn(e.widgets[n]));return t}function In(e,t,n,r,i){if(i||(i=Pn(t),n.top+=i,n.bottom+=i),\"line\"==r)return n;r=r||\"local\";t=Vt(t);return\"local\"==r?t+=vn(e.display):t-=e.display.viewOffset,\"page\"!=r&&\"window\"!=r||(t+=(e=e.display.lineSpace.getBoundingClientRect()).top+(\"window\"==r?0:En()),r=e.left+(\"window\"==r?0:Fn()),n.left+=r,n.right+=r),n.top+=t,n.bottom+=t,n}function Rn(e,t,n){if(\"div\"==n)return t;var r=t.left,t=t.top;\"page\"==n?(r-=Fn(),t-=En()):\"local\"!=n&&n||(r+=(n=e.display.sizer.getBoundingClientRect()).left,t+=n.top);e=e.display.lineSpace.getBoundingClientRect();return{left:r-e.left,top:t-e.top}}function zn(e,t,n,r,i){return In(e,r=r||$e(e.doc,t.line),Ln(e,r,t.ch,i),n)}function Bn(n,e,r,i,o,l){function s(e,t){e=Mn(n,o,e,t?\"right\":\"left\",l);return t?e.left=e.right:e.right=e.left,In(n,i,e,r)}i=i||$e(n.doc,e.line),o=o||Tn(n,i);var a=me(i,n.doc.direction),t=e.ch,u=e.sticky;if(t>=i.text.length?(t=i.text.length,u=\"before\"):t<=0&&(t=0,u=\"after\"),!a)return s(\"before\"==u?t-1:t,\"before\"==u);function c(e,t,n){return s(n?e-1:e,1==a[t].level!=n)}var h=le(a,t,u),e=oe,h=c(t,h,\"before\"==u);return null!=e&&(h.other=c(t,e,\"before\"!=u)),h}function Gn(e,t){var n=0;t=ct(e.doc,t),e.options.lineWrapping||(n=_n(e.display)*t.ch);t=$e(e.doc,t.line),e=Vt(t)+vn(e.display);return{left:n,right:n,top:e,bottom:e+t.height}}function Un(e,t,n,r,i){n=rt(e,t,n);return n.xRel=i,r&&(n.outside=r),n}function Vn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Un(r.first,0,null,-1,-1);var i=et(r,n),o=r.first+r.size-1;if(o<i)return Un(r.first+r.size-1,$e(r,o).text.length,null,1,1);t<0&&(t=0);for(var l=$e(r,i);;){var s=function(n,e,t,r,i){i-=Vt(e);var o=Tn(n,e),l=Pn(e),s=0,a=e.text.length,u=!0,c=me(e,n.doc.direction);c&&(f=(n.options.lineWrapping?function(e,t,n,r,i,o,l){var l=Kn(e,t,r,l),s=l.begin,a=l.end;/\\s/.test(t.text.charAt(a-1))&&a--;for(var u=null,c=null,h=0;h<i.length;h++){var d,f=i[h];f.from>=a||f.to<=s||(d=1!=f.level,d=Mn(e,r,d?Math.min(a,f.to)-1:Math.max(s,f.from)).right,d=d<o?o-d+1e9:d-o,(!u||d<c)&&(u=f,c=d))}u=u||i[i.length-1];u.from<s&&(u={from:s,to:u.to,level:u.level});u.to>a&&(u={from:u.from,to:a,level:u.level});return u}:function(n,r,i,o,l,s,a){var e=ie(function(e){var t=l[e],e=1!=t.level;return Xn(Bn(n,rt(i,e?t.to:t.from,e?\"before\":\"after\"),\"line\",r,o),s,a,!0)},0,l.length-1),t=l[e];{var u;0<e&&(u=1!=t.level,Xn(u=Bn(n,rt(i,u?t.from:t.to,u?\"after\":\"before\"),\"line\",r,o),s,a,!0)&&u.top>a&&(t=l[e-1]))}return t})(n,e,t,o,c,r,i),u=1!=f.level,s=u?f.from:f.to-1,a=u?f.to:f.from-1);var h=null,d=null,c=ie(function(e){var t=Mn(n,o,e);return t.top+=l,t.bottom+=l,Xn(t,r,i,!1)&&(t.top<=i&&t.left<=r&&(h=e,d=t),1)},s,a),f=!1;{var p,g;d?(p=r-d.left<d.right-r,c=h+((g=p==u)?0:1),g=g?\"after\":\"before\",p=p?d.left:d.right):(u||c!=a&&c!=s||c++,g=0==c||c!=e.text.length&&Mn(n,o,c-(u?1:0)).bottom+l<=i==u?\"after\":\"before\",u=Bn(n,rt(t,c,g),\"line\",e,o),p=u.left,f=i<u.top?-1:i>=u.bottom?1:0)}return c=re(e.text,c,1),Un(t,c,g,f,r-p)}(e,l,i,t,n),a=function(e,t){var n,r=kt&&e.markedSpans;if(r)for(var i=0;i<r.length;++i){var o=r[i];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!n||Ft(n,o.marker)<0)&&(n=o.marker)}return n}(l,s.ch+(0<s.xRel||0<s.outside?1:0));if(!a)return s;a=a.find(1);if(a.line==i)return a;l=$e(r,i=a.line)}}function Kn(t,e,n,r){r-=Pn(e);var i=e.text.length,e=ie(function(e){return Mn(t,n,e-1).bottom<=r},i,0);return{begin:e,end:i=ie(function(e){return Mn(t,n,e).top>r},e,i)}}function jn(e,t,n,r){return Kn(e,t,n=n||Tn(e,t),In(e,t,Mn(e,n,r),\"line\").top)}function Xn(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function Yn(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Nn){Nn=M(\"pre\",null,\"CodeMirror-line-like\");for(var t=0;t<49;++t)Nn.appendChild(document.createTextNode(\"x\")),Nn.appendChild(M(\"br\"));Nn.appendChild(document.createTextNode(\"x\"))}T(e.measure,Nn);var n=Nn.offsetHeight/50;return 3<n&&(e.cachedTextHeight=n),k(e.measure),n||1}function _n(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=M(\"span\",\"xxxxxxxxxx\"),n=M(\"pre\",[t],\"CodeMirror-line-like\");T(e.measure,n);t=t.getBoundingClientRect(),t=(t.right-t.left)/10;return 2<t&&(e.cachedCharWidth=t),t||10}function $n(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;n[s]=o.offsetLeft+o.clientLeft+i,r[s]=o.clientWidth}return{fixedPos:qn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function qn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Zn(r){var i=Yn(r.display),o=r.options.lineWrapping,l=o&&Math.max(5,r.display.scroller.clientWidth/_n(r.display)-3);return function(e){if(Ut(r.doc,e))return 0;var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;n++)e.widgets[n].height&&(t+=e.widgets[n].height);return o?t+(Math.ceil(e.text.length/l)||1)*i:t+i}}function Qn(e){var t=e.doc,n=Zn(e);t.iter(function(e){var t=n(e);t!=e.height&&Qe(e,t)})}function Jn(e,t,n,r){var i=e.display;if(!n&&\"true\"==Oe(t).getAttribute(\"cm-not-content\"))return null;var o,l,s=i.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,l=t.clientY-s.top}catch(e){return null}var a,i=Vn(e,o,l);return r&&0<i.xRel&&(a=$e(e.doc,i.line).text).length==i.ch&&(a=P(a,a.length,e.options.tabSize)-a.length,i=rt(i.line,Math.max(0,Math.round((o-bn(e.display).left)/_n(e.display))-a))),i}function er(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r<n.length;r++)if((t-=n[r].size)<0)return r}function tr(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r=r||0;var i,o,l=e.display;r&&n<l.viewTo&&(null==l.updateLineNumbers||l.updateLineNumbers>t)&&(l.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=l.viewTo?kt&&Bt(e.doc,t)<l.viewTo&&rr(e):n<=l.viewFrom?kt&&Gt(e.doc,n+r)>l.viewFrom?rr(e):(l.viewFrom+=r,l.viewTo+=r):t<=l.viewFrom&&n>=l.viewTo?rr(e):t<=l.viewFrom?(i=ir(e,n,n+r,1))?(l.view=l.view.slice(i.index),l.viewFrom=i.lineN,l.viewTo+=r):rr(e):n>=l.viewTo?(o=ir(e,t,t,-1))?(l.view=l.view.slice(0,o.index),l.viewTo=o.lineN):rr(e):(i=ir(e,t,t,-1),o=ir(e,n,n+r,1),i&&o?(l.view=l.view.slice(0,i.index).concat(tn(e,i.lineN,o.lineN)).concat(l.view.slice(o.index)),l.viewTo+=r):rr(e));e=l.externalMeasured;e&&(n<e.lineN?e.lineN+=r:t<e.lineN+e.size&&(l.externalMeasured=null))}function nr(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),t<r.viewFrom||t>=r.viewTo||(null==(t=r.view[er(e,t)]).node||-1==R(t=t.changes||(t.changes=[]),n)&&t.push(n))}function rr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function ir(e,t,n,r){var i,o=er(e,t),l=e.display.view;if(!kt||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(0<r){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,n+=i}for(;Bt(e.doc,n)!=n;){if(o==(r<0?0:l.length-1))return null;n+=r*l[o-(r<0?1:0)].size,o+=r}return{index:o,lineN:n}}function or(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function lr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function sr(e,t){void 0===t&&(t=!0);for(var n,r,i=e.doc,o={},l=o.cursors=document.createDocumentFragment(),s=o.selection=document.createDocumentFragment(),a=0;a<i.sel.ranges.length;a++)!t&&a==i.sel.primIndex||((n=i.sel.ranges[a]).from().line>=e.display.viewTo||n.to().line<e.display.viewFrom||(((r=n.empty())||e.options.showCursorWhenSelecting)&&ar(e,n.head,l),r||function(i,e,t){var n=i.display,o=i.doc,l=document.createDocumentFragment(),r=bn(i.display),S=r.left,L=Math.max(n.sizerWidth,xn(i)-n.sizer.offsetLeft)-r.right,k=\"ltr\"==o.direction;function T(e,t,n,r){t<0&&(t=0),t=Math.round(t),r=Math.round(r),l.appendChild(M(\"div\",null,\"CodeMirror-selected\",\"position: absolute; left: \"+e+\"px;\\n top: \"+t+\"px; width: \"+(null==n?L-e:n)+\"px;\\n height: \"+(r-t)+\"px\"))}function s(n,g,m){var v,y,r=$e(o,n),b=r.text.length;function w(e,t){return zn(i,rt(n,e),\"div\",r,t)}function x(e,t,n){e=jn(i,r,null,e),t=\"ltr\"==t==(\"after\"==n)?\"left\":\"right\";return w(\"after\"==n?e.begin:e.end-(/\\s/.test(r.text.charAt(e.end-1))?2:1),t)[t]}var C=me(r,o.direction);return function(e,t,n,r){if(!e)return r(t,n,\"ltr\",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<n&&l.to>t||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?\"rtl\":\"ltr\",o),i=!0)}i||r(t,n,\"ltr\")}(C,g||0,null==m?b:m,function(e,t,n,r){var i,o,l,s,a=\"ltr\"==n,u=w(e,a?\"left\":\"right\"),c=w(t-1,a?\"right\":\"left\"),h=null==g&&0==e,d=null==m&&t==b,f=0==r,p=!C||r==C.length-1;c.top-u.top<=3?(i=(k?d:h)&&p,r=(k?h:d)&&f?S:(a?u:c).left,i=i?L:(a?c:u).right,T(r,u.top,i-r,u.bottom)):(n=a?(o=k&&h&&f?S:u.left,l=k?L:x(e,n,\"before\"),s=k?S:x(t,n,\"after\"),k&&d&&p?L:c.right):(o=k?x(e,n,\"before\"):S,l=!k&&h&&f?L:u.right,s=!k&&d&&p?S:c.left,k?x(t,n,\"after\"):L),T(o,u.top,l-o,u.bottom),u.bottom<c.top&&T(S,u.bottom,null,c.top),T(s,c.top,n-s,c.bottom)),(!v||ur(u,v)<0)&&(v=u),ur(c,v)<0&&(v=c),(!y||ur(u,y)<0)&&(y=u),ur(c,y)<0&&(y=c)}),{start:v,end:y}}var a=e.from(),n=e.to();a.line==n.line?s(a.line,a.ch,n.ch):(r=$e(o,a.line),e=$e(o,n.line),e=zt(r)==zt(e),r=s(a.line,a.ch,e?r.text.length+1:null).end,n=s(n.line,e?0:null,n.ch).start,e&&(r.top<n.top-2?(T(r.right,r.top,null,r.bottom),T(S,n.top,n.left,n.bottom)):T(r.right,r.top,n.left-r.right,r.bottom)),r.bottom<n.top&&T(S,r.bottom,null,n.top));t.appendChild(l)}(e,n,s)));return o}function ar(e,t,n){var r=Bn(e,t,\"div\",null,null,!e.options.singleCursorHeightPerLine),t=n.appendChild(M(\"div\",\" \",\"CodeMirror-cursor\"));t.style.left=r.left+\"px\",t.style.top=r.top+\"px\",t.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+\"px\",r.other&&((n=n.appendChild(M(\"div\",\" \",\"CodeMirror-cursor CodeMirror-secondarycursor\"))).style.display=\"\",n.style.left=r.other.left+\"px\",n.style.top=r.other.top+\"px\",n.style.height=.85*(r.other.bottom-r.other.top)+\"px\")}function ur(e,t){return e.top-t.top||e.left-t.left}function cr(e){var t,n;e.state.focused&&(t=e.display,clearInterval(t.blinker),n=!0,t.cursorDiv.style.visibility=\"\",0<e.options.cursorBlinkRate?t.blinker=setInterval(function(){e.hasFocus()||pr(e),t.cursorDiv.style.visibility=(n=!n)?\"\":\"hidden\"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility=\"hidden\"))}function hr(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||fr(e))}function dr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&pr(e))},100)}function fr(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),\"nocursor\"!=e.options.readOnly&&(e.state.focused||(xe(e,\"focus\",e,t),e.state.focused=!0,D(e.display.wrapper,\"CodeMirror-focused\"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),f&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),cr(e))}function pr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(xe(e,\"blur\",e,t),e.state.focused=!1,L(e.display.wrapper,\"CodeMirror-focused\")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function gr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i,o=t.view[r],l=e.options.lineWrapping,s=void 0,a=0;if(!o.hidden){w&&v<8?(s=(i=o.node.offsetTop+o.node.offsetHeight)-n,n=i):(s=(u=o.node.getBoundingClientRect()).bottom-u.top,!l&&o.text.firstChild&&(a=o.text.firstChild.getBoundingClientRect().right-u.left-1));var u=o.line.height-s;if((.005<u||u<-.005)&&(Qe(o.line,s),mr(o.line),o.rest))for(var c=0;c<o.rest.length;c++)mr(o.rest[c]);a>e.display.sizerWidth&&((a=Math.ceil(a/_n(e.display)))>e.display.maxLineLength&&(e.display.maxLineLength=a,e.display.maxLine=o.line,e.display.maxLineChanged=!0))}}}function mr(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],r=n.node.parentNode;r&&(n.height=r.offsetHeight)}}function vr(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop,r=Math.floor(r-vn(e)),i=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,o=et(t,r),r=et(t,i);return n&&n.ensure&&(i=n.ensure.from.line,n=n.ensure.to.line,i<o?r=et(t,Vt($e(t,o=i))+e.wrapper.clientHeight):Math.min(n,t.lastLine())>=r&&(o=et(t,Vt($e(t,n))-e.wrapper.clientHeight),r=n)),{from:o,to:Math.max(r,o+1)}}function yr(e,t){var n=e.display,r=Yn(e.display);t.top<0&&(t.top=0);var i=(e.curOp&&null!=e.curOp.scrollTop?e.curOp:n.scroller).scrollTop,o=Cn(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+yn(n),a=t.top<r,r=t.bottom>s-r;t.top<i?l.scrollTop=a?0:t.top:t.bottom>i+o&&((u=Math.min(t.top,(r?s:t.bottom)-o))!=i&&(l.scrollTop=u));var i=e.options.fixedGutter?0:n.gutters.offsetWidth,u=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-i,e=xn(e)-n.gutters.offsetWidth,n=t.right-t.left>e;return n&&(t.right=t.left+e),t.left<10?l.scrollLeft=0:t.left<u?l.scrollLeft=Math.max(0,t.left+i-(n?0:10)):t.right>e+u-3&&(l.scrollLeft=t.right+(n?0:10)-e),l}function br(e,t){null!=t&&(Cr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc:e.curOp).scrollTop+t)}function wr(e){Cr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function xr(e,t,n){null==t&&null==n||Cr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Cr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Sr(e,Gn(e,t.from),Gn(e,t.to),t.margin))}function Sr(e,t,n,r){r=yr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});xr(e,r.scrollLeft,r.scrollTop)}function Lr(e,t){Math.abs(e.doc.scrollTop-t)<2||(d||Kr(e,{top:t}),kr(e,t,!0),d&&Kr(e),zr(e,100))}function kr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),e.display.scroller.scrollTop==t&&!n||(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Tr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,Yr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Mr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+yn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+wn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}e=function(e,t,n){this.cm=n;var r=this.vert=M(\"div\",[M(\"div\",null,null,\"min-width: 1px\")],\"CodeMirror-vscrollbar\"),i=this.horiz=M(\"div\",[M(\"div\",null,null,\"height: 100%; min-height: 1px\")],\"CodeMirror-hscrollbar\");r.tabIndex=i.tabIndex=-1,e(r),e(i),ye(r,\"scroll\",function(){r.clientHeight&&t(r.scrollTop,\"vertical\")}),ye(i,\"scroll\",function(){i.clientWidth&&t(i.scrollLeft,\"horizontal\")}),this.checkedZeroWidth=!1,w&&v<8&&(this.horiz.style.minHeight=this.vert.style.minWidth=\"18px\")};e.prototype.update=function(e){var t,n=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;return r?(this.vert.style.display=\"block\",this.vert.style.bottom=n?i+\"px\":\"0\",t=e.viewHeight-(n?i:0),this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+t)+\"px\"):(this.vert.style.display=\"\",this.vert.firstChild.style.height=\"0\"),n?(this.horiz.style.display=\"block\",this.horiz.style.right=r?i+\"px\":\"0\",this.horiz.style.left=e.barLeft+\"px\",t=e.viewWidth-e.barLeft-(r?i:0),this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+t)+\"px\"):(this.horiz.style.display=\"\",this.horiz.firstChild.style.width=\"0\"),!this.checkedZeroWidth&&0<e.clientHeight&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?i:0,bottom:n?i:0}},e.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\"horiz\")},e.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\"vert\")},e.prototype.zeroWidthHack=function(){var e=g&&!l?\"12px\":\"18px\";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents=\"none\",this.disableHoriz=new I,this.disableVert=new I},e.prototype.enableZeroWidthBar=function(n,r,i){n.style.pointerEvents=\"auto\",r.set(1e3,function e(){var t=n.getBoundingClientRect();(\"vert\"==i?document.elementFromPoint(t.right-1,(t.top+t.bottom)/2):document.elementFromPoint((t.right+t.left)/2,t.bottom-1))!=n?n.style.pointerEvents=\"none\":r.set(1e3,e)})},e.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};r=function(){};function Nr(e,t){t=t||Mr(e);var n=e.display.barWidth,r=e.display.barHeight;Ar(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&gr(e),Ar(e,Mr(e)),n=e.display.barWidth,r=e.display.barHeight}function Ar(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+\"px\",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+\"px\",n.heightForcer.style.borderBottom=r.bottom+\"px solid transparent\",r.right&&r.bottom?(n.scrollbarFiller.style.display=\"block\",n.scrollbarFiller.style.height=r.bottom+\"px\",n.scrollbarFiller.style.width=r.right+\"px\"):n.scrollbarFiller.style.display=\"\",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display=\"block\",n.gutterFiller.style.height=r.bottom+\"px\",n.gutterFiller.style.width=t.gutterWidth+\"px\"):n.gutterFiller.style.display=\"\"}r.prototype.update=function(){return{bottom:0,right:0}},r.prototype.setScrollLeft=function(){},r.prototype.setScrollTop=function(){},r.prototype.clear=function(){};var Or={native:e,null:r};function Dr(n){n.display.scrollbars&&(n.display.scrollbars.clear(),n.display.scrollbars.addClass&&L(n.display.wrapper,n.display.scrollbars.addClass)),n.display.scrollbars=new Or[n.options.scrollbarStyle](function(e){n.display.wrapper.insertBefore(e,n.display.scrollbarFiller),ye(e,\"mousedown\",function(){n.state.focused&&setTimeout(function(){return n.display.input.focus()},0)}),e.setAttribute(\"cm-not-content\",\"true\")},function(e,t){(\"horizontal\"==t?Tr:Lr)(n,e)},n),n.display.scrollbars.addClass&&D(n.display.wrapper,n.display.scrollbars.addClass)}var Wr=0;function Hr(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Wr},e=e.curOp,nn?nn.ops.push(e):e.ownsGroup=nn={ops:[e],delayedCallbacks:[]}}function Fr(e){e=e.curOp;e&&rn(e,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(e){for(var t=e.ops,n=0;n<t.length;n++)!function(e){var t=e.cm,n=t.display;(function(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=wn(e)+\"px\",t.sizer.style.marginBottom=-t.nativeBarWidth+\"px\",t.sizer.style.borderRightWidth=wn(e)+\"px\",t.scrollbarsClipped=!0)})(t),e.updateMaxLine&&jt(t);e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new Gr(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}(t[n]);for(var r=0;r<t.length;r++)!function(e){e.updatedDisplay=e.mustUpdate&&Ur(e.cm,e.update)}(t[r]);for(var i=0;i<t.length;i++)!function(e){var t=e.cm,n=t.display;e.updatedDisplay&&gr(t);e.barMeasure=Mr(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Ln(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+wn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-xn(t)));(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}(t[i]);for(var o=0;o<t.length;o++)!function(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+\"px\",e.maxScrollLeft<t.doc.scrollLeft&&Tr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==O();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n);!e.updatedDisplay&&e.startHeight==t.doc.height||Nr(t,e.barMeasure);e.updatedDisplay&&Xr(t,e.barMeasure);e.selectionChanged&&cr(t);t.state.focused&&e.updateInput&&t.display.input.reset(e.typing);n&&hr(e.cm)}(t[o]);for(var l=0;l<t.length;l++)!function(e){var t=e.cm,n=t.display,r=t.doc;e.updatedDisplay&&Vr(t,e.update);null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null);null!=e.scrollTop&&kr(t,e.scrollTop,e.forceScroll);null!=e.scrollLeft&&Tr(t,e.scrollLeft,!0,!0);{var i;e.scrollToPos&&(i=function(e,t,n,r){null==r&&(r=0),e.options.lineWrapping||t!=n||(n=\"before\"==(t=t.ch?rt(t.line,\"before\"==t.sticky?t.ch-1:t.ch,\"after\"):t).sticky?rt(t.line,t.ch+1,\"before\"):t);for(var i=0;i<5;i++){var o,l=!1,s=Bn(e,t),a=n&&n!=t?Bn(e,n):s,u=yr(e,o={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-r,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+r}),s=e.doc.scrollTop,a=e.doc.scrollLeft;if(null!=u.scrollTop&&(Lr(e,u.scrollTop),1<Math.abs(e.doc.scrollTop-s)&&(l=!0)),null!=u.scrollLeft&&(Tr(e,u.scrollLeft),1<Math.abs(e.doc.scrollLeft-a)&&(l=!0)),!l)break}return o}(t,ct(r,e.scrollToPos.from),ct(r,e.scrollToPos.to),e.scrollToPos.margin),function(e,t){var n,r,i;Ce(e,\"scrollCursorIntoView\")||(r=(n=e.display).sizer.getBoundingClientRect(),i=null,t.top+r.top<0?i=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null==i||u||(t=M(\"div\",\"\",null,\"position: absolute;\\n top: \"+(t.top-n.viewOffset-vn(e.display))+\"px;\\n height: \"+(t.bottom-t.top+wn(e)+n.barHeight)+\"px;\\n left: \"+t.left+\"px; width: \"+Math.max(2,t.right-t.left)+\"px;\"),e.display.lineSpace.appendChild(t),t.scrollIntoView(i),e.display.lineSpace.removeChild(t)))}(t,i))}var o=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(o)for(var s=0;s<o.length;++s)o[s].lines.length||xe(o[s],\"hide\");if(l)for(var a=0;a<l.length;++a)l[a].lines.length&&xe(l[a],\"unhide\");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop);e.changeObjs&&xe(t,\"changes\",t,e.changeObjs);e.update&&e.update.finish()}(t[l])}(e)})}function Er(e,t){if(e.curOp)return t();Hr(e);try{return t()}finally{Fr(e)}}function Pr(e,t){return function(){if(e.curOp)return t.apply(e,arguments);Hr(e);try{return t.apply(e,arguments)}finally{Fr(e)}}}function Ir(e){return function(){if(this.curOp)return e.apply(this,arguments);Hr(this);try{return e.apply(this,arguments)}finally{Fr(this)}}}function Rr(t){return function(){var e=this.cm;if(!e||e.curOp)return t.apply(this,arguments);Hr(e);try{return t.apply(this,arguments)}finally{Fr(e)}}}function zr(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,F(Br,e))}function Br(l){var s,a,u,c=l.doc;c.highlightFrontier>=l.display.viewTo||(s=+new Date+l.options.workTime,a=mt(l,c.highlightFrontier),u=[],c.iter(a.line,Math.min(c.first+c.size,l.display.viewTo+500),function(e){if(a.line>=l.display.viewFrom){var t=e.styles,n=e.text.length>l.options.maxHighlightLength?je(c.mode,a.state):null,r=pt(l,e,a,!0);n&&(a.state=n),e.styles=r.styles;n=e.styleClasses,r=r.classes;r?e.styleClasses=r:n&&(e.styleClasses=null);for(var i=!t||t.length!=e.styles.length||n!=r&&(!n||!r||n.bgClass!=r.bgClass||n.textClass!=r.textClass),o=0;!i&&o<t.length;++o)i=t[o]!=e.styles[o];i&&u.push(a.line),e.stateAfter=a.save(),a.nextLine()}else e.text.length<=l.options.maxHighlightLength&&vt(l,e.text,a),e.stateAfter=a.line%5==0?a.save():null,a.nextLine();if(+new Date>s)return zr(l,l.options.workDelay),!0}),c.highlightFrontier=a.line,c.modeFrontier=Math.max(c.modeFrontier,a.line),u.length&&Er(l,function(){for(var e=0;e<u.length;e++)nr(l,u[e],\"text\")}))}var Gr=function(e,t,n){var r=e.display;this.viewport=t,this.visible=vr(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=xn(e),this.force=n,this.dims=$n(e),this.events=[]};function Ur(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return rr(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==or(e))return!1;_r(e)&&(rr(e),t.dims=$n(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(r.first,n.viewFrom)),n.viewTo>l&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),kt&&(o=Bt(e.doc,o),l=Gt(e.doc,l));var s=o!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;r=o,i=l,0==(l=(o=e).display).view.length||r>=l.viewTo||i<=l.viewFrom?(l.view=tn(o,r,i),l.viewFrom=r):(l.viewFrom>r?l.view=tn(o,r,l.viewFrom).concat(l.view):l.viewFrom<r&&(l.view=l.view.slice(er(o,r))),l.viewFrom=r,l.viewTo<i?l.view=l.view.concat(tn(o,l.viewTo,i)):l.viewTo>i&&(l.view=l.view.slice(0,er(o,i)))),l.viewTo=i,n.viewOffset=Vt($e(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+\"px\";o=or(e);if(!s&&0==o&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;l=function(e){if(e.hasFocus())return null;var t=O();if(!t||!A(e.display.lineDiv,t))return null;var n={activeElt:t};return!window.getSelection||(t=window.getSelection()).anchorNode&&t.extend&&A(e.display.lineDiv,t.anchorNode)&&(n.anchorNode=t.anchorNode,n.anchorOffset=t.anchorOffset,n.focusNode=t.focusNode,n.focusOffset=t.focusOffset),n}(e);return 4<o&&(n.lineDiv.style.display=\"none\"),function(n,e,t){var r=n.display,i=n.options.lineNumbers,o=r.lineDiv,l=o.firstChild;function s(e){var t=e.nextSibling;return f&&g&&n.display.currentWheelTarget==e?e.style.display=\"none\":e.parentNode.removeChild(e),t}for(var a=r.view,u=r.viewFrom,c=0;c<a.length;c++){var h=a[c];if(!h.hidden)if(h.node&&h.node.parentNode==o){for(;l!=h.node;)l=s(l);var d=i&&null!=e&&e<=u&&h.lineNumber;h.changes&&(-1<R(h.changes,\"gutter\")&&(d=!1),an(n,h,u,t)),d&&(k(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(nt(n.options,u)))),l=h.node.nextSibling}else{d=function(e,t,n,r){var i=cn(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),hn(e,t),dn(e,t,n,r),fn(e,t,r),t.node}(n,h,u,t);o.insertBefore(d,l)}u+=h.size}for(;l;)l=s(l)}(e,n.updateLineNumbers,t.dims),4<o&&(n.lineDiv.style.display=\"\"),n.renderedView=n.view,(i=l)&&i.activeElt&&i.activeElt!=O()&&(i.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(i.activeElt.nodeName)&&i.anchorNode&&A(document.body,i.anchorNode)&&A(document.body,i.focusNode)&&(o=window.getSelection(),(l=document.createRange()).setEnd(i.anchorNode,i.anchorOffset),l.collapse(!1),o.removeAllRanges(),o.addRange(l),o.extend(i.focusNode,i.focusOffset))),k(n.cursorDiv),k(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,zr(e,400)),!(n.updateLineNumbers=null)}function Vr(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=xn(e))r&&(t.visible=vr(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+yn(e.display)-Cn(e),n.top)}),t.visible=vr(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Ur(e,t))break;gr(e);var i=Mr(e);lr(e),Nr(e,i),Xr(e,i),t.force=!1}t.signal(e,\"update\",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,\"viewportChange\",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Kr(e,t){var n=new Gr(e,t);Ur(e,n)&&(gr(e),Vr(e,n),t=Mr(e),lr(e),Nr(e,t),Xr(e,t),n.finish())}function jr(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+\"px\"}function Xr(e,t){e.display.sizer.style.minHeight=t.docHeight+\"px\",e.display.heightForcer.style.top=t.docHeight+\"px\",e.display.gutters.style.height=t.docHeight+e.display.barHeight+wn(e)+\"px\"}function Yr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=qn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+\"px\",l=0;l<n.length;l++)if(!n[l].hidden){e.options.fixedGutter&&(n[l].gutter&&(n[l].gutter.style.left=o),n[l].gutterBackground&&(n[l].gutterBackground.style.left=o));var s=n[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+\"px\")}}function _r(e){if(e.options.lineNumbers){var t=e.doc,n=nt(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var i=r.measure.appendChild(M(\"div\",[M(\"div\",n)],\"CodeMirror-linenumber CodeMirror-gutter-elt\")),t=i.firstChild.offsetWidth,i=i.offsetWidth-t;return r.lineGutter.style.width=\"\",r.lineNumInnerWidth=Math.max(t,r.lineGutter.offsetWidth-i)+1,r.lineNumWidth=r.lineNumInnerWidth+i,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+\"px\",jr(e.display),1}}}function $r(e,t){for(var n=[],r=!1,i=0;i<e.length;i++){var o=e[i],l=null;if(\"string\"!=typeof o&&(l=o.style,o=o.className),\"CodeMirror-linenumbers\"==o){if(!t)continue;r=!0}n.push({className:o,style:l})}return t&&!r&&n.push({className:\"CodeMirror-linenumbers\",style:null}),n}function qr(e){var t=e.gutters,n=e.gutterSpecs;k(t),e.lineGutter=null;for(var r=0;r<n.length;++r){var i=n[r],o=i.className,l=i.style,i=t.appendChild(M(\"div\",null,\"CodeMirror-gutter \"+o));l&&(i.style.cssText=l),\"CodeMirror-linenumbers\"==o&&((e.lineGutter=i).style.width=(e.lineNumWidth||1)+\"px\")}t.style.display=n.length?\"\":\"none\",jr(e)}function Zr(e){qr(e.display),tr(e),Yr(e)}function Qr(e,t,n,r){var i=this;this.input=n,i.scrollbarFiller=M(\"div\",null,\"CodeMirror-scrollbar-filler\"),i.scrollbarFiller.setAttribute(\"cm-not-content\",\"true\"),i.gutterFiller=M(\"div\",null,\"CodeMirror-gutter-filler\"),i.gutterFiller.setAttribute(\"cm-not-content\",\"true\"),i.lineDiv=N(\"div\",null,\"CodeMirror-code\"),i.selectionDiv=M(\"div\",null,null,\"position: relative; z-index: 1\"),i.cursorDiv=M(\"div\",null,\"CodeMirror-cursors\"),i.measure=M(\"div\",null,\"CodeMirror-measure\"),i.lineMeasure=M(\"div\",null,\"CodeMirror-measure\"),i.lineSpace=N(\"div\",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,\"position: relative; outline: none\");var o=N(\"div\",[i.lineSpace],\"CodeMirror-lines\");i.mover=M(\"div\",[o],null,\"position: relative\"),i.sizer=M(\"div\",[i.mover],\"CodeMirror-sizer\"),i.sizerWidth=null,i.heightForcer=M(\"div\",null,null,\"position: absolute; height: \"+z+\"px; width: 1px;\"),i.gutters=M(\"div\",null,\"CodeMirror-gutters\"),i.lineGutter=null,i.scroller=M(\"div\",[i.sizer,i.heightForcer,i.gutters],\"CodeMirror-scroll\"),i.scroller.setAttribute(\"tabIndex\",\"-1\"),i.wrapper=M(\"div\",[i.scrollbarFiller,i.gutterFiller,i.scroller],\"CodeMirror\"),w&&v<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),f||d&&h||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=$r(r.gutters,r.lineNumbers),qr(i),n.init(i)}Gr.prototype.signal=function(e,t){Le(e,t)&&this.events.push(arguments)},Gr.prototype.finish=function(){for(var e=0;e<this.events.length;e++)xe.apply(null,this.events[e])};var Jr=0,ei=null;function ti(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function ni(e){e=ti(e);return e.x*=ei,e.y*=ei,e}function ri(e,t){var n=ti(t),r=n.x,i=n.y,o=e.display,l=o.scroller,s=l.scrollWidth>l.clientWidth,a=l.scrollHeight>l.clientHeight;if(r&&s||i&&a){if(i&&g&&f)e:for(var u=t.target,c=o.view;u!=l;u=u.parentNode)for(var h=0;h<c.length;h++)if(c[h].node==u){e.display.currentWheelTarget=u;break e}if(r&&!d&&!p&&null!=ei)return i&&a&&Lr(e,Math.max(0,l.scrollTop+i*ei)),Tr(e,Math.max(0,l.scrollLeft+r*ei)),(!i||i&&a)&&Te(t),void(o.wheelStartX=null);i&&null!=ei&&(n=i*ei,a=(s=e.doc.scrollTop)+o.wrapper.clientHeight,n<0?s=Math.max(0,s+n-50):a=Math.min(e.doc.height,a+n+50),Kr(e,{top:s,bottom:a})),Jr<20&&(null==o.wheelStartX?(o.wheelStartX=l.scrollLeft,o.wheelStartY=l.scrollTop,o.wheelDX=r,o.wheelDY=i,setTimeout(function(){var e,t;null!=o.wheelStartX&&(t=l.scrollLeft-o.wheelStartX,t=(e=l.scrollTop-o.wheelStartY)&&o.wheelDY&&e/o.wheelDY||t&&o.wheelDX&&t/o.wheelDX,o.wheelStartX=o.wheelStartY=null,t&&(ei=(ei*Jr+t)/(Jr+1),++Jr))},200)):(o.wheelDX+=r,o.wheelDY+=i))}}w?ei=-.53:d?ei=15:o?ei=-.7:c&&(ei=-1/3);var ii=function(e,t){this.ranges=e,this.primIndex=t};ii.prototype.primary=function(){return this.ranges[this.primIndex]},ii.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!ot(n.anchor,r.anchor)||!ot(n.head,r.head))return!1}return!0},ii.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new oi(lt(this.ranges[t].anchor),lt(this.ranges[t].head));return new ii(e,this.primIndex)},ii.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},ii.prototype.contains=function(e,t){t=t||e;for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(0<=it(t,r.from())&&it(e,r.to())<=0)return n}return-1};var oi=function(e,t){this.anchor=e,this.head=t};function li(e,t,n){var r=e&&e.options.selectionsMayTouch,e=t[n];t.sort(function(e,t){return it(e.from(),t.from())}),n=R(t,e);for(var i=1;i<t.length;i++){var o,l=t[i],s=t[i-1],a=it(s.to(),l.from());(r&&!l.empty()?0<a:0<=a)&&(o=at(s.from(),l.from()),a=st(s.to(),l.to()),s=s.empty()?l.from()==l.head:s.from()==s.head,i<=n&&--n,t.splice(--i,2,new oi(s?a:o,s?o:a)))}return new ii(t,n)}function si(e,t){return new ii([new oi(e,t||e)],0)}function ai(e){return e.text?rt(e.from.line+e.text.length-1,Y(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function ui(e,t){if(it(e,t.from)<0)return e;if(it(e,t.to)<=0)return ai(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=ai(t).ch-t.to.ch),rt(n,r)}function ci(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new oi(ui(i.anchor,t),ui(i.head,t)))}return li(e.cm,n,e.sel.primIndex)}function hi(e,t,n){return e.line==t.line?rt(n.line,e.ch-t.ch+n.ch):rt(n.line+(e.line-t.line),e.ch)}function di(e){e.doc.mode=Ue(e.options,e.doc.modeOption),fi(e)}function fi(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,zr(e,100),e.state.modeGen++,e.curOp&&tr(e)}function pi(e,t){return 0==t.from.ch&&0==t.to.ch&&\"\"==Y(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function gi(e,o,t,l){function i(e){return t?t[e]:null}function n(e,t,n){var r,i;r=t,i=n,t=l,(n=e).text=r,n.stateAfter&&(n.stateAfter=null),n.styles&&(n.styles=null),null!=n.order&&(n.order=null),Ot(n),Dt(n,i),(t=t?t(n):1)!=n.height&&Qe(n,t),ln(e,\"change\",e,o)}function r(e,t){for(var n=[],r=e;r<t;++r)n.push(new Xt(c[r],i(r),l));return n}var s,a=o.from,u=o.to,c=o.text,h=$e(e,a.line),d=$e(e,u.line),f=Y(c),p=i(c.length-1),g=u.line-a.line;o.full?(e.insert(0,r(0,c.length)),e.remove(c.length,e.size-c.length)):pi(e,o)?(s=r(0,c.length-1),n(d,d.text,p),g&&e.remove(a.line,g),s.length&&e.insert(a.line,s)):h==d?1==c.length?n(h,h.text.slice(0,a.ch)+f+h.text.slice(u.ch),p):((s=r(1,c.length-1)).push(new Xt(f+h.text.slice(u.ch),p,l)),n(h,h.text.slice(0,a.ch)+c[0],i(0)),e.insert(a.line+1,s)):1==c.length?(n(h,h.text.slice(0,a.ch)+c[0]+d.text.slice(u.ch),i(0)),e.remove(a.line+1,g)):(n(h,h.text.slice(0,a.ch)+c[0],i(0)),n(d,f+d.text.slice(u.ch),p),p=r(1,c.length-1),1<g&&e.remove(a.line+1,g-1),e.insert(a.line+1,p)),ln(e,\"change\",e,o)}function mi(e,s,a){!function e(t,n,r){if(t.linked)for(var i=0;i<t.linked.length;++i){var o,l=t.linked[i];l.doc!=n&&(o=r&&l.sharedHist,a&&!o||(s(l.doc,o),e(l.doc,t,o)))}}(e,null,!0)}function vi(e,t){if(t.cm)throw new Error(\"This document is already in use.\");Qn((e.doc=t).cm=e),di(e),yi(e),e.options.lineWrapping||jt(e),e.options.mode=t.modeOption,tr(e)}function yi(e){(\"rtl\"==e.doc.direction?D:L)(e.display.lineDiv,\"CodeMirror-rtl\")}function bi(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function wi(e,t){var n={from:lt(t.from),to:ai(t),text:qe(e,t.from,t.to)};return ki(e,n,t.from.line,t.to.line+1),mi(e,function(e){return ki(e,n,t.from.line,t.to.line+1),0},!0),n}function xi(e){for(;e.length;){if(!Y(e).ranges)break;e.pop()}}function Ci(e,t,n,r){var i=e.history;i.undone.length=0;var o,l,s=+new Date;if((i.lastOp==r||i.lastOrigin==t.origin&&t.origin&&(\"+\"==t.origin.charAt(0)&&i.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||\"*\"==t.origin.charAt(0)))&&(o=(a=i).lastOp==r?(xi(a.done),Y(a.done)):a.done.length&&!Y(a.done).ranges?Y(a.done):1<a.done.length&&!a.done[a.done.length-2].ranges?(a.done.pop(),Y(a.done)):void 0))l=Y(o.changes),0==it(t.from,t.to)&&0==it(t.from,l.to)?l.to=ai(t):o.changes.push(wi(e,t));else{var a=Y(i.done);for(a&&a.ranges||Li(e.sel,i.done),o={changes:[wi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,l||xe(e,\"historyAdded\")}function Si(e,t,n,r){var i,o,l,s=e.history,a=r&&r.origin;n==s.lastSelOp||a&&s.lastSelOrigin==a&&(s.lastModTime==s.lastSelTime&&s.lastOrigin==a||(i=e,o=a,l=Y(s.done),e=t,\"*\"==(o=o.charAt(0))||\"+\"==o&&l.ranges.length==e.ranges.length&&l.somethingSelected()==e.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)))?s.done[s.done.length-1]=t:Li(t,s.done),s.lastSelTime=+new Date,s.lastSelOrigin=a,s.lastSelOp=n,r&&!1!==r.clearRedo&&xi(s.undone)}function Li(e,t){var n=Y(t);n&&n.ranges&&n.equals(e)||t.push(e)}function ki(t,n,e,r){var i=n[\"spans_\"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((i=i||(n[\"spans_\"+t.id]={}))[o]=e.markedSpans),++o})}function Ti(e,t){var n=t[\"spans_\"+e.id];if(!n)return null;for(var r=[],i=0;i<t.text.length;++i)r.push(function(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t=t||e.slice(0,n):t&&t.push(e[n]);return t?t.length?t:null:e}(n[i]));return r}function Mi(e,t){var n=Ti(e,t),r=Nt(e,t);if(!n)return r;if(!r)return n;for(var i=0;i<n.length;++i){var o=n[i],l=r[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(n[i]=l)}return n}function Ni(e,t,n){for(var r=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)r.push(n?ii.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];r.push({changes:s});for(var a=0;a<l.length;++a){var u,c=l[a];if(s.push({from:c.from,to:c.to,text:c.text}),t)for(var h in c)(u=h.match(/^spans_(\\d+)$/))&&-1<R(t,Number(u[1]))&&(Y(s)[h]=c[h],delete c[h])}}}return r}function Ai(e,t,n,r){if(r){r=e.anchor;return n&&((e=it(t,r)<0)!=it(n,r)<0?(r=t,t=n):e!=it(t,n)<0&&(t=n)),new oi(r,t)}return new oi(n||t,t)}function Oi(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Ei(e,new ii([Ai(e.sel.primary(),t,n,i)],0),r)}function Di(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)r[o]=Ai(e.sel.ranges[o],t[o],null,i);Ei(e,li(e.cm,r,e.sel.primIndex),n)}function Wi(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,Ei(e,li(e.cm,i,e.sel.primIndex),r)}function Hi(e,t,n,r){Ei(e,si(t,n),r)}function Fi(e,t,n){var r=e.history.done,i=Y(r);i&&i.ranges?Pi(e,r[r.length-1]=t,n):Ei(e,t,n)}function Ei(e,t,n){Pi(e,t,n),Si(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Pi(e,t,n){var r,i;(Le(e,\"beforeSelectionChange\")||e.cm&&Le(e.cm,\"beforeSelectionChange\"))&&(r=e,i=n,i={ranges:(o=t).ranges,update:function(e){this.ranges=[];for(var t=0;t<e.length;t++)this.ranges[t]=new oi(ct(r,e[t].anchor),ct(r,e[t].head))},origin:i&&i.origin},xe(r,\"beforeSelectionChange\",r,i),r.cm&&xe(r.cm,\"beforeSelectionChange\",r.cm,i),t=i.ranges!=o.ranges?li(r.cm,i.ranges,i.ranges.length-1):o);var o=n&&n.bias||(it(t.primary().head,e.sel.primary().head)<0?-1:1);Ii(e,zi(e,t,o,!0)),n&&!1===n.scroll||!e.cm||wr(e.cm)}function Ii(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,Se(e.cm)),ln(e,\"cursorActivity\",e))}function Ri(e){Ii(e,zi(e,e.sel,null,!1))}function zi(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Gi(e,l.anchor,s&&s.anchor,n,r),s=Gi(e,l.head,s&&s.head,n,r);!i&&a==l.anchor&&s==l.head||((i=i||t.ranges.slice(0,o))[o]=new oi(a,s))}return i?li(e.cm,i,t.primIndex):t}function Bi(e,t,n,r,i){var o=$e(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker,u=\"selectLeft\"in a?!a.selectLeft:a.inclusiveLeft,c=\"selectRight\"in a?!a.selectRight:a.inclusiveRight;if((null==s.from||(u?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(c?s.to>=t.ch:s.to>t.ch))){if(i&&(xe(a,\"beforeCursorEnter\"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(a.atomic){if(n){var h=a.find(r<0?1:-1),s=void 0;if((r<0?c:u)&&(h=Ui(e,h,-r,h&&h.line==t.line?o:null)),h&&h.line==t.line&&(s=it(h,n))&&(r<0?s<0:0<s))return Bi(e,h,t,r,i)}a=a.find(r<0?-1:1);return(r<0?u:c)&&(a=Ui(e,a,r,a.line==t.line?o:null)),a?Bi(e,a,t,r,i):null}}}return t}function Gi(e,t,n,r,i){r=r||1,r=Bi(e,t,n,r,i)||!i&&Bi(e,t,n,r,!0)||Bi(e,t,n,-r,i)||!i&&Bi(e,t,n,-r,!0);return r||(e.cantEdit=!0,rt(e.first,0))}function Ui(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?ct(e,rt(t.line-1)):null:0<n&&t.ch==(r||$e(e,t.line)).text.length?t.line<e.first+e.size-1?rt(t.line+1,0):null:new rt(t.line,t.ch+n)}function Vi(e){e.setSelection(rt(e.firstLine(),0),rt(e.lastLine()),G)}function Ki(i,e,t){var o={canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return o.canceled=!0}};return t&&(o.update=function(e,t,n,r){e&&(o.from=ct(i,e)),t&&(o.to=ct(i,t)),n&&(o.text=n),void 0!==r&&(o.origin=r)}),xe(i,\"beforeChange\",i,o),i.cm&&xe(i.cm,\"beforeChange\",i.cm,o),o.canceled?(i.cm&&(i.cm.curOp.updateInput=2),null):{from:o.from,to:o.to,text:o.text,origin:o.origin}}function ji(e,t,n){if(e.cm){if(!e.cm.curOp)return Pr(e.cm,ji)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Le(e,\"beforeChange\")||e.cm&&Le(e.cm,\"beforeChange\"))||(t=Ki(e,t,!0))){var r=Lt&&!n&&function(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=R(r,n)||(r=r||[]).push(n)}}),!r)return null;for(var i=[{from:t,to:n}],o=0;o<r.length;++o)for(var l=r[o],s=l.find(0),a=0;a<i.length;++a){var u,c,h,d=i[a];it(d.to,s.from)<0||0<it(d.from,s.to)||(u=[a,1],c=it(d.from,s.from),h=it(d.to,s.to),(c<0||!l.inclusiveLeft&&!c)&&u.push({from:d.from,to:s.from}),(0<h||!l.inclusiveRight&&!h)&&u.push({from:s.to,to:d.to}),i.splice.apply(i,u),a+=u.length-3)}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;0<=i;--i)Xi(e,{from:r[i].from,to:r[i].to,text:i?[\"\"]:t.text,origin:t.origin});else Xi(e,t)}}function Xi(e,n){var t,r;1==n.text.length&&\"\"==n.text[0]&&0==it(n.from,n.to)||(t=ci(e,n),Ci(e,n,t,e.cm?e.cm.curOp.id:NaN),$i(e,n,t,Nt(e,n)),r=[],mi(e,function(e,t){t||-1!=R(r,e.history)||(Ji(e.history,n),r.push(e.history)),$i(e,n,null,Nt(e,n))}))}function Yi(i,o,e){var t=i.cm&&i.cm.state.suppressEdits;if(!t||e){for(var l,n=i.history,r=i.sel,s=\"undo\"==o?n.done:n.undone,a=\"undo\"==o?n.undone:n.done,u=0;u<s.length&&(l=s[u],e?!l.ranges||l.equals(i.sel):l.ranges);u++);if(u!=s.length){for(n.lastOrigin=n.lastSelOrigin=null;;){if(!(l=s.pop()).ranges){if(t)return void s.push(l);break}if(Li(l,a),e&&!l.equals(i.sel))return void Ei(i,l,{clearRedo:!1});r=l}var c=[];Li(r,a),a.push({changes:c,generation:n.generation}),n.generation=l.generation||++n.maxGeneration;for(var h=Le(i,\"beforeChange\")||i.cm&&Le(i.cm,\"beforeChange\"),d=l.changes.length-1;0<=d;--d){var f=function(e){var n=l.changes[e];if(n.origin=o,h&&!Ki(i,n,!1))return s.length=0,{};c.push(wi(i,n));var t=e?ci(i,n):Y(s);$i(i,n,t,Mi(i,n)),!e&&i.cm&&i.cm.scrollIntoView({from:n.from,to:ai(n)});var r=[];mi(i,function(e,t){t||-1!=R(r,e.history)||(Ji(e.history,n),r.push(e.history)),$i(e,n,null,Mi(e,n))})}(d);if(f)return f.v}}}}function _i(e,t){if(0!=t&&(e.first+=t,e.sel=new ii(_(e.sel.ranges,function(e){return new oi(rt(e.anchor.line+t,e.anchor.ch),rt(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){tr(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)nr(e.cm,r,\"gutter\")}}function $i(e,t,n,r){if(e.cm&&!e.cm.curOp)return Pr(e.cm,$i)(e,t,n,r);var i;t.to.line<e.first?_i(e,t.text.length-1-(t.to.line-t.from.line)):t.from.line>e.lastLine()||(t.from.line<e.first&&(_i(e,i=t.text.length-1-(e.first-t.from.line)),t={from:rt(e.first,0),to:rt(t.to.line+i,t.to.ch),text:[Y(t.text)],origin:t.origin}),i=e.lastLine(),t.to.line>i&&(t={from:t.from,to:rt(i,$e(e,i).text.length),text:[t.text[0]],origin:t.origin}),t.removed=qe(e,t.from,t.to),n=n||ci(e,t),e.cm?function(e,t,n){var r=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=Je(zt($e(r,o.line))),r.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0}));-1<r.sel.contains(t.from,t.to)&&Se(e);gi(r,t,n,Zn(e)),e.options.lineWrapping||(r.iter(a,o.line+t.text.length,function(e){var t=Kt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var n=e.first,r=t-1;n<r;r--){var i=$e(e,r).stateAfter;if(i&&(!(i instanceof dt)||r+i.lookAhead<t)){n=r+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,n)}})(r,o.line),zr(e,400);a=t.text.length-(l.line-o.line)-1;t.full?tr(e):o.line!=l.line||1!=t.text.length||pi(e.doc,t)?tr(e,o.line,l.line+1,a):nr(e,o.line,\"text\");r=Le(e,\"changes\"),a=Le(e,\"change\");(a||r)&&(t={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin},a&&ln(e,\"change\",e,t),r&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(t));e.display.selForContextMenu=null}(e.cm,t,r):gi(e,t,r),Pi(e,n,G),e.cantEdit&&Gi(e,rt(e.firstLine(),0))&&(e.cantEdit=!1))}function qi(e,t,n,r,i){var o;it(r=r||n,n)<0&&(n=(o=[r,n])[0],r=o[1]),\"string\"==typeof t&&(t=e.splitLines(t)),ji(e,{from:n,to:r,text:t,origin:i})}function Zi(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function Qi(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var s=0;s<o.ranges.length;s++)Zi(o.ranges[s].anchor,t,n,r),Zi(o.ranges[s].head,t,n,r)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(n<u.from.line)u.from=rt(u.from.line+r,u.from.ch),u.to=rt(u.to.line+r,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function Ji(e,t){var n=t.from.line,r=t.to.line,t=t.text.length-(r-n)-1;Qi(e.done,n,r,t),Qi(e.undone,n,r,t)}function eo(e,t,n,r){var i=t,o=t;return\"number\"==typeof t?o=$e(e,ut(e,t)):i=Je(t),null==i?null:(r(o,i)&&e.cm&&nr(e.cm,i,n),o)}function to(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function no(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}oi.prototype.from=function(){return at(this.anchor,this.head)},oi.prototype.to=function(){return st(this.anchor,this.head)},oi.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},to.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n,r=e,i=e+t;r<i;++r){var o=this.lines[r];this.height-=o.height,(n=o).parent=null,Ot(n),ln(o,\"delete\")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}},no.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n,r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e),s=i.height;if(i.removeInner(e,l),this.height-=s-i.height,o==l&&(this.children.splice(r--,1),i.parent=null),0==(t-=l))break;e=0}else e-=o}this.size-t<25&&(1<this.children.length||!(this.children[0]instanceof to))&&(n=[],this.collapse(n),this.children=[new to(n)],this.children[0].parent=this)},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,n),i.lines&&50<i.lines.length){for(var l=i.lines.length%25+25,s=l;s<i.lines.length;){var a=new to(i.lines.slice(s,s+=25));i.height-=a.height,this.children.splice(++r,0,a),a.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t,n=new no(e.children.splice(e.children.length-5,5))}while(e.parent?(e.size-=n.size,e.height-=n.height,t=R(e.parent.children,e),e.parent.children.splice(t+1,0,n)):(((t=new no(e.children)).parent=e).children=[t,n],e=t),n.parent=e.parent,10<e.children.length);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,n))return!0;if(0==(t-=l))break;e=0}else e-=o}}};function ro(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t}function io(e,t,n){Vt(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&br(e,n)}ro.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=Je(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=gn(this);Qe(n,Math.max(0,n.height-o)),e&&(Er(e,function(){io(e,n,-o),nr(e,r,\"widget\")}),ln(e,\"lineWidgetCleared\",e,this,r))}},ro.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,r=this.line;this.height=null;var i=gn(this)-t;i&&(Ut(this.doc,r)||Qe(r,r.height+i),n&&Er(n,function(){n.curOp.forceUpdate=!0,io(n,r,i),ln(n,\"lineWidgetChanged\",n,e,Je(r))}))},ke(ro);var oo=0,lo=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++oo};function so(t,n,r,e,i){if(e&&e.shared)return function(e,n,r,i,o){(i=E(i)).shared=!1;var l=[so(e,n,r,i,o)],s=l[0],a=i.widgetNode;return mi(e,function(e){a&&(i.widgetNode=a.cloneNode(!0)),l.push(so(e,ct(e,n),ct(e,r),i,o));for(var t=0;t<e.linked.length;++t)if(e.linked[t].isParent)return;s=Y(l)}),new ao(l,s)}(t,n,r,e,i);if(t.cm&&!t.cm.curOp)return Pr(t.cm,so)(t,n,r,e,i);var o=new lo(t,i),i=it(n,r);if(e&&E(e,o,!1),0<i||0==i&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=N(\"span\",[o.replacedWith],\"CodeMirror-widget\"),e.handleMouseEvents||o.widgetNode.setAttribute(\"cm-ignore-events\",\"true\"),e.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Rt(t,n.line,n,r,o)||n.line!=r.line&&Rt(t,r.line,n,r,o))throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");kt=!0}o.addToHistory&&Ci(t,{from:n,to:r,origin:\"markText\"},t.sel,NaN);var l,s=n.line,a=t.cm;if(t.iter(s,r.line+1,function(e){var t;a&&o.collapsed&&!a.options.lineWrapping&&zt(e)==a.display.maxLine&&(l=!0),o.collapsed&&s!=n.line&&Qe(e,0),t=e,e=new Tt(o,s==n.line?n.ch:null,s==r.line?r.ch:null),t.markedSpans=t.markedSpans?t.markedSpans.concat([e]):[e],e.marker.attachLine(t),++s}),o.collapsed&&t.iter(n.line,r.line+1,function(e){Ut(t,e)&&Qe(e,0)}),o.clearOnEnter&&ye(o,\"beforeCursorEnter\",function(){return o.clear()}),o.readOnly&&(Lt=!0,(t.history.done.length||t.history.undone.length)&&t.clearHistory()),o.collapsed&&(o.id=++oo,o.atomic=!0),a){if(l&&(a.curOp.updateMaxLine=!0),o.collapsed)tr(a,n.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var u=n.line;u<=r.line;u++)nr(a,u,\"text\");o.atomic&&Ri(a.doc),ln(a,\"markerAdded\",a,o)}return o}lo.prototype.clear=function(){if(!this.explicitlyCleared){var e,t=this.doc.cm,n=t&&!t.curOp;n&&Hr(t),!Le(this,\"clear\")||(e=this.find())&&ln(this,\"clear\",e.from,e.to);for(var r=null,i=null,o=0;o<this.lines.length;++o){var l=this.lines[o],s=Mt(l.markedSpans,this);t&&!this.collapsed?nr(t,Je(l),\"text\"):t&&(null!=s.to&&(i=Je(l)),null!=s.from&&(r=Je(l))),l.markedSpans=function(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n=n||[]).push(e[r]);return n}(l.markedSpans,s),null==s.from&&this.collapsed&&!Ut(this.doc,l)&&t&&Qe(l,Yn(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var a=0;a<this.lines.length;++a){var u=zt(this.lines[a]),c=Kt(u);c>t.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=c,t.display.maxLineChanged=!0)}null!=r&&t&&this.collapsed&&tr(t,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ri(t.doc)),t&&ln(t,\"markerCleared\",t,this,r,i),n&&Fr(t),this.parent&&this.parent.clear()}},lo.prototype.find=function(e,t){var n,r;null==e&&\"bookmark\"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],l=Mt(o.markedSpans,this);if(null!=l.from&&(n=rt(t?o:Je(o),l.from),-1==e))return n;if(null!=l.to&&(r=rt(t?o:Je(o),l.to),1==e))return r}return n&&{from:n,to:r}},lo.prototype.changed=function(){var n=this,r=this.find(-1,!0),i=this,o=this.doc.cm;r&&o&&Er(o,function(){var e=r.line,t=Je(r.line),t=kn(o,t);t&&(Dn(t),o.curOp.selectionChanged=o.curOp.forceUpdate=!0),o.curOp.updateMaxLine=!0,Ut(i.doc,e)||null==i.height||(t=i.height,i.height=null,(t=gn(i)-t)&&Qe(e,e.height+t)),ln(o,\"markerChanged\",o,n)})},lo.prototype.attachLine=function(e){var t;!this.lines.length&&this.doc.cm&&((t=this.doc.cm.curOp).maybeHiddenMarkers&&-1!=R(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)),this.lines.push(e)},lo.prototype.detachLine=function(e){this.lines.splice(R(this.lines,e),1),!this.lines.length&&this.doc.cm&&((e=this.doc.cm.curOp).maybeHiddenMarkers||(e.maybeHiddenMarkers=[])).push(this)},ke(lo);var ao=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};function uo(e){return e.findMarks(rt(e.first,0),e.clipPos(rt(e.lastLine())),function(e){return e.parent})}ao.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();ln(this,\"clear\")}},ao.prototype.find=function(e,t){return this.primary.find(e,t)},ke(ao);var co=0,ho=function(e,t,n,r,i){if(!(this instanceof ho))return new ho(e,t,n,r,i);null==n&&(n=0),no.call(this,[new to([new Xt(\"\",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1;n=rt(this.modeFrontier=this.highlightFrontier=n,0);this.sel=si(n),this.history=new bi(null),this.id=++co,this.modeOption=t,this.lineSep=r,this.direction=\"rtl\"==i?\"rtl\":\"ltr\",this.extend=!1,\"string\"==typeof e&&(e=this.splitLines(e)),gi(this,{from:n,to:n,text:e}),Ei(this,si(n),G)};ho.prototype=q(no.prototype,{constructor:ho,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=Ze(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Rr(function(e){var t=rt(this.first,0),n=this.first+this.size-1;ji(this,{from:t,to:rt(n,$e(this,n).text.length),text:this.splitLines(e),origin:\"setValue\",full:!0},!0),this.cm&&xr(this.cm,0,0),Ei(this,si(t),G)}),replaceRange:function(e,t,n,r){qi(this,e,t=ct(this,t),n=n?ct(this,n):t,r)},getRange:function(e,t,n){t=qe(this,ct(this,e),ct(this,t));return!1===n?t:t.join(n||this.lineSeparator())},getLine:function(e){e=this.getLineHandle(e);return e&&e.text},getLineHandle:function(e){if(tt(this,e))return $e(this,e)},getLineNumber:Je,getLineHandleVisualStart:function(e){return\"number\"==typeof e&&(e=$e(this,e)),zt(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return ct(this,e)},getCursor:function(e){var t=this.sel.primary(),t=null==e||\"head\"==e?t.head:\"anchor\"==e?t.anchor:\"end\"==e||\"to\"==e||!1===e?t.to():t.from();return t},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Rr(function(e,t,n){Hi(this,ct(this,\"number\"==typeof e?rt(e,t||0):e),null,n)}),setSelection:Rr(function(e,t,n){Hi(this,ct(this,e),ct(this,t||e),n)}),extendSelection:Rr(function(e,t,n){Oi(this,ct(this,e),t&&ct(this,t),n)}),extendSelections:Rr(function(e,t){Di(this,ht(this,e),t)}),extendSelectionsBy:Rr(function(e,t){Di(this,ht(this,_(this.sel.ranges,e)),t)}),setSelections:Rr(function(e,t,n){if(e.length){for(var r=[],i=0;i<e.length;i++)r[i]=new oi(ct(this,e[i].anchor),ct(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Ei(this,li(this.cm,r,t),n)}}),addSelection:Rr(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new oi(ct(this,e),ct(this,t||e))),Ei(this,li(this.cm,r,r.length-1),n)}),getSelection:function(e){for(var t=this.sel.ranges,n=0;n<t.length;n++)var r=qe(this,t[n].from(),t[n].to()),i=i?i.concat(r):r;return!1===e?i:i.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=qe(this,n[r].from(),n[r].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||\"+input\")},replaceSelections:Rr(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];r[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:n}}for(var t=t&&\"end\"!=t&&function(e,t,n){for(var r=[],i=u=rt(e.first,0),o=0;o<t.length;o++){var l=t[o],s=hi(l.from,u,i),a=hi(ai(l),u,i),u=l.to,i=a;\"around\"==n?(l=it((l=e.sel.ranges[o]).head,l.anchor)<0,r[o]=new oi(l?a:s,l?s:a)):r[o]=new oi(s,s)}return new ii(r,e.sel.primIndex)}(this,r,t),s=r.length-1;0<=s;s--)ji(this,r[s]);t?Fi(this,t):this.cm&&wr(this.cm)}),undo:Rr(function(){Yi(this,\"undo\")}),redo:Rr(function(){Yi(this,\"redo\")}),undoSelection:Rr(function(){Yi(this,\"undo\",!0)}),redoSelection:Rr(function(){Yi(this,\"redo\",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var t=this;this.history=new bi(this.history.maxGeneration),mi(this,function(e){return e.history=t.history},!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Ni(this.history.done),undone:Ni(this.history.undone)}},setHistory:function(e){var t=this.history=new bi(this.history.maxGeneration);t.done=Ni(e.done.slice(0),null,!0),t.undone=Ni(e.undone.slice(0),null,!0)},setGutterMarker:Rr(function(e,n,r){return eo(this,e,\"gutter\",function(e){var t=e.gutterMarkers||(e.gutterMarkers={});return!(t[n]=r)&&ee(t)&&(e.gutterMarkers=null),1})}),clearGutter:Rr(function(t){var n=this;this.iter(function(e){e.gutterMarkers&&e.gutterMarkers[t]&&eo(n,e,\"gutter\",function(){return e.gutterMarkers[t]=null,ee(e.gutterMarkers)&&(e.gutterMarkers=null),1})})}),lineInfo:function(e){var t;if(\"number\"==typeof e){if(!tt(this,e))return null;if(!(e=$e(this,t=e)))return null}else if(null==(t=Je(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Rr(function(e,n,r){return eo(this,e,\"gutter\"==n?\"gutter\":\"class\",function(e){var t=\"text\"==n?\"textClass\":\"background\"==n?\"bgClass\":\"gutter\"==n?\"gutterClass\":\"wrapClass\";if(e[t]){if(C(r).test(e[t]))return;e[t]+=\" \"+r}else e[t]=r;return 1})}),removeLineClass:Rr(function(e,o,l){return eo(this,e,\"gutter\"==o?\"gutter\":\"class\",function(e){var t=\"text\"==o?\"textClass\":\"background\"==o?\"bgClass\":\"gutter\"==o?\"gutterClass\":\"wrapClass\",n=e[t];if(n){if(null==l)e[t]=null;else{var r=n.match(C(l));if(!r)return;var i=r.index+r[0].length;e[t]=n.slice(0,r.index)+(r.index&&i!=n.length?\" \":\"\")+n.slice(i)||null}return 1}})}),addLineWidget:Rr(function(e,t,n){return e=e,i=new ro(r=this,t,n),(o=r.cm)&&i.noHScroll&&(o.display.alignWidgets=!0),eo(r,e,\"widget\",function(e){var t=e.widgets||(e.widgets=[]);return null==i.insertAt?t.push(i):t.splice(Math.min(t.length,Math.max(0,i.insertAt)),0,i),i.line=e,o&&!Ut(r,e)&&(t=Vt(e)<r.scrollTop,Qe(e,e.height+gn(i)),t&&br(o,i.height),o.curOp.forceUpdate=!0),1}),o&&ln(o,\"lineWidgetAdded\",o,i,\"number\"==typeof e?e:Je(e)),i;var r,i,o}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return so(this,ct(this,e),ct(this,t),n,n&&n.type||\"range\")},setBookmark:function(e,t){t={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return so(this,e=ct(this,e),e,t,\"bookmark\")},findMarksAt:function(e){var t=[],n=$e(this,(e=ct(this,e)).line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,l){i=ct(this,i),o=ct(this,o);var s=[],a=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var n=0;n<t.length;n++){var r=t[n];null!=r.to&&a==i.line&&i.ch>=r.to||null==r.from&&a!=i.line||null!=r.from&&a==o.line&&r.from>=o.ch||l&&!l(r.marker)||s.push(r.marker.parent||r.marker)}++a}),s},getAllMarks:function(){var r=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var n=0;n<t.length;++n)null!=t[n].from&&r.push(t[n].marker)}),r},posFromIndex:function(t){var n,r=this.first,i=this.lineSeparator().length;return this.iter(function(e){e=e.text.length+i;if(t<e)return n=t,!0;t-=e,++r}),ct(this,rt(r,n))},indexFromPos:function(e){var t=(e=ct(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+n}),t},copy:function(e){var t=new ho(Ze(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e=e||{};var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);t=new ho(Ze(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(t.history=this.history),(this.linked||(this.linked=[])).push({doc:t,sharedHist:e.sharedHist}),t.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.find(),o=e.clipPos(i.from),i=e.clipPos(i.to);it(o,i)&&(i=so(e,o,i,r.primary,r.primary.type),r.markers.push(i),i.parent=r)}}(t,uo(this)),t},unlinkDoc:function(e){if(e instanceof ul&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t)if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),function(o){for(var e=0;e<o.length;e++)!function(e){var t=o[e],n=[t.primary.doc];mi(t.primary.doc,function(e){return n.push(e)});for(var r=0;r<t.markers.length;r++){var i=t.markers[r];-1==R(n,i.doc)&&(i.parent=null,t.markers.splice(r--,1))}}(e)}(uo(this));break}var n;e.history==this.history&&(n=[e.id],mi(e,function(e){return n.push(e.id)},!0),e.history=new bi(null),e.history.done=Ni(this.history.done,n),e.history.undone=Ni(this.history.undone,n))},iterLinkedDocs:function(e){mi(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Ee(e)},lineSeparator:function(){return this.lineSep||\"\\n\"},setDirection:Rr(function(e){var t;\"rtl\"!=e&&(e=\"ltr\"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&Er(t=this.cm,function(){yi(t),tr(t)}))})}),ho.prototype.eachLine=ho.prototype.iter;var fo=0;function po(e){var r=this;if(go(r),!Ce(r,e)&&!mn(r.display,e)){Te(e),w&&(fo=+new Date);var t=Jn(r,e,!0),n=e.dataTransfer.files;if(t&&!r.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),l=0,s=function(){++l==i&&Pr(r,function(){var e={from:t=ct(r.doc,t),to:t,text:r.doc.splitLines(o.filter(function(e){return null!=e}).join(r.doc.lineSeparator())),origin:\"paste\"};ji(r.doc,e),Fi(r.doc,si(ct(r.doc,t),ct(r.doc,ai(e))))})()},a=0;a<n.length;a++)!function(e,t){var n;r.options.allowDropFileTypes&&-1==R(r.options.allowDropFileTypes,e.type)?s():((n=new FileReader).onerror=s,n.onload=function(){var e=n.result;/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(e)||(o[t]=e),s()},n.readAsText(e))}(n[a],a);else{if(r.state.draggingText&&-1<r.doc.sel.contains(t))return r.state.draggingText(e),void setTimeout(function(){return r.display.input.focus()},20);try{var u,c=e.dataTransfer.getData(\"Text\");if(c){if(r.state.draggingText&&!r.state.draggingText.copy&&(u=r.listSelections()),Pi(r.doc,si(t,t)),u)for(var h=0;h<u.length;++h)qi(r.doc,\"\",u[h].anchor,u[h].head,\"drag\");r.replaceSelection(c,\"around\",\"paste\"),r.display.input.focus()}}catch(e){}}}}function go(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function mo(t){if(document.getElementsByClassName){for(var e=document.getElementsByClassName(\"CodeMirror\"),n=[],r=0;r<e.length;r++){var i=e[r].CodeMirror;i&&n.push(i)}n.length&&n[0].operation(function(){for(var e=0;e<n.length;e++)t(n[e])})}}var vo=!1;function yo(){var e;vo||(ye(window,\"resize\",function(){null==e&&(e=setTimeout(function(){e=null,mo(bo)},100))}),ye(window,\"blur\",function(){return mo(pr)}),vo=!0)}function bo(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var wo={3:\"Pause\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Mod\",92:\"Mod\",93:\"Mod\",106:\"*\",107:\"=\",109:\"-\",110:\".\",111:\"/\",145:\"ScrollLock\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",224:\"Mod\",63232:\"Up\",63233:\"Down\",63234:\"Left\",63235:\"Right\",63272:\"Delete\",63273:\"Home\",63275:\"End\",63276:\"PageUp\",63277:\"PageDown\",63302:\"Insert\"},xo=0;xo<10;xo++)wo[xo+48]=wo[xo+96]=String(xo);for(var Co=65;Co<=90;Co++)wo[Co]=String.fromCharCode(Co);for(var So=1;So<=12;So++)wo[So+111]=wo[So+63235]=\"F\"+So;var Lo={};function ko(e){var t,n,r,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var l=0;l<o.length-1;l++){var s=o[l];if(/^(cmd|meta|m)$/i.test(s))i=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error(\"Unrecognized modifier name: \"+s);r=!0}}return t&&(e=\"Alt-\"+e),n&&(e=\"Ctrl-\"+e),i&&(e=\"Cmd-\"+e),r&&(e=\"Shift-\"+e),e}function To(e){var t,n,r={};for(t in e)if(e.hasOwnProperty(t)){var i=e[t];if(!/^(name|fallthrough|(de|at)tach)$/.test(t))if(\"...\"!=i){for(var o=_(t.split(\" \"),ko),l=0;l<o.length;l++){var s=void 0,a=void 0,s=l==o.length-1?(a=o.join(\" \"),i):(a=o.slice(0,l+1).join(\" \"),\"...\"),u=r[a];if(u){if(u!=s)throw new Error(\"Inconsistent bindings for \"+a)}else r[a]=s}delete e[t]}else delete e[t]}for(n in r)e[n]=r[n];return e}function Mo(e,t,n,r){var i=(t=Do(t)).call?t.call(e,r):t[e];if(!1===i)return\"nothing\";if(\"...\"===i)return\"multi\";if(null!=i&&n(i))return\"handled\";if(t.fallthrough){if(\"[object Array]\"!=Object.prototype.toString.call(t.fallthrough))return Mo(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var l=Mo(e,t.fallthrough[o],n,r);if(l)return l}}}function No(e){e=\"string\"==typeof e?e:wo[e.keyCode];return\"Ctrl\"==e||\"Alt\"==e||\"Shift\"==e||\"Mod\"==e}function Ao(e,t,n){var r=e;return t.altKey&&\"Alt\"!=r&&(e=\"Alt-\"+e),(b?t.metaKey:t.ctrlKey)&&\"Ctrl\"!=r&&(e=\"Ctrl-\"+e),(b?t.ctrlKey:t.metaKey)&&\"Mod\"!=r&&(e=\"Cmd-\"+e),!n&&t.shiftKey&&\"Shift\"!=r&&(e=\"Shift-\"+e),e}function Oo(e,t){if(p&&34==e.keyCode&&e.char)return!1;var n=wo[e.keyCode];return null!=n&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(n=e.code),Ao(n,e,t))}function Do(e){return\"string\"==typeof e?Lo[e]:e}function Wo(t,e){for(var n=t.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=e(n[i]);r.length&&it(o.from,Y(r).to)<=0;){var l=r.pop();if(it(l.from,o.from)<0){o.from=l.from;break}}r.push(o)}Er(t,function(){for(var e=r.length-1;0<=e;e--)qi(t.doc,\"\",r[e].from,r[e].to,\"+delete\");wr(t)})}function Ho(e,t,n){n=re(e.text,t+n,n);return n<0||n>e.text.length?null:n}function Fo(e,t,n){e=Ho(e,t.ch,n);return null==e?null:new rt(t.line,e,n<0?\"after\":\"before\")}function Eo(e,t,n,r,i){if(e){\"rtl\"==t.doc.direction&&(i=-i);var o=me(n,t.doc.direction);if(o){var l,s,a,e=i<0?Y(o):o[0],o=i<0==(1==e.level)?\"after\":\"before\";return 0<e.level||\"rtl\"==t.doc.direction?(l=Tn(t,n),s=i<0?n.text.length-1:0,a=Mn(t,l,s).top,s=ie(function(e){return Mn(t,l,e).top==a},i<0==(1==e.level)?e.from:e.to-1,s),\"before\"==o&&(s=Ho(n,s,1))):s=i<0?e.to:e.from,new rt(r,s,o)}}return new rt(r,i<0?n.text.length:0,i<0?\"before\":\"after\")}function Po(t,n,s,e){var a=me(n,t.doc.direction);if(!a)return Fo(n,s,e);s.ch>=n.text.length?(s.ch=n.text.length,s.sticky=\"before\"):s.ch<=0&&(s.ch=0,s.sticky=\"after\");var r=le(a,s.ch,s.sticky),i=a[r];if(\"ltr\"==t.doc.direction&&i.level%2==0&&(0<e?i.to>s.ch:i.from<s.ch))return Fo(n,s,e);function u(e,t){return Ho(n,e instanceof rt?e.ch:e,t)}function o(e){return t.options.lineWrapping?(l=l||Tn(t,n),jn(t,n,l,e)):{begin:0,end:n.text.length}}var l,c=o(\"before\"==s.sticky?u(s,-1):s.ch);if(\"rtl\"==t.doc.direction||1==i.level){var h=1==i.level==e<0,d=u(s,h?1:-1);if(null!=d&&(h?d<=i.to&&d<=c.end:d>=i.from&&d>=c.begin)){var f=h?\"before\":\"after\";return new rt(s.line,d,f)}}f=function(e,t,n){for(var r=function(e,t){return t?new rt(s.line,u(e,1),\"before\"):new rt(s.line,e,\"after\")};0<=e&&e<a.length;e+=t){var i=a[e],o=0<t==(1!=i.level),l=o?n.begin:u(n.end,-1);if(i.from<=l&&l<i.to)return r(l,o);if(l=o?i.from:u(i.to,-1),n.begin<=l&&l<n.end)return r(l,o)}},r=f(r+e,e,c);if(r)return r;c=0<e?c.end:u(c.begin,-1);return null==c||0<e&&c==n.text.length||!(r=f(0<e?0:a.length-1,e,o(c)))?null:r}Lo.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharAfter\",Backspace:\"delCharBefore\",\"Shift-Backspace\":\"delCharBefore\",Tab:\"defaultTab\",\"Shift-Tab\":\"indentAuto\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\",Esc:\"singleSelection\"},Lo.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Up\":\"goLineUp\",\"Ctrl-Down\":\"goLineDown\",\"Ctrl-Left\":\"goGroupLeft\",\"Ctrl-Right\":\"goGroupRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delGroupBefore\",\"Ctrl-Delete\":\"delGroupAfter\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",\"Ctrl-[\":\"indentLess\",\"Ctrl-]\":\"indentMore\",\"Ctrl-U\":\"undoSelection\",\"Shift-Ctrl-U\":\"redoSelection\",\"Alt-U\":\"redoSelection\",fallthrough:\"basic\"},Lo.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageDown\",\"Shift-Ctrl-V\":\"goPageUp\",\"Ctrl-D\":\"delCharAfter\",\"Ctrl-H\":\"delCharBefore\",\"Alt-D\":\"delWordAfter\",\"Alt-Backspace\":\"delWordBefore\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\",\"Ctrl-O\":\"openLine\"},Lo.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Home\":\"goDocStart\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goGroupLeft\",\"Alt-Right\":\"goGroupRight\",\"Cmd-Left\":\"goLineLeft\",\"Cmd-Right\":\"goLineRight\",\"Alt-Backspace\":\"delGroupBefore\",\"Ctrl-Alt-Backspace\":\"delGroupAfter\",\"Alt-Delete\":\"delGroupAfter\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",\"Cmd-[\":\"indentLess\",\"Cmd-]\":\"indentMore\",\"Cmd-Backspace\":\"delWrappedLineLeft\",\"Cmd-Delete\":\"delWrappedLineRight\",\"Cmd-U\":\"undoSelection\",\"Shift-Cmd-U\":\"redoSelection\",\"Ctrl-Up\":\"goDocStart\",\"Ctrl-Down\":\"goDocEnd\",fallthrough:[\"basic\",\"emacsy\"]},Lo.default=g?Lo.macDefault:Lo.pcDefault;var Io={selectAll:Vi,singleSelection:function(e){return e.setSelection(e.getCursor(\"anchor\"),e.getCursor(\"head\"),G)},killLine:function(n){return Wo(n,function(e){if(e.empty()){var t=$e(n.doc,e.head.line).text.length;return e.head.ch==t&&e.head.line<n.lastLine()?{from:e.head,to:rt(e.head.line+1,0)}:{from:e.head,to:rt(e.head.line,t)}}return{from:e.from(),to:e.to()}})},deleteLine:function(t){return Wo(t,function(e){return{from:rt(e.from().line,0),to:ct(t.doc,rt(e.to().line+1,0))}})},delLineLeft:function(e){return Wo(e,function(e){return{from:rt(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(n){return Wo(n,function(e){var t=n.charCoords(e.head,\"div\").top+5;return{from:n.coordsChar({left:0,top:t},\"div\"),to:e.from()}})},delWrappedLineRight:function(n){return Wo(n,function(e){var t=n.charCoords(e.head,\"div\").top+5,t=n.coordsChar({left:n.display.lineDiv.offsetWidth+100,top:t},\"div\");return{from:e.from(),to:t}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(rt(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(rt(e.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return Ro(t,e.head.line)},{origin:\"+move\",bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return zo(t,e.head)},{origin:\"+move\",bias:1})},goLineEnd:function(t){return t.extendSelectionsBy(function(e){return function(e,t){var n=$e(e.doc,t),r=function(e){for(var t;t=It(e);)e=t.find(1,!0).line;return e}(n);r!=n&&(t=Je(r));return Eo(!0,e,n,t,-1)}(t,e.head.line)},{origin:\"+move\",bias:-1})},goLineRight:function(t){return t.extendSelectionsBy(function(e){e=t.cursorCoords(e.head,\"div\").top+5;return t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:e},\"div\")},V)},goLineLeft:function(t){return t.extendSelectionsBy(function(e){e=t.cursorCoords(e.head,\"div\").top+5;return t.coordsChar({left:0,top:e},\"div\")},V)},goLineLeftSmart:function(n){return n.extendSelectionsBy(function(e){var t=n.cursorCoords(e.head,\"div\").top+5,t=n.coordsChar({left:0,top:t},\"div\");return t.ch<n.getLine(t.line).search(/\\S/)?zo(n,e.head):t},V)},goLineUp:function(e){return e.moveV(-1,\"line\")},goLineDown:function(e){return e.moveV(1,\"line\")},goPageUp:function(e){return e.moveV(-1,\"page\")},goPageDown:function(e){return e.moveV(1,\"page\")},goCharLeft:function(e){return e.moveH(-1,\"char\")},goCharRight:function(e){return e.moveH(1,\"char\")},goColumnLeft:function(e){return e.moveH(-1,\"column\")},goColumnRight:function(e){return e.moveH(1,\"column\")},goWordLeft:function(e){return e.moveH(-1,\"word\")},goGroupRight:function(e){return e.moveH(1,\"group\")},goGroupLeft:function(e){return e.moveH(-1,\"group\")},goWordRight:function(e){return e.moveH(1,\"word\")},delCharBefore:function(e){return e.deleteH(-1,\"codepoint\")},delCharAfter:function(e){return e.deleteH(1,\"char\")},delWordBefore:function(e){return e.deleteH(-1,\"word\")},delWordAfter:function(e){return e.deleteH(1,\"word\")},delGroupBefore:function(e){return e.deleteH(-1,\"group\")},delGroupAfter:function(e){return e.deleteH(1,\"group\")},indentAuto:function(e){return e.indentSelection(\"smart\")},indentMore:function(e){return e.indentSelection(\"add\")},indentLess:function(e){return e.indentSelection(\"subtract\")},insertTab:function(e){return e.replaceSelection(\"\\t\")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),o=P(e.getLine(o.line),o.ch,r);t.push(X(r-o%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\"add\"):e.execCommand(\"insertTab\")},transposeChars:function(l){return Er(l,function(){for(var e,t,n,r=l.listSelections(),i=[],o=0;o<r.length;o++)r[o].empty()&&(e=r[o].head,(t=$e(l.doc,e.line).text)&&(e.ch==t.length&&(e=new rt(e.line,e.ch-1)),0<e.ch?(e=new rt(e.line,e.ch+1),l.replaceRange(t.charAt(e.ch-1)+t.charAt(e.ch-2),rt(e.line,e.ch-2),e,\"+transpose\")):e.line>l.doc.first&&((n=$e(l.doc,e.line-1).text)&&(e=new rt(e.line,1),l.replaceRange(t.charAt(0)+l.doc.lineSeparator()+n.charAt(n.length-1),rt(e.line-1,n.length-1),e,\"+transpose\")))),i.push(new oi(e,e)));l.setSelections(i)})},newlineAndIndent:function(r){return Er(r,function(){for(var e=r.listSelections(),t=e.length-1;0<=t;t--)r.replaceRange(r.doc.lineSeparator(),e[t].anchor,e[t].head,\"+input\");e=r.listSelections();for(var n=0;n<e.length;n++)r.indentLine(e[n].from().line,null,!0);wr(r)})},openLine:function(e){return e.replaceSelection(\"\\n\",\"start\")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Ro(e,t){var n=$e(e.doc,t),r=zt(n);return r!=n&&(t=Je(r)),Eo(!0,e,r,t,1)}function zo(e,t){var n=Ro(e,t.line),r=$e(e.doc,n.line),e=me(r,e.doc.direction);if(e&&0!=e[0].level)return n;r=Math.max(n.ch,r.text.search(/\\S/)),t=t.line==n.line&&t.ch<=r&&t.ch;return rt(n.line,t?0:r,n.sticky)}function Bo(e,t,n){if(\"string\"==typeof t&&!(t=Io[t]))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=B}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}var Go=new I;function Uo(e,t,n,r){var i=e.state.keySeq;if(i){if(No(t))return\"handled\";if(/\\'$/.test(t)?e.state.keySeq=null:Go.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),Vo(e,i+\" \"+t,n,r))return!0}return Vo(e,t,n,r)}function Vo(e,t,n,r){r=function(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=Mo(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&Mo(t,e.options.extraKeys,n,e)||Mo(t,e.options.keyMap,n,e)}(e,t,r);return\"multi\"==r&&(e.state.keySeq=t),\"handled\"==r&&ln(e,\"keyHandled\",e,t,n),\"handled\"!=r&&\"multi\"!=r||(Te(n),cr(e)),!!r}function Ko(t,e){var n=Oo(e,!0);return!!n&&(e.shiftKey&&!t.state.keySeq?Uo(t,\"Shift-\"+n,e,function(e){return Bo(t,e,!0)})||Uo(t,n,e,function(e){if(\"string\"==typeof e?/^go[A-Z]/.test(e):e.motion)return Bo(t,e)}):Uo(t,n,e,function(e){return Bo(t,e)}))}var jo=null;function Xo(e){var t,n,r,i=this;function o(e){18!=e.keyCode&&e.altKey||(L(r,\"CodeMirror-crosshair\"),we(document,\"keyup\",o),we(document,\"mouseover\",o))}e.target&&e.target!=i.display.input.getField()||(i.curOp.focus=O(),Ce(i,e)||(w&&v<11&&27==e.keyCode&&(e.returnValue=!1),t=e.keyCode,i.display.shift=16==t||e.shiftKey,n=Ko(i,e),p&&(jo=n?t:null,!n&&88==t&&!Ie&&(g?e.metaKey:e.ctrlKey)&&i.replaceSelection(\"\",null,\"cut\")),d&&!g&&!n&&46==t&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand(\"cut\"),18!=t||/\\bCodeMirror-crosshair\\b/.test(i.display.lineDiv.className)||(D(r=i.display.lineDiv,\"CodeMirror-crosshair\"),ye(document,\"keyup\",o),ye(document,\"mouseover\",o))))}function Yo(e){16==e.keyCode&&(this.doc.sel.shift=!1),Ce(this,e)}function _o(e){var t=this;if(!(e.target&&e.target!=t.display.input.getField()||mn(t.display,e)||Ce(t,e)||e.ctrlKey&&!e.altKey||g&&e.metaKey)){var n,r=e.keyCode,i=e.charCode;if(p&&r==jo)return jo=null,void Te(e);p&&(!e.which||e.which<10)&&Ko(t,e)||\"\\b\"!=(i=String.fromCharCode(null==i?r:i))&&(Uo(n=t,\"'\"+i+\"'\",e,function(e){return Bo(n,e,!0)})||t.display.input.onKeyPress(e))}}var $o,qo,Zo=function(e,t,n){this.time=e,this.pos=t,this.button=n};function Qo(e){var t,n,r,i,o,l=this,s=l.display;Ce(l,e)||s.activeTouch&&s.input.supportsTouch()||(s.input.ensurePolled(),s.shift=e.shiftKey,mn(s,e)?f||(s.scroller.draggable=!1,setTimeout(function(){return s.scroller.draggable=!0},100)):tl(l,e)||(t=Jn(l,e),n=De(e),i=t?(r=t,i=n,o=+new Date,qo&&qo.compare(o,r,i)?($o=qo=null,\"triple\"):$o&&$o.compare(o,r,i)?(qo=new Zo(o,r,i),$o=null,\"double\"):($o=new Zo(o,r,i),qo=null,\"single\")):\"single\",window.focus(),1==n&&l.state.selectingText&&l.state.selectingText(e),t&&function(n,e,r,t,i){var o=\"Click\";\"double\"==t?o=\"Double\"+o:\"triple\"==t&&(o=\"Triple\"+o);return Uo(n,Ao(o=(1==e?\"Left\":2==e?\"Middle\":\"Right\")+o,i),i,function(e){if(\"string\"==typeof e&&(e=Io[e]),!e)return!1;var t=!1;try{n.isReadOnly()&&(n.state.suppressEdits=!0),t=e(n,r)!=B}finally{n.state.suppressEdits=!1}return t})}(l,n,t,i,e)||(1==n?t?function(e,t,n,r){w?setTimeout(F(hr,e),0):e.curOp.focus=O();var i,o=function(e,t,n){var r=e.getOption(\"configureMouse\"),i=r?r(e,t,n):{};null==i.unit&&(r=m?n.shiftKey&&n.metaKey:n.altKey,i.unit=r?\"rectangle\":\"single\"==t?\"char\":\"double\"==t?\"word\":\"line\");null!=i.extend&&!e.doc.extend||(i.extend=e.doc.extend||n.shiftKey);null==i.addNew&&(i.addNew=g?n.metaKey:n.ctrlKey);null==i.moveOnDrag&&(i.moveOnDrag=!(g?n.altKey:n.ctrlKey));return i}(e,n,r),l=e.doc.sel;(e.options.dragDrop&&Fe&&!e.isReadOnly()&&\"single\"==n&&-1<(i=l.contains(t))&&(it((i=l.ranges[i]).from(),t)<0||0<t.xRel)&&(0<it(i.to(),t)||t.xRel<0)?function(t,n,r,i){var o=t.display,l=!1,s=Pr(t,function(e){f&&(o.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:dr(t)),we(o.wrapper.ownerDocument,\"mouseup\",s),we(o.wrapper.ownerDocument,\"mousemove\",a),we(o.scroller,\"dragstart\",u),we(o.scroller,\"drop\",s),l||(Te(e),i.addNew||Oi(t.doc,r,null,null,i.extend),f&&!c||w&&9==v?setTimeout(function(){o.wrapper.ownerDocument.body.focus({preventScroll:!0}),o.input.focus()},20):o.input.focus())}),a=function(e){l=l||10<=Math.abs(n.clientX-e.clientX)+Math.abs(n.clientY-e.clientY)},u=function(){return l=!0};f&&(o.scroller.draggable=!0);(t.state.draggingText=s).copy=!i.moveOnDrag,ye(o.wrapper.ownerDocument,\"mouseup\",s),ye(o.wrapper.ownerDocument,\"mousemove\",a),ye(o.scroller,\"dragstart\",u),ye(o.scroller,\"drop\",s),t.state.delayingBlurEvent=!0,setTimeout(function(){return o.input.focus()},20),o.scroller.dragDrop&&o.scroller.dragDrop()}:function(d,e,f,p){w&&dr(d);var l=d.display,g=d.doc;Te(e);var m,v,y=g.sel,t=y.ranges;p.addNew&&!p.extend?(v=g.sel.contains(f),m=-1<v?t[v]:new oi(f,f)):(m=g.sel.primary(),v=g.sel.primIndex);\"rectangle\"==p.unit?(p.addNew||(m=new oi(f,f)),f=Jn(d,e,!0,!0),v=-1):(e=Jo(d,f,p.unit),m=p.extend?Ai(m,e.anchor,e.head,p.extend):e);p.addNew?-1==v?(v=t.length,Ei(g,li(d,t.concat([m]),v),{scroll:!1,origin:\"*mouse\"})):1<t.length&&t[v].empty()&&\"char\"==p.unit&&!p.extend?(Ei(g,li(d,t.slice(0,v).concat(t.slice(v+1)),0),{scroll:!1,origin:\"*mouse\"}),y=g.sel):Wi(g,v,m,U):(Ei(g,new ii([m],v=0),U),y=g.sel);var b=f;function s(e){if(0!=it(b,e))if(b=e,\"rectangle\"==p.unit){for(var t=[],n=d.options.tabSize,r=P($e(g,f.line).text,f.ch,n),i=P($e(g,e.line).text,e.ch,n),o=Math.min(r,i),l=Math.max(r,i),s=Math.min(f.line,e.line),a=Math.min(d.lastLine(),Math.max(f.line,e.line));s<=a;s++){var u=$e(g,s).text,c=K(u,o,n);o==l?t.push(new oi(rt(s,c),rt(s,c))):u.length>c&&t.push(new oi(rt(s,c),rt(s,K(u,l,n))))}t.length||t.push(new oi(f,f)),Ei(g,li(d,y.ranges.slice(0,v).concat(t),v),{origin:\"*mouse\",scroll:!1}),d.scrollIntoView(e)}else{var h,r=m,i=Jo(d,e,p.unit),e=r.anchor,e=0<it(i.anchor,e)?(h=i.head,at(r.from(),i.anchor)):(h=i.anchor,st(r.to(),i.head)),i=y.ranges.slice(0);i[v]=function(e,t){var n=t.anchor,r=t.head,i=$e(e.doc,n.line);if(0==it(n,r)&&n.sticky==r.sticky)return t;var o=me(i);if(!o)return t;var l=le(o,n.ch,n.sticky),s=o[l];if(s.from!=n.ch&&s.to!=n.ch)return t;i=l+(s.from==n.ch==(1!=s.level)?0:1);if(0==i||i==o.length)return t;a=r.line!=n.line?0<(r.line-n.line)*(\"ltr\"==e.doc.direction?1:-1):(e=le(o,r.ch,r.sticky),a=e-l||(r.ch-n.ch)*(1==s.level?-1:1),e==i-1||e==i?a<0:0<a);var i=o[i+(a?-1:0)],a=a==(1==i.level),i=a?i.from:i.to,a=a?\"after\":\"before\";return n.ch==i&&n.sticky==a?t:new oi(new rt(n.line,i,a),r)}(d,new oi(ct(g,e),h)),Ei(g,li(d,i,v),U)}}var a=l.wrapper.getBoundingClientRect(),u=0;function n(e){d.state.selectingText=!1,u=1/0,e&&(Te(e),l.input.focus()),we(l.wrapper.ownerDocument,\"mousemove\",r),we(l.wrapper.ownerDocument,\"mouseup\",i),g.history.lastSelOrigin=null}var r=Pr(d,function(e){(0!==e.buttons&&De(e)?function e(t){var n,r,i=++u,o=Jn(d,t,!0,\"rectangle\"==p.unit);o&&(0!=it(o,b)?(d.curOp.focus=O(),s(o),n=vr(l,g),(o.line>=n.to||o.line<n.from)&&setTimeout(Pr(d,function(){u==i&&e(t)}),150)):(r=t.clientY<a.top?-20:t.clientY>a.bottom?20:0)&&setTimeout(Pr(d,function(){u==i&&(l.scroller.scrollTop+=r,e(t))}),50))}:n)(e)}),i=Pr(d,n);d.state.selectingText=i,ye(l.wrapper.ownerDocument,\"mousemove\",r),ye(l.wrapper.ownerDocument,\"mouseup\",i)})(e,r,t,o)}(l,t,i,e):Oe(e)==s.scroller&&Te(e):2==n?(t&&Oi(l.doc,t),setTimeout(function(){return s.input.focus()},20)):3==n&&(x?l.display.input.onContextMenu(e):dr(l)))))}function Jo(e,t,n){if(\"char\"==n)return new oi(t,t);if(\"word\"==n)return e.findWordAt(t);if(\"line\"==n)return new oi(rt(t.line,0),ct(e.doc,rt(t.line+1,0)));t=n(e,t);return new oi(t.from,t.to)}function el(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&Te(t);var l=e.display,r=l.lineDiv.getBoundingClientRect();if(o>r.bottom||!Le(e,n))return Ne(t);o-=r.top-l.viewOffset;for(var s=0;s<e.display.gutterSpecs.length;++s){var a=l.gutters.childNodes[s];if(a&&a.getBoundingClientRect().right>=i)return xe(e,n,e,et(e.doc,o),e.display.gutterSpecs[s].className,t),Ne(t)}}function tl(e,t){return el(e,t,\"gutterClick\",!0)}function nl(e,t){var n,r;mn(e.display,t)||(r=t,Le(n=e,\"gutterContextMenu\")&&el(n,r,\"gutterContextMenu\",!1))||Ce(e,t,\"contextmenu\")||x||e.display.input.onContextMenu(t)}function rl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\\s*cm-s-\\S+/g,\"\")+e.options.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\"),Hn(e)}Zo.prototype.compare=function(e,t,n){return this.time+400>e&&0==it(t,this.pos)&&n==this.button};var il={toString:function(){return\"CodeMirror.Init\"}},ol={},ll={};function sl(e,t,n){!t!=!(n&&n!=il)&&(n=e.display.dragFunctions,(t=t?ye:we)(e.display.scroller,\"dragstart\",n.start),t(e.display.scroller,\"dragenter\",n.enter),t(e.display.scroller,\"dragover\",n.over),t(e.display.scroller,\"dragleave\",n.leave),t(e.display.scroller,\"drop\",n.drop))}function al(e){e.options.lineWrapping?(D(e.display.wrapper,\"CodeMirror-wrap\"),e.display.sizer.style.minWidth=\"\",e.display.sizerWidth=null):(L(e.display.wrapper,\"CodeMirror-wrap\"),jt(e)),Qn(e),tr(e),Hn(e),setTimeout(function(){return Nr(e)},100)}function ul(e,t){var n=this;if(!(this instanceof ul))return new ul(e,t);this.options=t=t?E(t):{},E(ol,t,!1);var r=t.value;\"string\"==typeof r?r=new ho(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i,o=new ul.inputStyles[t.inputStyle](this),o=this.display=new Qr(e,r,o,t);for(i in rl(o.wrapper.CodeMirror=this),t.lineWrapping&&(this.display.wrapper.className+=\" CodeMirror-wrap\"),Dr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new I,keySeq:null,specialChars:null},t.autofocus&&!h&&o.input.focus(),w&&v<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(r){var i=r.display;ye(i.scroller,\"mousedown\",Pr(r,Qo)),ye(i.scroller,\"dblclick\",w&&v<11?Pr(r,function(e){var t;Ce(r,e)||(!(t=Jn(r,e))||tl(r,e)||mn(r.display,e)||(Te(e),t=r.findWordAt(t),Oi(r.doc,t.anchor,t.head)))}):function(e){return Ce(r,e)||Te(e)});ye(i.scroller,\"contextmenu\",function(e){return nl(r,e)}),ye(i.input.getField(),\"contextmenu\",function(e){i.scroller.contains(e.target)||nl(r,e)});var n,o={end:0};function l(){i.activeTouch&&(n=setTimeout(function(){return i.activeTouch=null},1e3),(o=i.activeTouch).end=+new Date)}function s(e,t){if(null==t.left)return 1;var n=t.left-e.left,e=t.top-e.top;return 400<n*n+e*e}ye(i.scroller,\"touchstart\",function(e){var t;Ce(r,e)||function(e){if(1==e.touches.length){e=e.touches[0];return e.radiusX<=1&&e.radiusY<=1}}(e)||tl(r,e)||(i.input.ensurePolled(),clearTimeout(n),t=+new Date,i.activeTouch={start:t,moved:!1,prev:t-o.end<=300?o:null},1==e.touches.length&&(i.activeTouch.left=e.touches[0].pageX,i.activeTouch.top=e.touches[0].pageY))}),ye(i.scroller,\"touchmove\",function(){i.activeTouch&&(i.activeTouch.moved=!0)}),ye(i.scroller,\"touchend\",function(e){var t,n=i.activeTouch;n&&!mn(i,e)&&null!=n.left&&!n.moved&&new Date-n.start<300&&(t=r.coordsChar(i.activeTouch,\"page\"),t=!n.prev||s(n,n.prev)?new oi(t,t):!n.prev.prev||s(n,n.prev.prev)?r.findWordAt(t):new oi(rt(t.line,0),ct(r.doc,rt(t.line+1,0))),r.setSelection(t.anchor,t.head),r.focus(),Te(e)),l()}),ye(i.scroller,\"touchcancel\",l),ye(i.scroller,\"scroll\",function(){i.scroller.clientHeight&&(Lr(r,i.scroller.scrollTop),Tr(r,i.scroller.scrollLeft,!0),xe(r,\"scroll\",r))}),ye(i.scroller,\"mousewheel\",function(e){return ri(r,e)}),ye(i.scroller,\"DOMMouseScroll\",function(e){return ri(r,e)}),ye(i.wrapper,\"scroll\",function(){return i.wrapper.scrollTop=i.wrapper.scrollLeft=0}),i.dragFunctions={enter:function(e){Ce(r,e)||Ae(e)},over:function(e){var t,n;Ce(r,e)||((n=Jn(t=r,n=e))&&(ar(t,n,n=document.createDocumentFragment()),t.display.dragCursor||(t.display.dragCursor=M(\"div\",null,\"CodeMirror-cursors CodeMirror-dragcursors\"),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),T(t.display.dragCursor,n)),Ae(e))},start:function(e){return t=r,n=e,void(w&&(!t.state.draggingText||+new Date-fo<100)?Ae(n):Ce(t,n)||mn(t.display,n)||(n.dataTransfer.setData(\"Text\",t.getSelection()),n.dataTransfer.effectAllowed=\"copyMove\",n.dataTransfer.setDragImage&&!c&&((e=M(\"img\",null,null,\"position: fixed; left: 0; top: 0;\")).src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",p&&(e.width=e.height=1,t.display.wrapper.appendChild(e),e._top=e.offsetTop),n.dataTransfer.setDragImage(e,0,0),p&&e.parentNode.removeChild(e))));var t,n},drop:Pr(r,po),leave:function(e){Ce(r,e)||go(r)}};var e=i.input.getField();ye(e,\"keyup\",function(e){return Yo.call(r,e)}),ye(e,\"keydown\",Pr(r,Xo)),ye(e,\"keypress\",Pr(r,_o)),ye(e,\"focus\",function(e){return fr(r,e)}),ye(e,\"blur\",function(e){return pr(r,e)})}(this),yo(),Hr(this),this.curOp.forceUpdate=!0,vi(this,r),t.autofocus&&!h||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&fr(n)},20):pr(this),ll)ll.hasOwnProperty(i)&&ll[i](this,t[i],il);_r(this),t.finishInit&&t.finishInit(this);for(var l=0;l<cl.length;++l)cl[l](this);Fr(this),f&&t.lineWrapping&&\"optimizelegibility\"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering=\"auto\")}ul.defaults=ol,ul.optionHandlers=ll;var cl=[];function hl(e,t,n,r){var i,o=e.doc;null==n&&(n=\"add\"),\"smart\"==n&&(o.mode.indent?i=mt(e,t).state:n=\"prev\");var l=e.options.tabSize,s=$e(o,t),a=P(s.text,null,l);s.stateAfter&&(s.stateAfter=null);var u,c=s.text.match(/^\\s*/)[0];if(r||/\\S/.test(s.text)){if(\"smart\"==n&&((u=o.mode.indent(i,s.text.slice(c.length),s.text))==B||150<u)){if(!r)return;n=\"prev\"}}else u=0,n=\"not\";\"prev\"==n?u=t>o.first?P($e(o,t-1).text,null,l):0:\"add\"==n?u=a+e.options.indentUnit:\"subtract\"==n?u=a-e.options.indentUnit:\"number\"==typeof n&&(u=a+n),u=Math.max(0,u);var h=\"\",d=0;if(e.options.indentWithTabs)for(var f=Math.floor(u/l);f;--f)d+=l,h+=\"\\t\";if(d<u&&(h+=X(u-d)),h!=c)return qi(o,h,rt(t,0),rt(t,c.length),\"+input\"),!(s.stateAfter=null);for(var p=0;p<o.sel.ranges.length;p++){var g=o.sel.ranges[p];if(g.head.line==t&&g.head.ch<c.length){g=rt(t,c.length);Wi(o,p,new oi(g,g));break}}}ul.defineInitHook=function(e){return cl.push(e)};var dl=null;function fl(e){dl=e}function pl(e,t,n,r,i){var o=e.doc;e.display.shift=!1,r=r||o.sel;var l=+new Date-200,s=\"paste\"==i||e.state.pasteIncoming>l,a=Ee(t),u=null;if(s&&1<r.ranges.length)if(dl&&dl.text.join(\"\\n\")==t){if(r.ranges.length%dl.text.length==0){u=[];for(var c=0;c<dl.text.length;c++)u.push(o.splitLines(dl.text[c]))}}else a.length==r.ranges.length&&e.options.pasteLinesPerSelection&&(u=_(a,function(e){return[e]}));for(var h=e.curOp.updateInput,d=r.ranges.length-1;0<=d;d--){var f=r.ranges[d],p=f.from(),g=f.to();f.empty()&&(n&&0<n?p=rt(p.line,p.ch-n):e.state.overwrite&&!s?g=rt(g.line,Math.min($e(o,g.line).text.length,g.ch+Y(a).length)):s&&dl&&dl.lineWise&&dl.text.join(\"\\n\")==a.join(\"\\n\")&&(p=g=rt(p.line,0)));g={from:p,to:g,text:u?u[d%u.length]:a,origin:i||(s?\"paste\":e.state.cutIncoming>l?\"cut\":\"+input\")};ji(e.doc,g),ln(e,\"inputRead\",e,g)}t&&!s&&ml(e,t),wr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function gl(e,t){var n=e.clipboardData&&e.clipboardData.getData(\"Text\");return n&&(e.preventDefault(),t.isReadOnly()||t.options.disableInput||Er(t,function(){return pl(t,n,0,null,\"paste\")}),1)}function ml(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;0<=r;r--){var i=n.ranges[r];if(!(100<i.head.ch||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(-1<t.indexOf(o.electricChars.charAt(s))){l=hl(e,i.head.line,\"smart\");break}}else o.electricInput&&o.electricInput.test($e(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=hl(e,i.head.line,\"smart\"));l&&ln(e,\"electricInput\",e,i.head.line)}}}function vl(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,i={anchor:rt(i,0),head:rt(i+1,0)};n.push(i),t.push(e.getRange(i.anchor,i.head))}return{text:t,ranges:n}}function yl(e,t,n,r){e.setAttribute(\"autocorrect\",n?\"\":\"off\"),e.setAttribute(\"autocapitalize\",r?\"\":\"off\"),e.setAttribute(\"spellcheck\",!!t)}function bl(){var e=M(\"textarea\",null,null,\"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\"),t=M(\"div\",[e],null,\"overflow: hidden; position: relative; width: 3px; height: 0px;\");return f?e.style.width=\"1000px\":e.setAttribute(\"wrap\",\"off\"),s&&(e.style.border=\"1px solid black\"),yl(e),t}function wl(r,i,o,l,s){var e=i,t=o,a=$e(r,i.line),u=s&&\"rtl\"==r.direction?-o:o;function n(e){var t,n;if(null==(t=\"codepoint\"==l?(t=a.text.charCodeAt(i.ch+(0<l?0:-1)),isNaN(t)?null:new rt(i.line,Math.max(0,Math.min(a.text.length,i.ch+o*(55296<=t&&t<56320?2:1))),-o)):s?Po(r.cm,a,i,o):Fo(a,i,o))){if(e||(n=i.line+u)<r.first||n>=r.first+r.size||(i=new rt(n,i.ch,i.sticky),!(a=$e(r,n))))return;i=Eo(s,r.cm,a,i.line,u)}else i=t;return 1}if(\"char\"==l||\"codepoint\"==l)n();else if(\"column\"==l)n(!0);else if(\"word\"==l||\"group\"==l)for(var c=null,h=\"group\"==l,d=r.cm&&r.cm.getHelper(i,\"wordChars\"),f=!0;!(o<0)||n(!f);f=!1){var p=a.text.charAt(i.ch)||\"\\n\",p=J(p,d)?\"w\":h&&\"\\n\"==p?\"n\":!h||/\\s/.test(p)?null:\"p\";if(!h||f||p||(p=\"s\"),c&&c!=p){o<0&&(o=1,n(),i.sticky=\"after\");break}if(p&&(c=p),0<o&&!n(!f))break}t=Gi(r,i,e,t,!0);return ot(e,t)&&(t.hitSide=!0),t}function xl(e,t,n,r){var i,o,l,s=e.doc,a=t.left;for(\"page\"==r?(i=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),i=Math.max(i-.5*Yn(e.display),3),o=(0<n?t.bottom:t.top)+n*i):\"line\"==r&&(o=0<n?t.bottom+3:t.top-3);(l=Vn(e,a,o)).outside;){if(n<0?o<=0:o>=s.height){l.hitSide=!0;break}o+=5*n}return l}e=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new I,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Cl(e,t){var n=kn(e,t.line);if(!n||n.hidden)return null;var r=$e(e.doc,t.line),n=Sn(n,r,t.line),r=me(r,e.doc.direction),e=\"left\";r&&(e=le(r,t.ch)%2?\"right\":\"left\");e=On(n.map,t.ch,e);return e.offset=\"right\"==e.collapse?e.end:e.start,e}function Sl(e,t){return t&&(e.bad=!0),e}function Ll(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Sl(e.clipPos(rt(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==r)return function(u,e,t){var n=u.text.firstChild,r=!1;if(!e||!A(n,e))return Sl(rt(Je(u.line),0),!0);if(e==n&&(r=!0,e=n.childNodes[t],t=0,!e)){var i=u.rest?Y(u.rest):u.line;return Sl(rt(Je(i),i.text.length),r)}var i=3==e.nodeType?e:null,o=e;i||1!=e.childNodes.length||3!=e.firstChild.nodeType||(i=e.firstChild,t=t&&i.nodeValue.length);for(;o.parentNode!=n;)o=o.parentNode;var c=u.measure,h=c.maps;function l(e,t,n){for(var r=-1;r<(h?h.length:0);r++)for(var i=r<0?c.map:h[r],o=0;o<i.length;o+=3){var l=i[o+2];if(l==e||l==t){var s=Je(r<0?u.line:u.rest[r]),a=i[o]+n;return(n<0||l!=e)&&(a=i[o+(n?1:0)]),rt(s,a)}}}var s=l(i,o,t);if(s)return Sl(s,r);for(var a=o.nextSibling,d=i?i.nodeValue.length-t:0;a;a=a.nextSibling){if(s=l(a,a.firstChild,0))return Sl(rt(s.line,s.ch-d),r);d+=a.textContent.length}for(var f=o.previousSibling,p=t;f;f=f.previousSibling){if(s=l(f,f.firstChild,-1))return Sl(rt(s.line,s.ch+p),r);p+=f.textContent.length}}(o,t,n)}}e.prototype.init=function(e){var t=this,o=this,l=o.cm,s=o.div=e.lineDiv;function a(e){for(var t=e.target;t;t=t.parentNode){if(t==s)return 1;if(/\\bCodeMirror-(?:line)?widget\\b/.test(t.className))break}}function n(e){if(a(e)&&!Ce(l,e)){if(l.somethingSelected())fl({lineWise:!1,text:l.getSelections()}),\"cut\"==e.type&&l.replaceSelection(\"\",null,\"cut\");else{if(!l.options.lineWiseCopyCut)return;var t=vl(l);fl({lineWise:!0,text:t.text}),\"cut\"==e.type&&l.operation(function(){l.setSelections(t.ranges,0,G),l.replaceSelection(\"\",null,\"cut\")})}if(e.clipboardData){e.clipboardData.clearData();var n=dl.text.join(\"\\n\");if(e.clipboardData.setData(\"Text\",n),e.clipboardData.getData(\"Text\")==n)return void e.preventDefault()}var r=bl(),e=r.firstChild;l.display.lineSpace.insertBefore(r,l.display.lineSpace.firstChild),e.value=dl.text.join(\"\\n\");var i=document.activeElement;H(e),setTimeout(function(){l.display.lineSpace.removeChild(r),i.focus(),i==s&&o.showPrimarySelection()},50)}}yl(s,l.options.spellcheck,l.options.autocorrect,l.options.autocapitalize),ye(s,\"paste\",function(e){!a(e)||Ce(l,e)||gl(e,l)||v<=11&&setTimeout(Pr(l,function(){return t.updateFromDOM()}),20)}),ye(s,\"compositionstart\",function(e){t.composing={data:e.data,done:!1}}),ye(s,\"compositionupdate\",function(e){t.composing||(t.composing={data:e.data,done:!1})}),ye(s,\"compositionend\",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),ye(s,\"touchstart\",function(){return o.forceCompositionEnd()}),ye(s,\"input\",function(){t.composing||t.readFromDOMSoon()}),ye(s,\"copy\",n),ye(s,\"cut\",n)},e.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute(\"aria-label\",e):this.div.removeAttribute(\"aria-label\")},e.prototype.prepareSelection=function(){var e=sr(this.cm,!1);return e.focus=document.activeElement==this.div,e},e.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},e.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},e.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),i=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||i.line<t.display.viewFrom)e.removeAllRanges();else{var o=Ll(t,e.anchorNode,e.anchorOffset),n=Ll(t,e.focusNode,e.focusOffset);if(!o||o.bad||!n||n.bad||0!=it(at(o,n),r)||0!=it(st(o,n),i)){var n=t.display.view,l=r.line>=t.display.viewFrom&&Cl(t,r)||{node:n[0].measure.map[2],offset:0},s=i.line<t.display.viewTo&&Cl(t,i);if(s||(s={node:(u=(u=n[n.length-1].measure).maps?u.maps[u.maps.length-1]:u.map)[u.length-1],offset:u[u.length-2]-u[u.length-3]}),l&&s){var a,u=e.rangeCount&&e.getRangeAt(0);try{a=S(l.node,l.offset,s.offset,s.node)}catch(e){}a&&(!d&&t.state.focused?(e.collapse(l.node,l.offset),a.collapsed||(e.removeAllRanges(),e.addRange(a))):(e.removeAllRanges(),e.addRange(a)),u&&null==e.anchorNode?e.addRange(u):d&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},e.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},e.prototype.showMultipleSelections=function(e){T(this.cm.display.cursorDiv,e.cursors),T(this.cm.display.selectionDiv,e.selection)},e.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},e.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;e=e.getRangeAt(0).commonAncestorContainer;return A(this.div,e)},e.prototype.focus=function(){\"nocursor\"!=this.cm.options.readOnly&&(this.selectionInEditor()&&document.activeElement==this.div||this.showSelection(this.prepareSelection(),!0),this.div.focus())},e.prototype.blur=function(){this.div.blur()},e.prototype.getField=function(){return this.div},e.prototype.supportsTouch=function(){return!0},e.prototype.receivedFocus=function(){var t=this;this.selectionInEditor()?this.pollSelection():Er(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))})},e.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},e.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e,t,n=this.getSelection(),r=this.cm;if(a&&o&&this.cm.display.gutterSpecs.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}(n.anchorNode))return this.cm.triggerOnKeyDown({type:\"keydown\",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();this.composing||(this.rememberSelection(),e=Ll(r,n.anchorNode,n.anchorOffset),t=Ll(r,n.focusNode,n.focusOffset),e&&t&&Er(r,function(){Ei(r.doc,si(e,t),G),(e.bad||t.bad)&&(r.curOp.selectionChanged=!0)}))}},e.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t=this.cm,n=t.display,r=t.doc.sel.primary(),i=r.from(),r=r.to();if(0==i.ch&&i.line>t.firstLine()&&(i=rt(i.line-1,$e(t.doc,i.line-1).length)),r.ch==$e(t.doc,r.line).text.length&&r.line<t.lastLine()&&(r=rt(r.line+1,0)),i.line<n.viewFrom||r.line>n.viewTo-1)return!1;m=i.line==n.viewFrom||0==(m=er(t,i.line))?(e=Je(n.view[0].line),n.view[0].node):(e=Je(n.view[m].line),n.view[m-1].node.nextSibling);var o,r=er(t,r.line),r=r==n.view.length-1?(o=n.viewTo-1,n.lineDiv.lastChild):(o=Je(n.view[r+1].line)-1,n.view[r+1].node.previousSibling);if(!m)return!1;for(var l=t.doc.splitLines(function(l,e,t,s,a){var n=\"\",u=!1,c=l.doc.lineSeparator(),h=!1;function d(){u&&(n+=c,h&&(n+=c),u=h=!1)}function f(e){e&&(d(),n+=e)}for(;!function e(t){if(1==t.nodeType){var n=t.getAttribute(\"cm-text\");if(n)f(n);else if(n=t.getAttribute(\"cm-marker\"))(n=l.findMarks(rt(s,0),rt(a+1,0),(o=+n,function(e){return e.id==o}))).length&&(r=n[0].find(0))&&f(qe(l.doc,r.from,r.to).join(c));else if(\"false\"!=t.getAttribute(\"contenteditable\")){var r=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(/^br$/i.test(t.nodeName)||0!=t.textContent.length){r&&d();for(var i=0;i<t.childNodes.length;i++)e(t.childNodes[i]);/^(pre|p)$/i.test(t.nodeName)&&(h=!0),r&&(u=!0)}}}else 3==t.nodeType&&f(t.nodeValue.replace(/\\u200b/g,\"\").replace(/\\u00a0/g,\" \"));var o}(e),e!=t;)e=e.nextSibling,h=!1;return n}(t,m,r,e,o)),s=qe(t.doc,rt(e,0),rt(o,$e(t.doc,o).text.length));1<l.length&&1<s.length;)if(Y(l)==Y(s))l.pop(),s.pop(),o--;else{if(l[0]!=s[0])break;l.shift(),s.shift(),e++}for(var a=0,u=0,c=l[0],h=s[0],d=Math.min(c.length,h.length);a<d&&c.charCodeAt(a)==h.charCodeAt(a);)++a;for(var f=Y(l),p=Y(s),g=Math.min(f.length-(1==l.length?a:0),p.length-(1==s.length?a:0));u<g&&f.charCodeAt(f.length-u-1)==p.charCodeAt(p.length-u-1);)++u;if(1==l.length&&1==s.length&&e==i.line)for(;a&&a>i.ch&&f.charCodeAt(f.length-u-1)==p.charCodeAt(p.length-u-1);)a--,u++;l[l.length-1]=f.slice(0,f.length-u).replace(/^\\u200b+/,\"\"),l[0]=l[0].slice(a).replace(/\\u200b+$/,\"\");var m=rt(e,a),r=rt(o,s.length?Y(s).length-u:0);return 1<l.length||l[0]||it(m,r)?(qi(t.doc,l,m,r,\"+input\"),!0):void 0},e.prototype.ensurePolled=function(){this.forceCompositionEnd()},e.prototype.reset=function(){this.forceCompositionEnd()},e.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},e.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},e.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Er(this.cm,function(){return tr(e.cm)})},e.prototype.setUneditable=function(e){e.contentEditable=\"false\"},e.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Pr(this.cm,pl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},e.prototype.readOnlyChanged=function(e){this.div.contentEditable=String(\"nocursor\"!=e)},e.prototype.onContextMenu=function(){},e.prototype.resetPosition=function(){},e.prototype.needsContentAttribute=!0;var kl,Tl,Ml,Nl,Al,r=function(e){this.cm=e,this.prevInput=\"\",this.pollingFast=!1,this.polling=new I,this.hasSelection=!1,this.composing=null};function Ol(e,t,r,n){kl.defaults[e]=t,r&&(Tl[e]=n?function(e,t,n){n!=il&&r(e,t,n)}:r)}r.prototype.init=function(n){var e=this,r=this,i=this.cm;this.createField(n);var o=this.textarea;function t(e){if(!Ce(i,e)){if(i.somethingSelected())fl({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=vl(i);fl({lineWise:!0,text:t.text}),\"cut\"==e.type?i.setSelections(t.ranges,null,G):(r.prevInput=\"\",o.value=t.text.join(\"\\n\"),H(o))}\"cut\"==e.type&&(i.state.cutIncoming=+new Date)}}n.wrapper.insertBefore(this.wrapper,n.wrapper.firstChild),s&&(o.style.width=\"0px\"),ye(o,\"input\",function(){w&&9<=v&&e.hasSelection&&(e.hasSelection=null),r.poll()}),ye(o,\"paste\",function(e){Ce(i,e)||gl(e,i)||(i.state.pasteIncoming=+new Date,r.fastPoll())}),ye(o,\"cut\",t),ye(o,\"copy\",t),ye(n.scroller,\"paste\",function(e){if(!mn(n,e)&&!Ce(i,e)){if(!o.dispatchEvent)return i.state.pasteIncoming=+new Date,void r.focus();var t=new Event(\"paste\");t.clipboardData=e.clipboardData,o.dispatchEvent(t)}}),ye(n.lineSpace,\"selectstart\",function(e){mn(n,e)||Te(e)}),ye(o,\"compositionstart\",function(){var e=i.getCursor(\"from\");r.composing&&r.composing.range.clear(),r.composing={start:e,range:i.markText(e,i.getCursor(\"to\"),{className:\"CodeMirror-composing\"})}}),ye(o,\"compositionend\",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},r.prototype.createField=function(e){this.wrapper=bl(),this.textarea=this.wrapper.firstChild},r.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute(\"aria-label\",e):this.textarea.removeAttribute(\"aria-label\")},r.prototype.prepareSelection=function(){var e,t=this.cm,n=t.display,r=t.doc,i=sr(t);return t.options.moveInputWithCursor&&(e=Bn(t,r.sel.primary().head,\"div\"),t=n.wrapper.getBoundingClientRect(),r=n.lineDiv.getBoundingClientRect(),i.teTop=Math.max(0,Math.min(n.wrapper.clientHeight-10,e.top+r.top-t.top)),i.teLeft=Math.max(0,Math.min(n.wrapper.clientWidth-10,e.left+r.left-t.left))),i},r.prototype.showSelection=function(e){var t=this.cm.display;T(t.cursorDiv,e.cursors),T(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+\"px\",this.wrapper.style.left=e.teLeft+\"px\")},r.prototype.reset=function(e){var t,n;this.contextMenuPending||this.composing||((t=this.cm).somethingSelected()?(this.prevInput=\"\",n=t.getSelection(),this.textarea.value=n,t.state.focused&&H(this.textarea),w&&9<=v&&(this.hasSelection=n)):e||(this.prevInput=this.textarea.value=\"\",w&&9<=v&&(this.hasSelection=null)))},r.prototype.getField=function(){return this.textarea},r.prototype.supportsTouch=function(){return!1},r.prototype.focus=function(){if(\"nocursor\"!=this.cm.options.readOnly&&(!h||O()!=this.textarea))try{this.textarea.focus()}catch(e){}},r.prototype.blur=function(){this.textarea.blur()},r.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},r.prototype.receivedFocus=function(){this.slowPoll()},r.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},r.prototype.fastPoll=function(){var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,function e(){n.poll()||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))})},r.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||Pe(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(w&&9<=v&&this.hasSelection===i||g&&/[\\uf700-\\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||r||(r=\"\"),8666==o)return this.reset(),this.cm.execCommand(\"undo\")}for(var l=0,s=Math.min(r.length,i.length);l<s&&r.charCodeAt(l)==i.charCodeAt(l);)++l;return Er(t,function(){pl(t,i.slice(l),r.length-l,null,e.composing?\"*compose\":null),1e3<i.length||-1<i.indexOf(\"\\n\")?n.value=e.prevInput=\"\":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor(\"to\"),{className:\"CodeMirror-composing\"}))}),!0},r.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},r.prototype.onKeyPress=function(){w&&9<=v&&(this.hasSelection=null),this.fastPoll()},r.prototype.onContextMenu=function(e){var n=this,r=n.cm,i=r.display,o=n.textarea;n.contextMenuPending&&n.contextMenuPending();var l,s,t,a,u=Jn(r,e),c=i.scroller.scrollTop;function h(){var e,t;null!=o.selectionStart&&(t=\"\"+((e=r.somethingSelected())?o.value:\"\"),o.value=\"⇚\",o.value=t,n.prevInput=e?\"\":\"\",o.selectionStart=1,o.selectionEnd=t.length,i.selForContextMenu=r.doc.sel)}function d(){var e,t;n.contextMenuPending==d&&(n.contextMenuPending=!1,n.wrapper.style.cssText=s,o.style.cssText=l,w&&v<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=c),null!=o.selectionStart&&((!w||w&&v<9)&&h(),e=0,t=function(){i.selForContextMenu==r.doc.sel&&0==o.selectionStart&&0<o.selectionEnd&&\"\"==n.prevInput?Pr(r,Vi)(r):e++<10?i.detectingSelectAll=setTimeout(t,500):(i.selForContextMenu=null,i.input.reset())},i.detectingSelectAll=setTimeout(t,200)))}u&&!p&&(r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(u)&&Pr(r,Ei)(r.doc,si(u),G),l=o.style.cssText,s=n.wrapper.style.cssText,u=n.wrapper.offsetParent.getBoundingClientRect(),n.wrapper.style.cssText=\"position: static\",o.style.cssText=\"position: absolute; width: 30px; height: 30px;\\n top: \"+(e.clientY-u.top-5)+\"px; left: \"+(e.clientX-u.left-5)+\"px;\\n z-index: 1000; background: \"+(w?\"rgba(255, 255, 255, .05)\":\"transparent\")+\";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\",f&&(t=window.scrollY),i.input.focus(),f&&window.scrollTo(null,t),i.input.reset(),r.somethingSelected()||(o.value=n.prevInput=\" \"),n.contextMenuPending=d,i.selForContextMenu=r.doc.sel,clearTimeout(i.detectingSelectAll),w&&9<=v&&h(),x?(Ae(e),a=function(){we(window,\"mouseup\",a),setTimeout(d,20)},ye(window,\"mouseup\",a)):setTimeout(d,50))},r.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=\"nocursor\"==e,this.textarea.readOnly=!!e},r.prototype.setUneditable=function(){},r.prototype.needsContentAttribute=!1,Tl=(kl=ul).optionHandlers,kl.defineOption=Ol,kl.Init=il,Ol(\"value\",\"\",function(e,t){return e.setValue(t)},!0),Ol(\"mode\",null,function(e,t){e.doc.modeOption=t,di(e)},!0),Ol(\"indentUnit\",2,di,!0),Ol(\"indentWithTabs\",!1),Ol(\"smartIndent\",!0),Ol(\"tabSize\",4,function(e){fi(e),Hn(e),tr(e)},!0),Ol(\"lineSeparator\",null,function(e,r){if(e.doc.lineSep=r){var i=[],o=e.doc.first;e.doc.iter(function(e){for(var t=0;;){var n=e.text.indexOf(r,t);if(-1==n)break;t=n+r.length,i.push(rt(o,n))}o++});for(var t=i.length-1;0<=t;t--)qi(e.doc,r,i[t],rt(i[t].line,i[t].ch+r.length))}}),Ol(\"specialChars\",/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200c\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test(\"\\t\")?\"\":\"|\\t\"),\"g\"),n!=il&&e.refresh()}),Ol(\"specialCharPlaceholder\",Zt,function(e){return e.refresh()},!0),Ol(\"electricChars\",!0),Ol(\"inputStyle\",h?\"contenteditable\":\"textarea\",function(){throw new Error(\"inputStyle can not (yet) be changed in a running editor\")},!0),Ol(\"spellcheck\",!1,function(e,t){return e.getInputField().spellcheck=t},!0),Ol(\"autocorrect\",!1,function(e,t){return e.getInputField().autocorrect=t},!0),Ol(\"autocapitalize\",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),Ol(\"rtlMoveVisually\",!y),Ol(\"wholeLineUpdateBefore\",!0),Ol(\"theme\",\"default\",function(e){rl(e),Zr(e)},!0),Ol(\"keyMap\",\"default\",function(e,t,n){t=Do(t),n=n!=il&&Do(n);n&&n.detach&&n.detach(e,t),t.attach&&t.attach(e,n||null)}),Ol(\"extraKeys\",null),Ol(\"configureMouse\",null),Ol(\"lineWrapping\",!1,al,!0),Ol(\"gutters\",[],function(e,t){e.display.gutterSpecs=$r(t,e.options.lineNumbers),Zr(e)},!0),Ol(\"fixedGutter\",!0,function(e,t){e.display.gutters.style.left=t?qn(e.display)+\"px\":\"0\",e.refresh()},!0),Ol(\"coverGutterNextToScrollbar\",!1,function(e){return Nr(e)},!0),Ol(\"scrollbarStyle\",\"native\",function(e){Dr(e),Nr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),Ol(\"lineNumbers\",!1,function(e,t){e.display.gutterSpecs=$r(e.options.gutters,t),Zr(e)},!0),Ol(\"firstLineNumber\",1,Zr,!0),Ol(\"lineNumberFormatter\",function(e){return e},Zr,!0),Ol(\"showCursorWhenSelecting\",!1,lr,!0),Ol(\"resetSelectionOnContextMenu\",!0),Ol(\"lineWiseCopyCut\",!0),Ol(\"pasteLinesPerSelection\",!0),Ol(\"selectionsMayTouch\",!1),Ol(\"readOnly\",!1,function(e,t){\"nocursor\"==t&&(pr(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),Ol(\"screenReaderLabel\",null,function(e,t){t=\"\"===t?null:t,e.display.input.screenReaderLabelChanged(t)}),Ol(\"disableInput\",!1,function(e,t){t||e.display.input.reset()},!0),Ol(\"dragDrop\",!0,sl),Ol(\"allowDropFileTypes\",null),Ol(\"cursorBlinkRate\",530),Ol(\"cursorScrollMargin\",0),Ol(\"cursorHeight\",1,lr,!0),Ol(\"singleCursorHeightPerLine\",!0,lr,!0),Ol(\"workTime\",100),Ol(\"workDelay\",100),Ol(\"flattenSpans\",!0,fi,!0),Ol(\"addModeClass\",!1,fi,!0),Ol(\"pollInterval\",100),Ol(\"undoDepth\",200,function(e,t){return e.doc.history.undoDepth=t}),Ol(\"historyEventDelay\",1250),Ol(\"viewportMargin\",10,function(e){return e.refresh()},!0),Ol(\"maxHighlightLength\",1e4,fi,!0),Ol(\"moveInputWithCursor\",!0,function(e,t){t||e.display.input.resetPosition()}),Ol(\"tabindex\",null,function(e,t){return e.display.input.getField().tabIndex=t||\"\"}),Ol(\"autofocus\",null),Ol(\"direction\",\"ltr\",function(e,t){return e.doc.setDirection(t)},!0),Ol(\"phrases\",null),Nl=(Ml=ul).optionHandlers,Al=Ml.helpers={},Ml.prototype={constructor:Ml,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var n=this.options,r=n[e];n[e]==t&&\"mode\"!=e||(n[e]=t,Nl.hasOwnProperty(e)&&Pr(this,Nl[e])(this,t,r),xe(this,\"optionChange\",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?\"push\":\"unshift\"](Do(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:Ir(function(e,t){var n=e.token?e:Ml.getMode(this.options,e);if(n.startState)throw new Error(\"Overlays may not be stateful.\");!function(e,t,n){for(var r=0,i=n(t);r<e.length&&n(e[r])<=i;)r++;e.splice(r,0,t)}(this.state.overlays,{mode:n,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},function(e){return e.priority}),this.state.modeGen++,tr(this)}),removeOverlay:Ir(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||\"string\"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void tr(this)}}),indentLine:Ir(function(e,t,n){\"string\"!=typeof t&&\"number\"!=typeof t&&(t=null==t?this.options.smartIndent?\"smart\":\"prev\":t?\"add\":\"subtract\"),tt(this.doc,e)&&hl(this,e,t,n)}),indentSelection:Ir(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(hl(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&wr(this));else{for(var o=i.from(),l=i.to(),i=Math.max(n,o.line),n=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1,s=i;s<n;++s)hl(this,s,e);i=this.doc.sel.ranges;0==o.ch&&t.length==i.length&&0<i[r].from().ch&&Wi(this.doc,r,new oi(o,i[r].to()),G)}}}),getTokenAt:function(e,t){return xt(this,e,t)},getLineTokens:function(e,t){return xt(this,rt(e),t,!0)},getTokenTypeAt:function(e){e=ct(this.doc,e);var t,n=gt(this,$e(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var l=r+i>>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]<o)){t=n[2*l+2];break}r=1+l}}e=t?t.indexOf(\"overlay \"):-1;return e<0?t:0==e?null:t.slice(0,e-1)},getModeAt:function(e){var t=this.doc.mode;return t.innerMode?Ml.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!Al.hasOwnProperty(t))return n;var r=Al[t],i=this.getModeAt(e);if(\"string\"==typeof i[t])r[i[t]]&&n.push(r[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var l=r[i[t][o]];l&&n.push(l)}else i.helperType&&r[i.helperType]?n.push(r[i.helperType]):r[i.name]&&n.push(r[i.name]);for(var s=0;s<r._global.length;s++){var a=r._global[s];a.pred(i,this)&&-1==R(n,a.val)&&n.push(a.val)}return n},getStateAfter:function(e,t){var n=this.doc;return mt(this,(e=ut(n,null==e?n.first+n.size-1:e))+1,t).state},cursorCoords:function(e,t){var n=this.doc.sel.primary(),n=null==e?n.head:\"object\"==typeof e?ct(this.doc,e):e?n.from():n.to();return Bn(this,n,t||\"page\")},charCoords:function(e,t){return zn(this,ct(this.doc,e),t||\"page\")},coordsChar:function(e,t){return Vn(this,(e=Rn(this,e,t||\"page\")).left,e.top)},lineAtHeight:function(e,t){return e=Rn(this,{top:e,left:0},t||\"page\").top,et(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r,i=!1,e=\"number\"==typeof e?(r=this.doc.first+this.doc.size-1,e<this.doc.first?e=this.doc.first:r<e&&(e=r,i=!0),$e(this.doc,e)):e;return In(this,e,{top:0,left:0},t||\"page\",n||i).top+(i?this.doc.height-Vt(e):0)},defaultTextHeight:function(){return Yn(this.display)},defaultCharWidth:function(){return _n(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o,l,s=this.display,a=(e=Bn(this,ct(this.doc,e))).bottom,u=e.left;t.style.position=\"absolute\",t.setAttribute(\"cm-ignore-events\",\"true\"),this.display.input.setUneditable(t),s.sizer.appendChild(t),\"over\"==r?a=e.top:\"above\"!=r&&\"near\"!=r||(o=Math.max(s.wrapper.clientHeight,this.doc.height),l=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth),(\"above\"==r||e.bottom+t.offsetHeight>o)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=o&&(a=e.bottom),u+t.offsetWidth>l&&(u=l-t.offsetWidth)),t.style.top=a+\"px\",t.style.left=t.style.right=\"\",\"right\"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right=\"0px\"):(\"left\"==i?u=0:\"middle\"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+\"px\"),n&&(n=this,t={left:u,top:a,right:u+t.offsetWidth,bottom:a+t.offsetHeight},null!=(t=yr(n,t)).scrollTop&&Lr(n,t.scrollTop),null!=t.scrollLeft&&Tr(n,t.scrollLeft))},triggerOnKeyDown:Ir(Xo),triggerOnKeyPress:Ir(_o),triggerOnKeyUp:Yo,triggerOnMouseDown:Ir(Qo),execCommand:function(e){if(Io.hasOwnProperty(e))return Io[e].call(null,this)},triggerElectric:Ir(function(e){ml(this,e)}),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var o=ct(this.doc,e),l=0;l<t&&!(o=wl(this.doc,o,i,n,r)).hitSide;++l);return o},moveH:Ir(function(t,n){var r=this;this.extendSelectionsBy(function(e){return r.display.shift||r.doc.extend||e.empty()?wl(r.doc,e.head,t,n,r.options.rtlMoveVisually):t<0?e.from():e.to()},V)}),deleteH:Ir(function(n,r){var e=this.doc.sel,i=this.doc;e.somethingSelected()?i.replaceSelection(\"\",null,\"+delete\"):Wo(this,function(e){var t=wl(i,e.head,n,r,!1);return n<0?{from:t,to:e.head}:{from:e.head,to:t}})}),findPosV:function(e,t,n,r){var i=1,o=r;t<0&&(i=-1,t=-t);for(var l=ct(this.doc,e),s=0;s<t;++s){var a=Bn(this,l,\"div\");if(null==o?o=a.left:a.left=o,(l=xl(this,a,i,n)).hitSide)break}return l},moveV:Ir(function(r,i){var o=this,l=this.doc,s=[],a=!this.display.shift&&!l.extend&&l.sel.somethingSelected();if(l.extendSelectionsBy(function(e){if(a)return r<0?e.from():e.to();var t=Bn(o,e.head,\"div\");null!=e.goalColumn&&(t.left=e.goalColumn),s.push(t.left);var n=xl(o,t,r,i);return\"page\"==i&&e==l.sel.primary()&&br(o,zn(o,n,\"div\").top-t.top),n},V),s.length)for(var e=0;e<l.sel.ranges.length;e++)l.sel.ranges[e].goalColumn=s[e]}),findWordAt:function(e){var t=$e(this.doc,e.line).text,n=e.ch,r=e.ch;if(t){var i=this.getHelper(e,\"wordChars\");\"before\"!=e.sticky&&r!=t.length||!n?++r:--n;for(var o=t.charAt(n),l=J(o,i)?function(e){return J(e,i)}:/\\s/.test(o)?function(e){return/\\s/.test(e)}:function(e){return!/\\s/.test(e)&&!J(e)};0<n&&l(t.charAt(n-1));)--n;for(;r<t.length&&l(t.charAt(r));)++r}return new oi(rt(e.line,n),rt(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||(((this.state.overwrite=!this.state.overwrite)?D:L)(this.display.cursorDiv,\"CodeMirror-overwrite\"),xe(this,\"overwriteToggle\",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==O()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Ir(function(e,t){xr(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-wn(this)-this.display.barHeight,width:e.scrollWidth-wn(this)-this.display.barWidth,clientHeight:Cn(this),clientWidth:xn(this)}},scrollIntoView:Ir(function(e,t){var n;null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):\"number\"==typeof e?e={from:rt(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?(n=e,Cr(t=this),t.curOp.scrollToPos=n):Sr(this,e.from,e.to,e.margin)}),setSize:Ir(function(e,t){function n(e){return\"number\"==typeof e||/^\\d+$/.test(String(e))?e+\"px\":e}var r=this;null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Wn(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){nr(r,i,\"widget\");break}++i}),this.curOp.forceUpdate=!0,xe(this,\"refresh\",this)}),operation:function(e){return Er(this,e)},startOperation:function(){return Hr(this)},endOperation:function(){return Fr(this)},refresh:Ir(function(){var e=this.display.cachedTextHeight;tr(this),this.curOp.forceUpdate=!0,Hn(this),xr(this,this.doc.scrollLeft,this.doc.scrollTop),jr(this.display),(null==e||.5<Math.abs(e-Yn(this.display))||this.options.lineWrapping)&&Qn(this),xe(this,\"refresh\",this)}),swapDoc:Ir(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),vi(this,e),Hn(this),this.display.input.reset(),xr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,ln(this,\"swapDoc\",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ke(Ml),Ml.registerHelper=function(e,t,n){Al.hasOwnProperty(e)||(Al[e]=Ml[e]={_global:[]}),Al[e][t]=n},Ml.registerGlobalHelper=function(e,t,n,r){Ml.registerHelper(e,t,r),Al[e]._global.push({pred:n,val:r})};var Dl,Wl,Hl=\"iter insert remove copy getEditor constructor\".split(\" \");for(Dl in ho.prototype)ho.prototype.hasOwnProperty(Dl)&&R(Hl,Dl)<0&&(ul.prototype[Dl]=function(e){return function(){return e.apply(this.doc,arguments)}}(ho.prototype[Dl]));return ke(ho),ul.inputStyles={textarea:r,contenteditable:e},ul.defineMode=function(e){ul.defaults.mode||\"null\"==e||(ul.defaults.mode=e),function(e,t){2<arguments.length&&(t.dependencies=Array.prototype.slice.call(arguments,2)),ze[e]=t}.apply(this,arguments)},ul.defineMIME=function(e,t){Be[e]=t},ul.defineMode(\"null\",function(){return{token:function(e){return e.skipToEnd()}}}),ul.defineMIME(\"text/plain\",\"null\"),ul.defineExtension=function(e,t){ul.prototype[e]=t},ul.defineDocExtension=function(e,t){ho.prototype[e]=t},ul.fromTextArea=function(t,n){var e;function r(){t.value=s.getValue()}if(n=n?E(n):{},n.value=t.value,!n.tabindex&&t.tabIndex&&(n.tabindex=t.tabIndex),!n.placeholder&&t.placeholder&&(n.placeholder=t.placeholder),null==n.autofocus&&(e=O(),n.autofocus=e==t||null!=t.getAttribute(\"autofocus\")&&e==document.body),t.form&&(ye(t.form,\"submit\",r),!n.leaveSubmitMethodAlone)){var i=t.form,o=i.submit;try{var l=i.submit=function(){r(),i.submit=o,i.submit(),i.submit=l}}catch(e){}}n.finishInit=function(e){e.save=r,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,r(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display=\"\",t.form&&(we(t.form,\"submit\",r),n.leaveSubmitMethodAlone||\"function\"!=typeof t.form.submit||(t.form.submit=o))}},t.style.display=\"none\";var s=ul(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},n);return s},(Wl=ul).off=we,Wl.on=ye,Wl.wheelEventPixels=ni,Wl.Doc=ho,Wl.splitLines=Ee,Wl.countColumn=P,Wl.findColumn=K,Wl.isWordChar=Q,Wl.Pass=B,Wl.signal=xe,Wl.Line=Xt,Wl.changeEnd=ai,Wl.scrollbarModel=Or,Wl.Pos=rt,Wl.cmpPos=it,Wl.modes=ze,Wl.mimeModes=Be,Wl.resolveMode=Ge,Wl.getMode=Ue,Wl.modeExtensions=Ve,Wl.extendMode=Ke,Wl.copyState=je,Wl.startState=Ye,Wl.innerMode=Xe,Wl.commands=Io,Wl.keyMap=Lo,Wl.keyName=Oo,Wl.isModifierKey=No,Wl.lookupKey=Mo,Wl.normalizeKeyMap=To,Wl.StringStream=_e,Wl.SharedTextMarker=ao,Wl.TextMarker=lo,Wl.LineWidget=ro,Wl.e_preventDefault=Te,Wl.e_stopPropagation=Me,Wl.e_stop=Ae,Wl.addClass=D,Wl.contains=A,Wl.rmClass=L,Wl.keyNames=wo,ul.version=\"5.58.3\",ul});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/lib/codemirror.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/codemirror/lib/codemirror.css": {
"text": ".CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line > span::selection,.CodeMirror-line > span > span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line > span::-moz-selection,.CodeMirror-line > span > span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}\n",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/tiddlywiki/codemirror/lib/codemirror.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css": {
"text": ".CodeMirror-dialog {\n position: absolute;\n left: 0; right: 0;\n background: inherit;\n z-index: 15;\n padding: .1em .8em;\n overflow: hidden;\n color: inherit;\n}\n\n.CodeMirror-dialog-top {\n border-bottom: 1px solid #eee;\n top: 0;\n}\n\n.CodeMirror-dialog-bottom {\n border-top: 1px solid #eee;\n bottom: 0;\n}\n\n.CodeMirror-dialog input {\n border: none;\n outline: none;\n background: transparent;\n width: 20em;\n color: inherit;\n font-family: monospace;\n}\n\n.CodeMirror-dialog button {\n font-size: 70%;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js": {
"text": "!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(s){function f(e,o,n){var t=e.getWrapperElement(),i=t.appendChild(document.createElement(\"div\"));return i.className=n?\"CodeMirror-dialog CodeMirror-dialog-bottom\":\"CodeMirror-dialog CodeMirror-dialog-top\",\"string\"==typeof o?i.innerHTML=o:i.appendChild(o),s.addClass(t,\"dialog-opened\"),i}function p(e,o){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=o}s.defineExtension(\"openDialog\",function(e,o,n){n=n||{},p(this,null);var t=f(this,e,n.bottom),i=!1,r=this;function u(e){if(\"string\"==typeof e)a.value=e;else{if(i)return;i=!0,s.rmClass(t.parentNode,\"dialog-opened\"),t.parentNode.removeChild(t),r.focus(),n.onClose&&n.onClose(t)}}var l,a=t.getElementsByTagName(\"input\")[0];return a?(a.focus(),n.value&&(a.value=n.value,!1!==n.selectValueOnOpen&&a.select()),n.onInput&&s.on(a,\"input\",function(e){n.onInput(e,a.value,u)}),n.onKeyUp&&s.on(a,\"keyup\",function(e){n.onKeyUp(e,a.value,u)}),s.on(a,\"keydown\",function(e){n&&n.onKeyDown&&n.onKeyDown(e,a.value,u)||((27==e.keyCode||!1!==n.closeOnEnter&&13==e.keyCode)&&(a.blur(),s.e_stop(e),u()),13==e.keyCode&&o(a.value,e))}),!1!==n.closeOnBlur&&s.on(t,\"focusout\",function(e){null!==e.relatedTarget&&u()})):(l=t.getElementsByTagName(\"button\")[0])&&(s.on(l,\"click\",function(){u(),r.focus()}),!1!==n.closeOnBlur&&s.on(l,\"blur\",u),l.focus()),u}),s.defineExtension(\"openConfirm\",function(e,o,n){p(this,null);var t=f(this,e,n&&n.bottom),i=t.getElementsByTagName(\"button\"),r=!1,u=this,l=1;function a(){r||(r=!0,s.rmClass(t.parentNode,\"dialog-opened\"),t.parentNode.removeChild(t),u.focus())}i[0].focus();for(var c=0;c<i.length;++c){var d=i[c];!function(o){s.on(d,\"click\",function(e){s.e_preventDefault(e),a(),o&&o(u)})}(o[c]),s.on(d,\"blur\",function(){--l,setTimeout(function(){l<=0&&a()},200)}),s.on(d,\"focus\",function(){++l})}}),s.defineExtension(\"openNotification\",function(e,o){p(this,u);var n,t=f(this,e,o&&o.bottom),i=!1,r=o&&void 0!==o.duration?o.duration:5e3;function u(){i||(i=!0,clearTimeout(n),s.rmClass(t.parentNode,\"dialog-opened\"),t.parentNode.removeChild(t))}return s.on(t,\"click\",function(e){s.e_preventDefault(e),u()}),r&&(n=setTimeout(u,r)),u})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js": {
"text": "!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(r){\"use strict\";var s=\"CodeMirror-activeline\",c=\"CodeMirror-activeline-background\",l=\"CodeMirror-activeline-gutter\";function f(e){for(var t=0;t<e.state.activeLines.length;t++)e.removeLineClass(e.state.activeLines[t],\"wrap\",s),e.removeLineClass(e.state.activeLines[t],\"background\",c),e.removeLineClass(e.state.activeLines[t],\"gutter\",l)}function o(t,e){for(var n=[],i=0;i<e.length;i++){var r,o=e[i],a=t.getOption(\"styleActiveLine\");(\"object\"==typeof a&&a.nonEmpty?o.anchor.line==o.head.line:o.empty())&&(r=t.getLineHandleVisualStart(o.head.line),n[n.length-1]!=r&&n.push(r))}!function(e,t){if(e.length==t.length){for(var n=0;n<e.length;n++)if(e[n]!=t[n])return;return 1}}(t.state.activeLines,n)&&t.operation(function(){f(t);for(var e=0;e<n.length;e++)t.addLineClass(n[e],\"wrap\",s),t.addLineClass(n[e],\"background\",c),t.addLineClass(n[e],\"gutter\",l);t.state.activeLines=n})}function a(e,t){o(e,t.ranges)}r.defineOption(\"styleActiveLine\",!1,function(e,t,n){var i=n!=r.Init&&n;t!=i&&(i&&(e.off(\"beforeSelectionChange\",a),f(e),delete e.state.activeLines),t&&(e.state.activeLines=[],o(e,e.listSelections()),e.on(\"beforeSelectionChange\",a)))})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js": {
"text": "!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\";e.modeInfo=[{name:\"CMake\",mime:\"text/x-cmake\",mode:\"cmake\",ext:[\"cmake\",\"cmake.in\"],file:/^CMakeLists.txt$/},{name:\"Cython\",mime:\"text/x-cython\",mode:\"python\",ext:[\"pyx\",\"pxd\",\"pxi\"]},{name:\"CSS\",mime:\"text/css\",mode:\"css\",ext:[\"css\"]},{name:\"diff\",mime:\"text/x-diff\",mode:\"diff\",ext:[\"diff\",\"patch\"]},{name:\"Embedded Javascript\",mime:\"application/x-ejs\",mode:\"htmlembedded\",ext:[\"ejs\"]},{name:\"Embedded Ruby\",mime:\"application/x-erb\",mode:\"htmlembedded\",ext:[\"erb\"]},{name:\"Erlang\",mime:\"text/x-erlang\",mode:\"erlang\",ext:[\"erl\"]},{name:\"GitHub Flavored Markdown\",mime:\"text/x-gfm\",mode:\"gfm\",file:/^(readme|contributing|history).md$/i},{name:\"Go\",mime:\"text/x-go\",mode:\"go\",ext:[\"go\"]},{name:\"ASP.NET\",mime:\"application/x-aspx\",mode:\"htmlembedded\",ext:[\"aspx\"],alias:[\"asp\",\"aspx\"]},{name:\"HTML\",mime:\"text/html\",mode:\"htmlmixed\",ext:[\"html\",\"htm\",\"handlebars\",\"hbs\"],alias:[\"xhtml\"]},{name:\"HTTP\",mime:\"message/http\",mode:\"http\"},{name:\"JavaScript\",mimes:[\"text/javascript\",\"text/ecmascript\",\"application/javascript\",\"application/x-javascript\",\"application/ecmascript\"],mode:\"javascript\",ext:[\"js\"],alias:[\"ecmascript\",\"js\",\"node\"]},{name:\"JSON\",mimes:[\"application/json\",\"application/x-json\"],mode:\"javascript\",ext:[\"json\",\"map\"],alias:[\"json5\"]},{name:\"JSON-LD\",mime:\"application/ld+json\",mode:\"javascript\",ext:[\"jsonld\"],alias:[\"jsonld\"]},{name:\"Lua\",mime:\"text/x-lua\",mode:\"lua\",ext:[\"lua\"]},{name:\"Markdown\",mime:\"text/x-markdown\",mode:\"markdown\",ext:[\"markdown\",\"md\",\"mkd\"]},{name:\"MySQL\",mime:\"text/x-mysql\",mode:\"sql\"},{name:\"Plain Text\",mime:\"text/plain\",mode:\"null\",ext:[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\"]},{name:\"Python\",mime:\"text/x-python\",mode:\"python\",ext:[\"BUILD\",\"bzl\",\"py\",\"pyw\"],file:/^(BUCK|BUILD)$/},{name:\"SCSS\",mime:\"text/x-scss\",mode:\"css\",ext:[\"scss\"]},{name:\"LaTeX\",mime:\"text/x-latex\",mode:\"stex\",ext:[\"text\",\"ltx\",\"tex\"],alias:[\"tex\"]},{name:\"TiddlyWiki \",mime:\"text/x-tiddlywiki\",mode:\"tiddlywiki\"}];for(var t=0;t<e.modeInfo.length;t++){var m=e.modeInfo[t];m.mimes&&(m.mime=m.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.mime==t)return i;if(i.mimes)for(var a=0;a<i.mimes.length;a++)if(i.mimes[a]==t)return i}return/\\+xml$/.test(t)?e.findModeByMIME(\"application/xml\"):/\\+json$/.test(t)?e.findModeByMIME(\"application/json\"):void 0},e.findModeByExtension=function(t){for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.ext)for(var a=0;a<i.ext.length;a++)if(i.ext[a]==t)return i}},e.findModeByFileName=function(t){for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.file&&i.file.test(t))return i}var a=t.lastIndexOf(\".\"),o=a>-1&&t.substring(a+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByName=function(t){t=t.toLowerCase();for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.name.toLowerCase()==t)return i;if(i.alias)for(var a=0;a<i.alias.length;a++)if(i.alias[a].toLowerCase()==t)return i}}});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/keyboard": {
"title": "$:/plugins/tiddlywiki/codemirror/keyboard",
"text": "\n!!Default keyboard shortcuts\n\n!!!Basic shortcuts\n\n|Shortcut |Function |h\n|Left |goCharLeft |\n|Right |goCharRight |\n|Up |goLineUp |\n|Down |goLineDown |\n|End |goLineEnd |\n|Home |goLineStartSmart |\n|~PageUp |goPageUp |\n|~PageDown |goPageDown |\n|Delete |delCharAfter |\n|Backspace |delCharBefore |\n|Shift-Backspace |delCharBefore |\n|Tab |defaultTab |\n|Shift-Tab |indentAuto |\n|Enter |newlineAndIndent |\n|Insert |toggleOverwrite |\n|Ctrl-Esc |singleSelection |\n\n\n!!!Shortcuts on Windows and Linux\n\n|Shortcut |Function |h\n|Ctrl-A |selectAll |\n|Ctrl-D |deleteLine |\n|Ctrl-Z |undo |\n|Shift-Ctrl-Z |redo |\n|Ctrl-Y |redo |\n|Ctrl-Home |goDocStart |\n|Ctrl-End |goDocEnd |\n|Ctrl-Up |goLineUp |\n|Ctrl-Down |goLineDown |\n|Ctrl-Left |goGroupLeft |\n|Ctrl-Right |goGroupRight |\n|Alt-Left |goLineStart |\n|Alt-Right |goLineEnd |\n|Ctrl-Backspace |delGroupBefore |\n|Ctrl-Delete |delGroupAfter |\n|Ctrl-F |find |\n|Ctrl-G |findNext |\n|Shift-Ctrl-G |findPrev |\n|Shift-Ctrl-F |replace |\n|Shift-Ctrl-R |replaceAll |\n|Ctrl-[ |indentLess |\n|Ctrl-] |indentMore |\n|Alt-U |undoSelection |\n|Shift-Ctrl-U |redoSelection |\n|Shift-Alt-U |redoSelection |\n\n\n!!!Shortcuts on ~MacOs\n\n|Shortcut |Function |h\n|Cmd-A |selectAll |\n|Cmd-D |deleteLine |\n|Cmd-Z |undo |\n|Shift-Cmd-Z |redo |\n|Cmd-Y |redo |\n|Cmd-Home |goDocStart |\n|Cmd-Up |goDocStart |\n|Cmd-End |goDocEnd |\n|Cmd-Down |goDocEnd |\n|Alt-Left |goGroupLeft |\n|Alt-Right |goGroupRight |\n|Cmd-Left |goLineLeft |\n|Cmd-Right |goLineRight |\n|Alt-Backspace |delGroupBefore |\n|Ctrl-Alt-Backspace |delGroupAfter |\n|Alt-Delete |delGroupAfter |\n|Cmd-F |find |\n|Cmd-G |findNext |\n|Shift-Cmd-G |findPrev |\n|Cmd-Alt-F |replace |\n|Shift-Cmd-Alt-F |replaceAll |\n|Cmd-[ |indentLess |\n|Cmd-] |indentMore |\n|Cmd-Backspace |delWrappedLineLeft |\n|Cmd-Delete |delWrappedLineRight |\n|Alt-U |undoSelection |\n|Shift-Alt-U |redoSelection |\n|Ctrl-Up |goDocStart |\n|Ctrl-Down |goDocEnd |\n|Ctrl-F |goCharRight |\n|Ctrl-B |goCharLeft |\n|Ctrl-P |goLineUp |\n|Ctrl-N |goLineDown |\n|Alt-F |goWordRight |\n|Alt-B |goWordLeft |\n|Ctrl-A |goLineStart |\n|Ctrl-E |goLineEnd |\n|Ctrl-V |goPageDown |\n|Shift-Ctrl-V |goPageUp |\n|Ctrl-D |delCharAfter |\n|Ctrl-H |delCharBefore |\n|Alt-D |delWordAfter |\n|Alt-Backspace |delWordBefore |\n|Ctrl-K |killLine |\n|Alt-T |transposeChars |\n|Ctrl-O |openLine |\n\n\n"
},
"$:/plugins/tiddlywiki/codemirror/license": {
"title": "$:/plugins/tiddlywiki/codemirror/license",
"text": "\"\"\"\n~CodeMirror, copyright (c) by Marijn Haverbeke and others\nDistributed under an MIT license: http://codemirror.net/LICENSE\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2018, UnaMesa Association\nDistributed under an BSD license: https://tiddlywiki.com/#License\n\"\"\"\n"
},
"$:/plugins/tiddlywiki/codemirror/readme": {
"title": "$:/plugins/tiddlywiki/codemirror/readme",
"text": "This plugin provides an enhanced text editor component based on [[CodeMirror|http://codemirror.net]]. The basic configuration is designed to be as lightweight as possible and is just around 235kb of size. Additional features can be installed with ~CodeMirror ~AddOns from the plugin library.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/codemirror]]\n\nBased on ~CodeMirror version 5.58.3\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/cursorBlinkRate": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/cursorBlinkRate",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/cursorBlinkRate/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/cursorBlinkRate/\n\n|<$link to=\"$:/config/codemirror/cursorBlinkRate\"><<lingo hint>></$link> |<$edit-text tiddler=\"$:/config/codemirror/cursorBlinkRate\" default=\"\" placeholder=\"cursorBlinkRate\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/editorFont": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/editorFont",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/editorFont/hint}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/indentUnit": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/indentUnit",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/indentUnit/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/indentUnit/\n\n|<$link to=\"$:/config/codemirror/indentUnit\"><<lingo hint>></$link> |<$edit-text tiddler=\"$:/config/codemirror/indentUnit\" default=\"\" placeholder=\"indentUnit\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/indentWithTabs": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/indentWithTabs",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/indentWithTabs/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/indentWithTabs/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/indentWithTabs\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\"> <$link to=\"$:/config/codemirror/indentWithTabs\"><<lingo info>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/keyMap": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/keyMap",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/keyMap/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/keyMap\n\n<$link to=\"$:/config/codemirror/keyMap\"><<lingo hint>></$link>\n\n<$select tiddler=\"$:/config/codemirror/keyMap\" default=\"default\">\n<option value=\"default\">default</option>\n<$list filter=\"[all[shadows+tiddlers]module-type[codemirror-keymap]!has[draft.of]get[text]]\">\n<option value=<<currentTiddler>>><$transclude><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/lineNumbers/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/lineNumbers/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/lineNumbers\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"false\"> <$link to=\"$:/config/codemirror/lineNumbers\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/lineWrapping/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/lineWrapping/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/lineWrapping\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\"> <$link to=\"$:/config/codemirror/lineWrapping\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/showCursorWhenSelecting/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/showCursorWhenSelecting/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/showCursorWhenSelecting\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\"> <$link to=\"$:/config/codemirror/showCursorWhenSelecting\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/smartIndent": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/smartIndent",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/smartIndent/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/smartIndent/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/smartIndent\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\"> <$link to=\"$:/config/codemirror/smartIndent\"><<lingo info>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/styleActiveLine/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/styleActiveLine/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/styleActiveLine\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"false\"> <$link to=\"$:/config/codemirror/styleActiveLine\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/tabSize": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/tabSize",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/tabSize/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/tabSize/\n\n|<$link to=\"$:/config/codemirror/tabSize\"><<lingo hint>></$link> |<$edit-text tiddler=\"$:/config/codemirror/tabSize\" default=\"\" placeholder=\"tabSize\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/theme": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/theme",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/theme/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/\n\n<$link to=\"$:/config/codemirror/theme\"><<lingo hint>></$link>\n\n<$select tiddler=\"$:/config/codemirror/theme\" default=\"default\">\n<option value=\"default\">default</option>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]module-type[codemirror-theme]!has[draft.of]get[name]]\">\n<option value=<<currentTiddler>>><$transclude field=\"name\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n\n//see the [[CodeMirror Usage|$:/plugins/tiddlywiki/codemirror/usage]] how to add themes//\n"
},
"$:/plugins/tiddlywiki/codemirror/styles": {
"title": "$:/plugins/tiddlywiki/codemirror/styles",
"tags": "[[$:/tags/Stylesheet]]",
"module-type": "codemirror-theme",
"name": "tiddlywiki",
"text": "\\define set-fat-cursor-background-css(colour,colourA,colourB)\n<$set name=\"backgroundColour\" value=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">>>\n.cm-s-tiddlywiki.cm-fat-cursor .CodeMirror-cursor { background: <<backgroundColour>>; }\n.cm-s-tiddlywiki .cm-animate-fat-cursor { background-color: <<backgroundColour>>; }\n</$set>\n\\end\n\\define set-fat-cursor-background-colours(palette)\n<$macrocall $name=\"set-fat-cursor-background-css\" colour={{$palette$##foreground}} colourA=\"#77ee77\" colourB=\"#586e75\"/>\n\\end\n\\define set-fat-cursor-background()\n<$macrocall $name=\"set-fat-cursor-background-colours\" palette={{$:/palette}}/>\n\\end\n\\define set-selection-background-css(colour,colourA,colourB,tiddlerEditorBackground)\n<$wikify name=\"tiddlerEditorBackground\" text={{{ [[$tiddlerEditorBackground$]lowercase[]] }}}>\n<$set name=\"backgroundColour\" value=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">>>\n<$set name=\"backgroundColour\" value={{{ [<backgroundColour>lowercase[]match<tiddlerEditorBackground>then[]] ~[<backgroundColour>] }}}>\n.cm-s-tiddlywiki div.CodeMirror-selected { background: <<backgroundColour>>; color: <<colour foreground>>; }\n.cm-s-tiddlywiki.CodeMirror ::selection { background: <<backgroundColour>>; color: <<colour foreground>>; }\n.cm-s-tiddlywiki .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: <<backgroundColour>>; color: <<colour foreground>>; }\n.cm-s-tiddlywiki .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: <<backgroundColour>>; color: <<colour foreground>>; }\n</$set>\n</$set>\n</$wikify>\n\\end\n\\define set-selection-background-colours(palette)\n<$macrocall $name=\"set-selection-background-css\" colour={{$palette$##foreground}} colourA={{{ [{$palette$##selection-background}!match[]!prefix[<<]!suffix[>>]] ~#073642 }}} colourB={{{ [{$palette$##selection-background}!match[]!prefix[<<]!suffix[>>]] ~#eee8d5 }}} tiddlerEditorBackground={{$palette$##tiddler-editor-background}}/>\n\\end\n\\define set-selection-background()\n<$macrocall $name=\"set-selection-background-colours\" palette={{$:/palette}}/>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/* Make the editor resize to fit its content */\n\n.CodeMirror {\n\theight: auto;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.5;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n}\n\n.CodeMirror-scroll {\n\toverflow-x: auto;\n\toverflow-y: hidden;\n}\n\n.cm-s-tiddlywiki {\n color-profile: sRGB;\n rendering-intent: auto;\n}\n\n.cm-s-tiddlywiki.CodeMirror, .cm-s-tiddlywiki .CodeMirror-gutters { background-color: <<colour tiddler-editor-background>>; color: <<colour foreground>>; }\n.cm-s-tiddlywiki .CodeMirror-gutters {background: <<colour tiddler-editor-background>>; border-right: 1px solid <<colour tiddler-editor-border>>;}\n.cm-s-tiddlywiki .CodeMirror-linenumber {color: <<colour foreground>>;}\n.cm-s-tiddlywiki .CodeMirror-cursor { border-left: 2px solid <<colour foreground>>; }\n.cm-s-tiddlywiki span.cm-comment { color: #586e75; font-style:italic; font-weight:normal; }\n.cm-s-tiddlywiki .CodeMirror-activeline-background, .cm-s-tiddlywiki .CodeMirror-activeline-gutter .CodeMirror-linenumber { background: rgba(127,127,127,0.2); }\n.cm-s-tiddlywiki span.cm-matchhighlight { color: <<colour background>>; background-color: <<colour primary>>; font-weight: normal;}\n.cm-s-tiddlywiki .CodeMirror-widget { text-shadow: none; }\n.cm-s-tiddlywiki .CodeMirror-dialog { background: <<colour tiddler-background>>; }\n.cm-s-tiddlywiki .cm-header { color: #586e75; }\n.cm-s-tiddlywiki .cm-quote { color: #93a1a1; }\n.cm-s-tiddlywiki .cm-keyword { color: #cb4b16; }\n.cm-s-tiddlywiki .cm-atom { color: #d33682; }\n.cm-s-tiddlywiki .cm-number { color: #d33682; }\n.cm-s-tiddlywiki .cm-def { color: #2aa198; }\n.cm-s-tiddlywiki .cm-variable { color: #839496; }\n.cm-s-tiddlywiki .cm-variable-2 { color: #b58900; }\n.cm-s-tiddlywiki .cm-variable-3, .cm-s-tiddlywiki .cm-type { color: #6c71c4; }\n.cm-s-tiddlywiki .cm-property { color: #2aa198; }\n.cm-s-tiddlywiki .cm-operator { color: #6c71c4; }\n.cm-s-tiddlywiki .cm-comment { color: #586e75; font-style:italic; }\n.cm-s-tiddlywiki .cm-string { color: #859900; }\n.cm-s-tiddlywiki .cm-string-2 { color: #b58900; }\n.cm-s-tiddlywiki .cm-meta { color: #859900; }\n.cm-s-tiddlywiki .cm-qualifier { color: #b58900; }\n.cm-s-tiddlywiki .cm-builtin { color: #d33682; }\n.cm-s-tiddlywiki .cm-bracket { color: #cb4b16; }\n.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }\n.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }\n.cm-s-tiddlywiki .cm-tag { color: #93a1a1; }\n.cm-s-tiddlywiki .cm-attribute { color: #2aa198; }\n.cm-s-tiddlywiki .cm-hr { color: transparent; border-top: 1px solid #586e75; display: block; }\n.cm-s-tiddlywiki .cm-link { color: #93a1a1; cursor: pointer; }\n.cm-s-tiddlywiki .cm-special { color: #6c71c4; }\n.cm-s-tiddlywiki .cm-em { color: #999; text-decoration: underline; text-decoration-style: dotted; }\n.cm-s-tiddlywiki .cm-error,\n.cm-s-tiddlywiki .cm-invalidchar { color: #586e75; border-bottom: 1px dotted #dc322f; }\n.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }\n.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }\n.cm-s-tiddlywiki .cm-searching { background: rgba(243, 155, 53, .3); outline: 1px solid #F39B35; }\n<<set-fat-cursor-background>>\n<<set-selection-background>>\n"
},
"$:/core/ui/ControlPanel/Settings/CodeMirror": {
"title": "$:/core/ui/ControlPanel/Settings/CodeMirror",
"tags": "$:/tags/ControlPanel/SettingsTab",
"caption": "CodeMirror",
"list-after": "$:/core/ui/ControlPanel/Settings/TiddlyWiki",
"text": "\\define lingo-base() $:/language/codemirror/controlPanel/\n\n<<lingo hint>>\n\n<$link to=\"$:/plugins/tiddlywiki/codemirror/usage\"><<lingo usage>></$link>\n\n<$link to=\"$:/plugins/tiddlywiki/codemirror/keyboard\"><<lingo keyboard>></$link>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings/CodeMirror]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/SettingsTab]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Settings/TiddlyWiki\" explicitState=\"$:/state/tab--697582678\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Settings/TiddlyWiki": {
"title": "$:/core/ui/ControlPanel/Settings/TiddlyWiki",
"tags": "$:/tags/ControlPanel/SettingsTab",
"caption": "TiddlyWiki",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/plugins/tiddlywiki/codemirror/usage": {
"title": "$:/plugins/tiddlywiki/codemirror/usage",
"text": "! Configuration\n\nConfiguration for the ~CodeMirror text-editor can be done from within the CodeMirror Settings Tab in the [[ControlPanel|$:/ControlPanel]] (Settings - ~CodeMirror)\n\n\n!!Setting a different Theme\n\n~CodeMirror themes are available in the [ext[official GitHub repository|https://github.com/codemirror/CodeMirror/tree/master/theme]]\n\nMore themes can be found at https://github.com/FarhadG/code-mirror-themes/tree/master/themes and previewed [ext[here|http://farhadg.github.io/code-mirror-themes/]]\n\n\nTo add a theme to your wiki, follow these four steps:\n\n* choose one of the CSS files and copy its content to a new tiddler\n* remove all comments from the top and tag the tiddler with <<tag-pill \"$:/tags/Stylesheet\">>\n* add a field \"module-type\" with the value \"codemirror-theme\". add a field \"name\" with the exact ''name'' of the theme as value\n* save the tiddler and go to the Settings tab in $:/ControlPanel - look for the \"theme\" dropdown to select your newly added theme\n\n\n!!Line Numbers\n\nTo show or hide the Line Numbers at the left, go to ~ControlPanel - Settings - ~CodeMirror and look for the \"Line Numbers\" checkbox\n\n\n!!Line Wrapping\n\nControls if long lines get visually wrapped to a new line if they're too long to fit the editor width or if the editor should scroll horizontally\n\nTo change the line-wrapping behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \"Line Wrapping\" checkbox\n\n\n!!Show Cursor when selecting\n\nDefines whether the Mouse cursor should be visually shown or hidden when making a text-selection\n\nTo change the show-cursor-when-selecting behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \"Show cursor when selecting\" checkbox\n\n\n!!~CodeMirror Font Family\n\nThe Font-Family used within the ~CodeMirror text-editor defaults to \"monospace\" which will choose your configured monospace system-font\n\nThat setting can be overridden entering one or more Font-Families in the \"Font Family\" input field at ~ControlPanel - Settings - ~CodeMirror\n\n* The entries must be separated by semicolons ','\n* Font-Family Names that contain spaces must be quoted like \"My Font\"\n* If a list of Font-Families is specified, the last Font-Family found on the user-system gets used, non-existing fonts get ignored\n* If none of the specified Font-Families is available, ~CodeMirror uses the default \"monospace\"\n\n\n!!\"Hidden\" Settings:\n\n!!!Cursor Blink Rate\n\nThe cursor blink-rate defines how fast (in milliseconds) the cursor blinks inside the textarea\n\nYou can change it by editing $:/config/codemirror/cursorBlinkRate\n\"0\" disables blinking\n\n!!!Tabsize\n\nThe Tabsize defines the width of a tab character. Default is 4.\n\nYou can change it by editing $:/config/codemirror/tabSize\n\n!!!Indent Unit\n\nNot enabled for vnd.tiddlywiki and x-tiddlywiki\n\nDefines how many spaces a text-block should be indented. Defaults to 2.\n\nYou can change it by editing $:/config/codemirror/indentUnit\n\n"
}
}
}
{
"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<=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!function(l){\"object\"==typeof exports&&\"object\"==typeof module?l(require(\"../../lib/codemirror\"),require(\"./xml-hint\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\",\"./xml-hint\"],l):l(CodeMirror)}(function(n){\"use strict\";var l=\"ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu\".split(\" \"),t=[\"_blank\",\"_self\",\"_top\",\"_parent\"],e=[\"ascii\",\"utf-8\",\"utf-16\",\"latin1\",\"latin1\"],a=[\"get\",\"post\",\"put\",\"delete\"],r=[\"application/x-www-form-urlencoded\",\"multipart/form-data\",\"text/plain\"],o=[\"all\",\"screen\",\"print\",\"embossed\",\"braille\",\"handheld\",\"print\",\"projection\",\"screen\",\"tty\",\"tv\",\"speech\",\"3d-glasses\",\"resolution [>][<][=] [X]\",\"device-aspect-ratio: X/Y\",\"orientation:portrait\",\"orientation:landscape\",\"device-height: [X]\",\"device-width: [X]\"],s={attrs:{}},u={a:{attrs:{href:null,ping:null,type:null,media:o,target:t,hreflang:l}},abbr:s,acronym:s,address:s,applet:s,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:o,hreflang:l,type:null,shape:[\"default\",\"rect\",\"circle\",\"poly\"]}},article:s,aside:s,audio:{attrs:{src:null,mediagroup:null,crossorigin:[\"anonymous\",\"use-credentials\"],preload:[\"none\",\"metadata\",\"auto\"],autoplay:[\"\",\"autoplay\"],loop:[\"\",\"loop\"],controls:[\"\",\"controls\"]}},b:s,base:{attrs:{href:null,target:t}},basefont:s,bdi:s,bdo:s,big:s,blockquote:{attrs:{cite:null}},body:s,br:s,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[\"\",\"autofocus\"],disabled:[\"\",\"autofocus\"],formenctype:r,formmethod:a,formnovalidate:[\"\",\"novalidate\"],formtarget:t,type:[\"submit\",\"reset\",\"button\"]}},canvas:{attrs:{width:null,height:null}},caption:s,center:s,cite:s,code:s,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[\"command\",\"checkbox\",\"radio\"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[\"\",\"disabled\"],checked:[\"\",\"checked\"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[\"\",\"disabled\"],multiple:[\"\",\"multiple\"]}},datalist:{attrs:{data:null}},dd:s,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[\"\",\"open\"]}},dfn:s,dir:s,div:s,dl:s,dt:s,em:s,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[\"\",\"disabled\"],form:null,name:null}},figcaption:s,figure:s,font:s,footer:s,form:{attrs:{action:null,name:null,\"accept-charset\":e,autocomplete:[\"on\",\"off\"],enctype:r,method:a,novalidate:[\"\",\"novalidate\"],target:t}},frame:s,frameset:s,h1:s,h2:s,h3:s,h4:s,h5:s,h6:s,head:{attrs:{},children:[\"title\",\"base\",\"link\",\"style\",\"meta\",\"script\",\"noscript\",\"command\"]},header:s,hgroup:s,hr:s,html:{attrs:{manifest:null},children:[\"head\",\"body\"]},i:s,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[\"allow-top-navigation\",\"allow-same-origin\",\"allow-forms\",\"allow-scripts\"],seamless:[\"\",\"seamless\"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[\"anonymous\",\"use-credentials\"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[\"audio/*\",\"video/*\",\"image/*\"],autocomplete:[\"on\",\"off\"],autofocus:[\"\",\"autofocus\"],checked:[\"\",\"checked\"],disabled:[\"\",\"disabled\"],formenctype:r,formmethod:a,formnovalidate:[\"\",\"novalidate\"],formtarget:t,multiple:[\"\",\"multiple\"],readonly:[\"\",\"readonly\"],required:[\"\",\"required\"],type:[\"hidden\",\"text\",\"search\",\"tel\",\"url\",\"email\",\"password\",\"datetime\",\"date\",\"month\",\"week\",\"time\",\"datetime-local\",\"number\",\"range\",\"color\",\"checkbox\",\"radio\",\"file\",\"submit\",\"image\",\"reset\",\"button\"]}},ins:{attrs:{cite:null,datetime:null}},kbd:s,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[\"\",\"autofocus\"],disabled:[\"\",\"disabled\"],keytype:[\"RSA\"]}},label:{attrs:{for:null,form:null}},legend:s,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:l,media:o,sizes:[\"all\",\"16x16\",\"16x16 32x32\",\"16x16 32x32 64x64\"]}},map:{attrs:{name:null}},mark:s,menu:{attrs:{label:null,type:[\"list\",\"context\",\"toolbar\"]}},meta:{attrs:{content:null,charset:e,name:[\"viewport\",\"application-name\",\"author\",\"description\",\"generator\",\"keywords\"],\"http-equiv\":[\"content-language\",\"content-type\",\"default-style\",\"refresh\"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:s,noframes:s,noscript:s,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[\"\",\"typemustmatch\"]}},ol:{attrs:{reversed:[\"\",\"reversed\"],start:null,type:[\"1\",\"a\",\"A\",\"i\",\"I\"]}},optgroup:{attrs:{disabled:[\"\",\"disabled\"],label:null}},option:{attrs:{disabled:[\"\",\"disabled\"],label:null,selected:[\"\",\"selected\"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:s,param:{attrs:{name:null,value:null}},pre:s,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:s,rt:s,ruby:s,s:s,samp:s,script:{attrs:{type:[\"text/javascript\"],src:null,async:[\"\",\"async\"],defer:[\"\",\"defer\"],charset:e}},section:s,select:{attrs:{form:null,name:null,size:null,autofocus:[\"\",\"autofocus\"],disabled:[\"\",\"disabled\"],multiple:[\"\",\"multiple\"]}},small:s,source:{attrs:{src:null,type:null,media:null}},span:s,strike:s,strong:s,style:{attrs:{type:[\"text/css\"],media:o,scoped:null}},sub:s,summary:s,sup:s,table:s,tbody:s,td:{attrs:{colspan:null,rowspan:null,headers:null}},textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[\"\",\"autofocus\"],disabled:[\"\",\"disabled\"],readonly:[\"\",\"readonly\"],required:[\"\",\"required\"],wrap:[\"soft\",\"hard\"]}},tfoot:s,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[\"row\",\"col\",\"rowgroup\",\"colgroup\"]}},thead:s,time:{attrs:{datetime:null}},title:s,tr:s,track:{attrs:{src:null,label:null,default:null,kind:[\"subtitles\",\"captions\",\"descriptions\",\"chapters\",\"metadata\"],srclang:l}},tt:s,u:s,ul:s,var:s,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[\"anonymous\",\"use-credentials\"],preload:[\"auto\",\"metadata\",\"none\"],autoplay:[\"\",\"autoplay\"],mediagroup:[\"movie\"],muted:[\"\",\"muted\"],controls:[\"\",\"controls\"]}},wbr:s},i={accesskey:[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],class:null,contenteditable:[\"true\",\"false\"],contextmenu:null,dir:[\"ltr\",\"rtl\",\"auto\"],draggable:[\"true\",\"false\",\"auto\"],dropzone:[\"copy\",\"move\",\"link\",\"string:\",\"file:\"],hidden:[\"hidden\"],id:null,inert:[\"inert\"],itemid:null,itemprop:null,itemref:null,itemscope:[\"itemscope\"],itemtype:null,lang:[\"en\",\"es\"],spellcheck:[\"true\",\"false\"],autocorrect:[\"true\",\"false\"],autocapitalize:[\"true\",\"false\"],style:null,tabindex:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],title:null,translate:[\"yes\",\"no\"],onclick:null,rel:[\"stylesheet\",\"alternate\",\"author\",\"bookmark\",\"help\",\"license\",\"next\",\"nofollow\",\"noreferrer\",\"prefetch\",\"prev\",\"search\",\"tag\"]};function d(l){for(var t in i)i.hasOwnProperty(t)&&(l.attrs[t]=i[t])}for(var c in d(s),u)u.hasOwnProperty(c)&&u[c]!=s&&d(u[c]);n.htmlSchema=u,n.registerHelper(\"hint\",\"html\",function(l,t){var e={schemaInfo:u};if(t)for(var a in t)e[a]=t[a];return n.hint.xml(l,e)})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/hint/html-hint.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/hint/javascript-hint.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],t):t(CodeMirror)}(function(f){var c=f.Pos;function g(t,e){for(var r=0,n=t.length;r<n;++r)e(t[r])}function r(t,e,r,n){var i=t.getCursor(),o=r(t,i);if(!/\\b(?:string|comment)\\b/.test(o.type)){var s=f.innerMode(t.getMode(),o.state);if(\"json\"!==s.mode.helperType){o.state=s.state,/^[\\w$_]*$/.test(o.string)?o.end>i.ch&&(o.end=i.ch,o.string=o.string.slice(0,i.ch-o.start)):o={start:i.ch,end:i.ch,string:\"\",state:o.state,type:\".\"==o.string?\"property\":null};for(var a=o;\"property\"==a.type;){if(\".\"!=(a=r(t,c(i.line,a.start))).string)return;a=r(t,c(i.line,a.start));var l=l||[];l.push(a)}return{list:function(t,e,r,n){var i=[],o=t.string,s=n&&n.globalScope||window;function a(t){0!=t.lastIndexOf(o,0)||function(t,e){if(Array.prototype.indexOf)return-1!=t.indexOf(e);for(var r=t.length;r--;)if(t[r]===e)return 1}(i,t)||i.push(t)}function l(t){\"string\"==typeof t?g(y,a):t instanceof Array?g(h,a):t instanceof Function&&g(v,a),function(t,e){if(Object.getOwnPropertyNames&&Object.getPrototypeOf)for(var r=t;r;r=Object.getPrototypeOf(r))Object.getOwnPropertyNames(r).forEach(e);else for(var n in t)e(n)}(t,a)}if(e&&e.length){var f,c=e.pop();for(c.type&&0===c.type.indexOf(\"variable\")?(n&&n.additionalContext&&(f=n.additionalContext[c.string]),n&&!1===n.useGlobalScope||(f=f||s[c.string])):\"string\"==c.type?f=\"\":\"atom\"==c.type?f=1:\"function\"==c.type&&(null==s.jQuery||\"$\"!=c.string&&\"jQuery\"!=c.string||\"function\"!=typeof s.jQuery?null!=s._&&\"_\"==c.string&&\"function\"==typeof s._&&(f=s._()):f=s.jQuery());null!=f&&e.length;)f=f[e.pop().string];null!=f&&l(f)}else{for(var p=t.state.localVars;p;p=p.next)a(p.name);for(var u=t.state.context;u;u=u.prev)for(p=u.vars;p;p=p.next)a(p.name);for(p=t.state.globalVars;p;p=p.next)a(p.name);if(n&&null!=n.additionalContext)for(var d in n.additionalContext)a(d);n&&!1===n.useGlobalScope||l(s),g(r,a)}return i}(o,l,e,n),from:c(i.line,o.start),to:c(i.line,o.end)}}}}function n(t,e){var r=t.getTokenAt(e);return e.ch==r.start+1&&\".\"==r.string.charAt(0)?(r.end=r.start,r.string=\".\",r.type=\"property\"):/^\\.[\\w$_]*$/.test(r.string)&&(r.type=\"property\",r.start++,r.string=r.string.replace(/\\./,\"\")),r}f.registerHelper(\"hint\",\"javascript\",function(t,e){return r(t,i,function(t,e){return t.getTokenAt(e)},e)}),f.registerHelper(\"hint\",\"coffeescript\",function(t,e){return r(t,o,n,e)});var y=\"charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight toUpperCase toLowerCase split concat match replace search\".split(\" \"),h=\"length concat join splice push pop shift unshift slice reverse sort indexOf lastIndexOf every some filter forEach map reduce reduceRight \".split(\" \"),v=\"prototype apply call bind\".split(\" \"),i=\"break case catch class const continue debugger default delete do else export extends false finally for function if in import instanceof new null return super switch this throw true try typeof var void while with yield\".split(\" \"),o=\"and break catch class continue delete do else extends false finally for if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes\".split(\" \")});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/hint/javascript-hint.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],t):t(CodeMirror)}(function(W){\"use strict\";var I=\"CodeMirror-hint-active\";function o(t,i){this.cm=t,this.options=i,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor(\"start\"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length;var e=this;t.on(\"cursorActivity\",this.activityFunc=function(){e.cursorActivity()})}W.showHint=function(t,i,e){if(!i)return t.showHint(e);e&&e.async&&(i.async=!0);var n={hint:i};if(e)for(var o in e)n[o]=e[o];return t.showHint(n)},W.defineExtension(\"showHint\",function(t){t=function(t,i,e){var n=t.options.hintOptions,o={};for(var s in l)o[s]=l[s];if(n)for(var s in n)void 0!==n[s]&&(o[s]=n[s]);if(e)for(var s in e)void 0!==e[s]&&(o[s]=e[s]);o.hint.resolve&&(o.hint=o.hint.resolve(t,i));return o}(this,this.getCursor(\"start\"),t);var i=this.listSelections();if(!(1<i.length)){if(this.somethingSelected()){if(!t.hint.supportsSelection)return;for(var e=0;e<i.length;e++)if(i[e].head.line!=i[e].anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var n=this.state.completionActive=new o(this,t);n.options.hint&&(W.signal(this,\"startCompletion\",this),n.update(!0))}}),W.defineExtension(\"closeHint\",function(){this.state.completionActive&&this.state.completionActive.close()});var s=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},c=window.cancelAnimationFrame||clearTimeout;function B(t){return\"string\"==typeof t?t:t.text}function K(t,i){for(;i&&i!=t;){if(\"LI\"===i.nodeName.toUpperCase()&&i.parentNode==t)return i;i=i.parentNode}}function n(o,t){this.completion=o,this.data=t,this.picked=!1;var e=this,s=o.cm,c=s.getInputField().ownerDocument,r=c.defaultView||c.parentWindow,l=this.hints=c.createElement(\"ul\"),i=o.cm.options.theme;l.className=\"CodeMirror-hints \"+i,this.selectedHint=t.selectedHint||0;for(var n=t.list,h=0;h<n.length;++h){var a=l.appendChild(c.createElement(\"li\")),u=n[h],f=\"CodeMirror-hint\"+(h!=this.selectedHint?\"\":\" \"+I);null!=u.className&&(f=u.className+\" \"+f),a.className=f,u.render?u.render(a,t,u):a.appendChild(c.createTextNode(u.displayText||B(u))),a.hintId=h}var p,d,m,g=o.options.container||c.body,v=s.cursorCoords(o.options.alignWithWord?t.from:null),y=v.left,w=v.bottom,H=!0,C=0,b=0;g!==c.body&&(d=(p=-1!==[\"absolute\",\"relative\",\"fixed\"].indexOf(r.getComputedStyle(g).position)?g:g.offsetParent).getBoundingClientRect(),m=c.body.getBoundingClientRect(),C=d.left-m.left-p.scrollLeft,b=d.top-m.top-p.scrollTop),l.style.left=y-C+\"px\",l.style.top=w-b+\"px\";var k=r.innerWidth||Math.max(c.body.offsetWidth,c.documentElement.offsetWidth),A=r.innerHeight||Math.max(c.body.offsetHeight,c.documentElement.offsetHeight);g.appendChild(l);var x,T,S=l.getBoundingClientRect(),M=S.bottom-A,N=l.scrollHeight>l.clientHeight+1,F=s.getScrollInfo();0<M&&(x=S.bottom-S.top,0<v.top-(v.bottom-S.top)-x?(l.style.top=(w=v.top-x-b)+\"px\",H=!1):A<x&&(l.style.height=A-5+\"px\",l.style.top=(w=v.bottom-S.top-b)+\"px\",T=s.getCursor(),t.from.ch!=T.ch&&(v=s.cursorCoords(T),l.style.left=(y=v.left-C)+\"px\",S=l.getBoundingClientRect())));var E,O=S.right-k;if(0<O&&(S.right-S.left>k&&(l.style.width=k-5+\"px\",O-=S.right-S.left-k),l.style.left=(y=v.left-O-C)+\"px\"),N)for(var P=l.firstChild;P;P=P.nextSibling)P.style.paddingRight=s.display.nativeBarWidth+\"px\";return s.addKeyMap(this.keyMap=function(t,n){var o={Up:function(){n.moveFocus(-1)},Down:function(){n.moveFocus(1)},PageUp:function(){n.moveFocus(1-n.menuSize(),!0)},PageDown:function(){n.moveFocus(n.menuSize()-1,!0)},Home:function(){n.setFocus(0)},End:function(){n.setFocus(n.length-1)},Enter:n.pick,Tab:n.pick,Esc:n.close};/Mac/.test(navigator.platform)&&(o[\"Ctrl-P\"]=function(){n.moveFocus(-1)},o[\"Ctrl-N\"]=function(){n.moveFocus(1)});var i=t.options.customKeys,s=i?{}:o;function e(t,i){var e=\"string\"!=typeof i?function(t){return i(t,n)}:o.hasOwnProperty(i)?o[i]:i;s[t]=e}if(i)for(var c in i)i.hasOwnProperty(c)&&e(c,i[c]);var r=t.options.extraKeys;if(r)for(var c in r)r.hasOwnProperty(c)&&e(c,r[c]);return s}(o,{moveFocus:function(t,i){e.changeActive(e.selectedHint+t,i)},setFocus:function(t){e.changeActive(t)},menuSize:function(){return e.screenAmount()},length:n.length,close:function(){o.close()},pick:function(){e.pick()},data:t})),o.options.closeOnUnfocus&&(s.on(\"blur\",this.onBlur=function(){E=setTimeout(function(){o.close()},100)}),s.on(\"focus\",this.onFocus=function(){clearTimeout(E)})),s.on(\"scroll\",this.onScroll=function(){var t=s.getScrollInfo(),i=s.getWrapperElement().getBoundingClientRect(),e=w+F.top-t.top,n=e-(r.pageYOffset||(c.documentElement||c.body).scrollTop);if(H||(n+=l.offsetHeight),n<=i.top||n>=i.bottom)return o.close();l.style.top=e+\"px\",l.style.left=y+F.left-t.left+\"px\"}),W.on(l,\"dblclick\",function(t){var i=K(l,t.target||t.srcElement);i&&null!=i.hintId&&(e.changeActive(i.hintId),e.pick())}),W.on(l,\"click\",function(t){var i=K(l,t.target||t.srcElement);i&&null!=i.hintId&&(e.changeActive(i.hintId),o.options.completeOnSingleClick&&e.pick())}),W.on(l,\"mousedown\",function(){setTimeout(function(){s.focus()},20)}),this.scrollToActive(),W.signal(t,\"select\",n[this.selectedHint],l.childNodes[this.selectedHint]),!0}function r(t,i,e,n){var o;t.async?t(i,n,e):(o=t(i,e))&&o.then?o.then(n):n(o)}o.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.cm.off(\"cursorActivity\",this.activityFunc),this.widget&&this.data&&W.signal(this.data,\"close\"),this.widget&&this.widget.close(),W.signal(this.cm,\"endCompletion\",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(t,i){var e=t.list[i],n=this;this.cm.operation(function(){e.hint?e.hint(n.cm,t,e):n.cm.replaceRange(B(e),e.from||t.from,e.to||t.to,\"complete\"),W.signal(t,\"pick\",e),n.cm.scrollIntoView()}),this.close()},cursorActivity:function(){this.debounce&&(c(this.debounce),this.debounce=0);var t=this.startPos;this.data&&(t=this.data.from);var i,e=this.cm.getCursor(),n=this.cm.getLine(e.line);e.line!=this.startPos.line||n.length-e.ch!=this.startLen-this.startPos.ch||e.ch<t.ch||this.cm.somethingSelected()||!e.ch||this.options.closeCharacters.test(n.charAt(e.ch-1))?this.close():((i=this).debounce=s(function(){i.update()}),this.widget&&this.widget.disable())},update:function(i){var e,n;null!=this.tick&&(n=++(e=this).tick,r(this.options.hint,this.cm,this.options,function(t){e.tick==n&&e.finishUpdate(t,i)}))},finishUpdate:function(t,i){this.data&&W.signal(this.data,\"update\");var e=this.widget&&this.widget.picked||i&&this.options.completeSingle;this.widget&&this.widget.close(),(this.data=t)&&t.list.length&&(e&&1==t.list.length?this.pick(t,0):(this.widget=new n(this,t),W.signal(t,\"shown\")))}},n.prototype={close:function(){var t;this.completion.widget==this&&(this.completion.widget=null,this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap),t=this.completion.cm,this.completion.options.closeOnUnfocus&&(t.off(\"blur\",this.onBlur),t.off(\"focus\",this.onFocus)),t.off(\"scroll\",this.onScroll))},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var t=this;this.keyMap={Enter:function(){t.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(t,i){var e;t>=this.data.list.length?t=i?this.data.list.length-1:0:t<0&&(t=i?0:this.data.list.length-1),this.selectedHint!=t&&((e=this.hints.childNodes[this.selectedHint])&&(e.className=e.className.replace(\" \"+I,\"\")),(e=this.hints.childNodes[this.selectedHint=t]).className+=\" \"+I,this.scrollToActive(),W.signal(this.data,\"select\",this.data.list[this.selectedHint],e))},scrollToActive:function(){var t=this.completion.options.scrollMargin||0,i=this.hints.childNodes[Math.max(0,this.selectedHint-t)],e=this.hints.childNodes[Math.min(this.data.list.length-1,this.selectedHint+t)],n=this.hints.firstChild;i.offsetTop<this.hints.scrollTop?this.hints.scrollTop=i.offsetTop-n.offsetTop:e.offsetTop+e.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=e.offsetTop+e.offsetHeight-this.hints.clientHeight+n.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}},W.registerHelper(\"hint\",\"auto\",{resolve:function(t,i){var e,c=t.getHelpers(i,\"hint\");if(c.length){var n=function(t,n,o){var s=function(t,i){if(!t.somethingSelected())return i;for(var e=[],n=0;n<i.length;n++)i[n].supportsSelection&&e.push(i[n]);return e}(t,c);!function i(e){if(e==s.length)return n(null);r(s[e],t,o,function(t){t&&0<t.list.length?n(t):i(e+1)})}(0)};return n.async=!0,n.supportsSelection=!0,n}return(e=t.getHelper(t.getCursor(),\"hintWords\"))?function(t){return W.hint.fromList(t,{words:e})}:W.hint.anyword?function(t,i){return W.hint.anyword(t,i)}:function(){}}}),W.registerHelper(\"hint\",\"fromList\",function(t,i){var e,n=t.getCursor(),o=t.getTokenAt(n),s=W.Pos(n.line,o.start),c=n;o.start<n.ch&&/\\w/.test(o.string.charAt(n.ch-o.start-1))?e=o.string.substr(0,n.ch-o.start):(e=\"\",s=n);for(var r=[],l=0;l<i.words.length;l++){var h=i.words[l];h.slice(0,e.length)==e&&r.push(h)}if(r.length)return{list:r,from:s,to:c}}),W.commands.autocomplete=W.showHint;var l={hint:W.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\\s()\\[\\]{};:>,]/,closeOnUnfocus:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null};W.defineOption(\"hintOptions\",null)});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css": {
"text": ".CodeMirror-hints {\n position: absolute;\n z-index: 10;\n overflow: hidden;\n list-style: none;\n\n margin: 0;\n padding: 2px;\n\n -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n border-radius: 3px;\n border: 1px solid silver;\n\n background: white;\n font-size: 90%;\n font-family: monospace;\n\n max-height: 20em;\n overflow-y: auto;\n}\n\n.CodeMirror-hint {\n margin: 0;\n padding: 0 4px;\n border-radius: 2px;\n white-space: pre;\n color: black;\n cursor: pointer;\n}\n\nli.CodeMirror-hint-active {\n background: #08f;\n color: white;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/codemirror/addon/hint/xml-hint.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],t):t(CodeMirror)}(function(H){\"use strict\";var R=H.Pos;function z(t,e,r){return r?0<=t.indexOf(e):0==t.lastIndexOf(e,0)}H.registerHelper(\"hint\",\"xml\",function(t,e){var r=e&&e.schemaInfo,n=e&&e.quoteChar||'\"',s=e&&e.matchInMiddle;if(r){var i=t.getCursor(),o=t.getTokenAt(i);if(o.end>i.ch&&(o.end=i.ch,o.string=o.string.slice(0,i.ch-o.start)),(p=H.innerMode(t.getMode(),o.state)).mode.xmlCurrentTag){var a,l,g,c=[],f=!1,h=/\\btag\\b/.test(o.type)&&!/>$/.test(o.string),u=h&&/^\\w/.test(o.string);u?(M=t.getLine(i.line).slice(Math.max(0,o.start-2),o.start),(g=/<\\/$/.test(M)?\"close\":/<$/.test(M)?\"open\":null)&&(l=o.start-(\"close\"==g?2:1))):h&&\"<\"==o.string?g=\"open\":h&&\"</\"==o.string&&(g=\"close\");var d=p.mode.xmlCurrentTag(p.state);if(!h&&!d||g){u&&(a=o.string),f=g;var p,m=p.mode.xmlCurrentContext?p.mode.xmlCurrentContext(p.state):[],v=(p=m.length&&m[m.length-1])&&r[p],y=p?v&&v.children:r[\"!top\"];if(y&&\"close\"!=g)for(var x=0;x<y.length;++x)a&&!z(y[x],a,s)||c.push(\"<\"+y[x]);else if(\"close\"!=g)for(var C in r)!r.hasOwnProperty(C)||\"!top\"==C||\"!attrs\"==C||a&&!z(C,a,s)||c.push(\"<\"+C);p&&(!a||\"close\"==g&&z(p,a,s))&&c.push(\"</\"+p+\">\")}else{var b=(v=d&&r[d.name])&&v.attrs,O=r[\"!attrs\"];if(!b&&!O)return;if(b){if(O){var w={};for(var A in O)O.hasOwnProperty(A)&&(w[A]=O[A]);for(var A in b)b.hasOwnProperty(A)&&(w[A]=b[A]);b=w}}else b=O;if(\"string\"==o.type||\"=\"==o.string){var M,P,$,I,T,j=(M=t.getRange(R(i.line,Math.max(0,i.ch-60)),R(i.line,\"string\"==o.type?o.start:o.end))).match(/([^\\s\\u00a0=<>\\\"\\']+)=$/);if(!j||!b.hasOwnProperty(j[1])||!(P=b[j[1]]))return;\"function\"==typeof P&&(P=P.call(this,t)),\"string\"==o.type&&(a=o.string,$=0,/['\"]/.test(o.string.charAt(0))&&(n=o.string.charAt(0),a=o.string.slice(1),$++),I=o.string.length,/['\"]/.test(o.string.charAt(I-1))&&(n=o.string.charAt(I-1),a=o.string.substr($,I-2)),!$||(T=t.getLine(i.line)).length>o.end&&T.charAt(o.end)==n&&o.end++,f=!0);var q=function(t){if(t)for(var e=0;e<t.length;++e)a&&!z(t[e],a,s)||c.push(n+t[e]+n);return k()};return P&&P.then?P.then(q):q(P)}for(var L in\"attribute\"==o.type&&(a=o.string,f=!0),b)!b.hasOwnProperty(L)||a&&!z(L,a,s)||c.push(L)}return k()}}function k(){return{list:c,from:f?R(i.line,null==l?o.start:l):i,to:f?R(i.line,o.end):i}}})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/hint/xml-hint.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-autocomplete/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-autocomplete/readme",
"text": "This plugin enhances the [[CodeMirror|http://codemirror.net]] text editor with Autocompletion functionality. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\nIt adds Autocompletion for ''html'', ''javascript'' and ''xml'' and also for ''already present words'' within a text-editor instance\n\nThe ''Keyboard Shortcut'' for autocompletion is `Ctrl+Space`\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/mode/css/css.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(T){\"use strict\";function e(e){for(var t={},r=0;r<e.length;++r)t[e[r].toLowerCase()]=!0;return t}T.defineMode(\"css\",function(e,t){var r=t.inline;t.propertyKeywords||(t=T.resolveMode(\"text/css\"));var a,i,n=e.indentUnit,l=t.tokenHooks,o=t.documentTypes||{},s=t.mediaTypes||{},d=t.mediaFeatures||{},c=t.mediaValueKeywords||{},p=t.propertyKeywords||{},u=t.nonStandardPropertyKeywords||{},m=t.fontProperties||{},b=t.counterDescriptors||{},g=t.colorKeywords||{},h=t.valueKeywords||{},f=t.allowNested,k=t.lineComment,y=!0===t.supportsAtComponent,w=!1!==e.highlightNonStandardPropertyKeywords;function v(e,t){return a=t,e}function x(i){return function(e,t){for(var r,o=!1;null!=(r=e.next());){if(r==i&&!o){\")\"==i&&e.backUp(1);break}o=!o&&\"\\\\\"==r}return r!=i&&(o||\")\"==i)||(t.tokenize=null),a=\"string\"}}function z(e,t){return e.next(),e.match(/\\s*[\\\"\\')]/,!1)?t.tokenize=null:t.tokenize=x(\")\"),a=\"(\",null}function j(e,t,r){this.type=e,this.indent=t,this.prev=r}function P(e,t,r,o){return e.context=new j(r,t.indentation()+(!1===o?0:n),e.context),r}function K(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function q(e,t,r){return _[r.context.type](e,t,r)}function C(e,t,r,o){for(var i=o||1;0<i;i--)r.context=r.context.prev;return q(e,t,r)}function B(e){var t=e.current().toLowerCase();i=h.hasOwnProperty(t)?\"atom\":g.hasOwnProperty(t)?\"keyword\":\"variable\"}var _={top:function(e,t,r){if(\"{\"==e)return P(r,t,\"block\");if(\"}\"==e&&r.context.prev)return K(r);if(y&&/@component/i.test(e))return P(r,t,\"atComponentBlock\");if(/^@(-moz-)?document$/i.test(e))return P(r,t,\"documentTypes\");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return P(r,t,\"atBlock\");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,\"restricted_atBlock_before\";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return\"keyframes\";if(e&&\"@\"==e.charAt(0))return P(r,t,\"at\");if(\"hash\"==e)i=\"builtin\";else if(\"word\"==e)i=\"tag\";else{if(\"variable-definition\"==e)return\"maybeprop\";if(\"interpolation\"==e)return P(r,t,\"interpolation\");if(\":\"==e)return\"pseudo\";if(f&&\"(\"==e)return P(r,t,\"parens\")}return r.context.type},block:function(e,t,r){if(\"word\"!=e)return\"meta\"==e?\"block\":f||\"hash\"!=e&&\"qualifier\"!=e?_.top(e,t,r):(i=\"error\",\"block\");var o=t.current().toLowerCase();return p.hasOwnProperty(o)?(i=\"property\",\"maybeprop\"):u.hasOwnProperty(o)?(i=w?\"string-2\":\"property\",\"maybeprop\"):f?(i=t.match(/^\\s*:(?:\\s|$)/,!1)?\"property\":\"tag\",\"block\"):(i+=\" error\",\"maybeprop\")},maybeprop:function(e,t,r){return\":\"==e?P(r,t,\"prop\"):q(e,t,r)},prop:function(e,t,r){if(\";\"==e)return K(r);if(\"{\"==e&&f)return P(r,t,\"propBlock\");if(\"}\"==e||\"{\"==e)return C(e,t,r);if(\"(\"==e)return P(r,t,\"parens\");if(\"hash\"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if(\"word\"==e)B(t);else if(\"interpolation\"==e)return P(r,t,\"interpolation\")}else i+=\" error\";return\"prop\"},propBlock:function(e,t,r){return\"}\"==e?K(r):\"word\"==e?(i=\"property\",\"maybeprop\"):r.context.type},parens:function(e,t,r){return\"{\"==e||\"}\"==e?C(e,t,r):\")\"==e?K(r):\"(\"==e?P(r,t,\"parens\"):\"interpolation\"==e?P(r,t,\"interpolation\"):(\"word\"==e&&B(t),\"parens\")},pseudo:function(e,t,r){return\"meta\"==e?\"pseudo\":\"word\"==e?(i=\"variable-3\",r.context.type):q(e,t,r)},documentTypes:function(e,t,r){return\"word\"==e&&o.hasOwnProperty(t.current())?(i=\"tag\",r.context.type):_.atBlock(e,t,r)},atBlock:function(e,t,r){return\"(\"==e?P(r,t,\"atBlock_parens\"):\"}\"==e||\";\"==e?C(e,t,r):\"{\"==e?K(r)&&P(r,t,f?\"block\":\"top\"):\"interpolation\"==e?P(r,t,\"interpolation\"):(\"word\"==e&&(o=t.current().toLowerCase(),i=\"only\"==o||\"not\"==o||\"and\"==o||\"or\"==o?\"keyword\":s.hasOwnProperty(o)?\"attribute\":d.hasOwnProperty(o)?\"property\":c.hasOwnProperty(o)?\"keyword\":p.hasOwnProperty(o)?\"property\":u.hasOwnProperty(o)?w?\"string-2\":\"property\":h.hasOwnProperty(o)?\"atom\":g.hasOwnProperty(o)?\"keyword\":\"error\"),r.context.type);var o},atComponentBlock:function(e,t,r){return\"}\"==e?C(e,t,r):\"{\"==e?K(r)&&P(r,t,f?\"block\":\"top\",!1):(\"word\"==e&&(i=\"error\"),r.context.type)},atBlock_parens:function(e,t,r){return\")\"==e?K(r):\"{\"==e||\"}\"==e?C(e,t,r,2):_.atBlock(e,t,r)},restricted_atBlock_before:function(e,t,r){return\"{\"==e?P(r,t,\"restricted_atBlock\"):\"word\"==e&&\"@counter-style\"==r.stateArg?(i=\"variable\",\"restricted_atBlock_before\"):q(e,t,r)},restricted_atBlock:function(e,t,r){return\"}\"==e?(r.stateArg=null,K(r)):\"word\"==e?(i=\"@font-face\"==r.stateArg&&!m.hasOwnProperty(t.current().toLowerCase())||\"@counter-style\"==r.stateArg&&!b.hasOwnProperty(t.current().toLowerCase())?\"error\":\"property\",\"maybeprop\"):\"restricted_atBlock\"},keyframes:function(e,t,r){return\"word\"==e?(i=\"variable\",\"keyframes\"):\"{\"==e?P(r,t,\"top\"):q(e,t,r)},at:function(e,t,r){return\";\"==e?K(r):\"{\"==e||\"}\"==e?C(e,t,r):(\"word\"==e?i=\"tag\":\"hash\"==e&&(i=\"builtin\"),\"at\")},interpolation:function(e,t,r){return\"}\"==e?K(r):\"{\"==e||\";\"==e?C(e,t,r):(\"word\"==e?i=\"variable\":\"variable\"!=e&&\"(\"!=e&&\")\"!=e&&(i=\"error\"),\"interpolation\")}};return{startState:function(e){return{tokenize:null,state:r?\"block\":\"top\",stateArg:null,context:new j(r?\"block\":\"top\",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||function(e,t){var r=e.next();if(l[r]){var o=l[r](e,t);if(!1!==o)return o}return\"@\"==r?(e.eatWhile(/[\\w\\\\\\-]/),v(\"def\",e.current())):\"=\"==r||(\"~\"==r||\"|\"==r)&&e.eat(\"=\")?(a=\"compare\",null):'\"'==r||\"'\"==r?(t.tokenize=x(r),t.tokenize(e,t)):\"#\"==r?(e.eatWhile(/[\\w\\\\\\-]/),a=\"hash\",\"atom\"):\"!\"==r?(e.match(/^\\s*\\w*/),a=\"important\",\"keyword\"):/\\d/.test(r)||\".\"==r&&e.eat(/\\d/)?(e.eatWhile(/[\\w.%]/),a=\"unit\",\"number\"):\"-\"!==r?/[,+>*\\/]/.test(r)?(a=\"select-op\",null):\".\"==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?a=\"qualifier\":/[:;{}\\[\\]\\(\\)]/.test(r)?v(null,r):e.match(/[\\w-.]+(?=\\()/)?(/^(url(-prefix)?|domain|regexp)$/.test(e.current().toLowerCase())&&(t.tokenize=z),a=\"variable\",\"variable callee\"):/[\\w\\\\\\-]/.test(r)?(e.eatWhile(/[\\w\\\\\\-]/),a=\"word\",\"property\"):a=null:/[\\d.]/.test(e.peek())?(e.eatWhile(/[\\w.%]/),a=\"unit\",\"number\"):e.match(/^-[\\w\\\\\\-]*/)?(e.eatWhile(/[\\w\\\\\\-]/),a=e.match(/^\\s*:/,!1)?\"variable-definition\":\"variable\",\"variable-2\"):e.match(/^\\w+-/)?a=\"meta\":void 0})(e,t);return r&&\"object\"==typeof r&&(a=r[1],r=r[0]),i=r,\"comment\"!=a&&(t.state=_[t.state](a,e,t)),i},indent:function(e,t){var r=e.context,o=t&&t.charAt(0),i=r.indent;return\"prop\"!=r.type||\"}\"!=o&&\")\"!=o||(r=r.prev),r.prev&&(\"}\"!=o||\"block\"!=r.type&&\"top\"!=r.type&&\"interpolation\"!=r.type&&\"restricted_atBlock\"!=r.type?(\")\"!=o||\"parens\"!=r.type&&\"atBlock_parens\"!=r.type)&&(\"{\"!=o||\"at\"!=r.type&&\"atBlock\"!=r.type)||(i=Math.max(0,r.indent-n)):i=(r=r.prev).indent),i},electricChars:\"}\",blockCommentStart:\"/*\",blockCommentEnd:\"*/\",blockCommentContinue:\" * \",lineComment:k,fold:\"brace\"}});var t=[\"domain\",\"regexp\",\"url\",\"url-prefix\"],r=e(t),o=[\"all\",\"aural\",\"braille\",\"handheld\",\"print\",\"projection\",\"screen\",\"tty\",\"tv\",\"embossed\"],i=e(o),a=[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"device-width\",\"min-device-width\",\"max-device-width\",\"device-height\",\"min-device-height\",\"max-device-height\",\"aspect-ratio\",\"min-aspect-ratio\",\"max-aspect-ratio\",\"device-aspect-ratio\",\"min-device-aspect-ratio\",\"max-device-aspect-ratio\",\"color\",\"min-color\",\"max-color\",\"color-index\",\"min-color-index\",\"max-color-index\",\"monochrome\",\"min-monochrome\",\"max-monochrome\",\"resolution\",\"min-resolution\",\"max-resolution\",\"scan\",\"grid\",\"orientation\",\"device-pixel-ratio\",\"min-device-pixel-ratio\",\"max-device-pixel-ratio\",\"pointer\",\"any-pointer\",\"hover\",\"any-hover\",\"prefers-color-scheme\"],n=e(a),l=[\"landscape\",\"portrait\",\"none\",\"coarse\",\"fine\",\"on-demand\",\"hover\",\"interlace\",\"progressive\",\"dark\",\"light\"],s=e(l),d=[\"align-content\",\"align-items\",\"align-self\",\"alignment-adjust\",\"alignment-baseline\",\"all\",\"anchor-point\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"appearance\",\"azimuth\",\"backdrop-filter\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-blend-mode\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-position-x\",\"background-position-y\",\"background-repeat\",\"background-size\",\"baseline-shift\",\"binding\",\"bleed\",\"block-size\",\"bookmark-label\",\"bookmark-level\",\"bookmark-state\",\"bookmark-target\",\"border\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"caret-color\",\"clear\",\"clip\",\"color\",\"color-profile\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"contain\",\"content\",\"counter-increment\",\"counter-reset\",\"crop\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"dominant-baseline\",\"drop-initial-after-adjust\",\"drop-initial-after-align\",\"drop-initial-before-adjust\",\"drop-initial-before-align\",\"drop-initial-size\",\"drop-initial-value\",\"elevation\",\"empty-cells\",\"fit\",\"fit-position\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"float-offset\",\"flow-from\",\"flow-into\",\"font\",\"font-family\",\"font-feature-settings\",\"font-kerning\",\"font-language-override\",\"font-optical-sizing\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-alternates\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-variation-settings\",\"font-weight\",\"gap\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-gap\",\"grid-column-start\",\"grid-gap\",\"grid-row\",\"grid-row-end\",\"grid-row-gap\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"inline-box-align\",\"inset\",\"inset-block\",\"inset-block-end\",\"inset-block-start\",\"inset-inline\",\"inset-inline-end\",\"inset-inline-start\",\"isolation\",\"justify-content\",\"justify-items\",\"justify-self\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"line-height-step\",\"line-stacking\",\"line-stacking-ruby\",\"line-stacking-shift\",\"line-stacking-strategy\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"marks\",\"marquee-direction\",\"marquee-loop\",\"marquee-play-count\",\"marquee-speed\",\"marquee-style\",\"mask-clip\",\"mask-composite\",\"mask-image\",\"mask-mode\",\"mask-origin\",\"mask-position\",\"mask-repeat\",\"mask-size\",\"mask-type\",\"max-block-size\",\"max-height\",\"max-inline-size\",\"max-width\",\"min-block-size\",\"min-height\",\"min-inline-size\",\"min-width\",\"mix-blend-mode\",\"move-to\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"object-fit\",\"object-position\",\"offset\",\"offset-anchor\",\"offset-distance\",\"offset-path\",\"offset-position\",\"offset-rotate\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-style\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"page\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"page-policy\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pitch\",\"pitch-range\",\"place-content\",\"place-items\",\"place-self\",\"play-during\",\"position\",\"presentation-level\",\"punctuation-trim\",\"quotes\",\"region-break-after\",\"region-break-before\",\"region-break-inside\",\"region-fragment\",\"rendering-intent\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"richness\",\"right\",\"rotate\",\"rotation\",\"rotation-point\",\"row-gap\",\"ruby-align\",\"ruby-overhang\",\"ruby-position\",\"ruby-span\",\"scale\",\"scroll-behavior\",\"scroll-margin\",\"scroll-margin-block\",\"scroll-margin-block-end\",\"scroll-margin-block-start\",\"scroll-margin-bottom\",\"scroll-margin-inline\",\"scroll-margin-inline-end\",\"scroll-margin-inline-start\",\"scroll-margin-left\",\"scroll-margin-right\",\"scroll-margin-top\",\"scroll-padding\",\"scroll-padding-block\",\"scroll-padding-block-end\",\"scroll-padding-block-start\",\"scroll-padding-bottom\",\"scroll-padding-inline\",\"scroll-padding-inline-end\",\"scroll-padding-inline-start\",\"scroll-padding-left\",\"scroll-padding-right\",\"scroll-padding-top\",\"scroll-snap-align\",\"scroll-snap-type\",\"shape-image-threshold\",\"shape-inside\",\"shape-margin\",\"shape-outside\",\"size\",\"speak\",\"speak-as\",\"speak-header\",\"speak-numeral\",\"speak-punctuation\",\"speech-rate\",\"stress\",\"string-set\",\"tab-size\",\"table-layout\",\"target\",\"target-name\",\"target-new\",\"target-position\",\"text-align\",\"text-align-last\",\"text-combine-upright\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-skip\",\"text-decoration-skip-ink\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-height\",\"text-indent\",\"text-justify\",\"text-orientation\",\"text-outline\",\"text-overflow\",\"text-rendering\",\"text-shadow\",\"text-size-adjust\",\"text-space-collapse\",\"text-transform\",\"text-underline-position\",\"text-wrap\",\"top\",\"touch-action\",\"transform\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"translate\",\"unicode-bidi\",\"user-select\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"writing-mode\",\"z-index\",\"clip-path\",\"clip-rule\",\"mask\",\"enable-background\",\"filter\",\"flood-color\",\"flood-opacity\",\"lighting-color\",\"stop-color\",\"stop-opacity\",\"pointer-events\",\"color-interpolation\",\"color-interpolation-filters\",\"color-rendering\",\"fill\",\"fill-opacity\",\"fill-rule\",\"image-rendering\",\"marker\",\"marker-end\",\"marker-mid\",\"marker-start\",\"paint-order\",\"shape-rendering\",\"stroke\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke-width\",\"text-rendering\",\"baseline-shift\",\"dominant-baseline\",\"glyph-orientation-horizontal\",\"glyph-orientation-vertical\",\"text-anchor\",\"writing-mode\"],c=e(d),p=[\"border-block\",\"border-block-color\",\"border-block-end\",\"border-block-end-color\",\"border-block-end-style\",\"border-block-end-width\",\"border-block-start\",\"border-block-start-color\",\"border-block-start-style\",\"border-block-start-width\",\"border-block-style\",\"border-block-width\",\"border-inline\",\"border-inline-color\",\"border-inline-end\",\"border-inline-end-color\",\"border-inline-end-style\",\"border-inline-end-width\",\"border-inline-start\",\"border-inline-start-color\",\"border-inline-start-style\",\"border-inline-start-width\",\"border-inline-style\",\"border-inline-width\",\"margin-block\",\"margin-block-end\",\"margin-block-start\",\"margin-inline\",\"margin-inline-end\",\"margin-inline-start\",\"padding-block\",\"padding-block-end\",\"padding-block-start\",\"padding-inline\",\"padding-inline-end\",\"padding-inline-start\",\"scroll-snap-stop\",\"scrollbar-3d-light-color\",\"scrollbar-arrow-color\",\"scrollbar-base-color\",\"scrollbar-dark-shadow-color\",\"scrollbar-face-color\",\"scrollbar-highlight-color\",\"scrollbar-shadow-color\",\"scrollbar-track-color\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"shape-inside\",\"zoom\"],u=e(p),m=e([\"font-display\",\"font-family\",\"src\",\"unicode-range\",\"font-variant\",\"font-feature-settings\",\"font-stretch\",\"font-weight\",\"font-style\"]),b=e([\"additive-symbols\",\"fallback\",\"negative\",\"pad\",\"prefix\",\"range\",\"speak-as\",\"suffix\",\"symbols\",\"system\"]),g=[\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"],h=e(g),f=[\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"afar\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"amharic\",\"amharic-abegede\",\"antialiased\",\"appworkspace\",\"arabic-indic\",\"armenian\",\"asterisks\",\"attr\",\"auto\",\"auto-flow\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"axis-pan\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"binary\",\"bengali\",\"blink\",\"block\",\"block-axis\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"bullets\",\"button\",\"button-bevel\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"cambodian\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"cjk-earthly-branch\",\"cjk-heavenly-stem\",\"cjk-ideographic\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"color\",\"color-burn\",\"color-dodge\",\"column\",\"column-reverse\",\"compact\",\"condensed\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"currentcolor\",\"cursive\",\"cyclic\",\"darken\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"dense\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"devanagari\",\"difference\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic\",\"ethiopic-abegede\",\"ethiopic-abegede-am-et\",\"ethiopic-abegede-gez\",\"ethiopic-abegede-ti-er\",\"ethiopic-abegede-ti-et\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-aa-et\",\"ethiopic-halehame-am-et\",\"ethiopic-halehame-gez\",\"ethiopic-halehame-om-et\",\"ethiopic-halehame-sid-et\",\"ethiopic-halehame-so-et\",\"ethiopic-halehame-ti-er\",\"ethiopic-halehame-ti-et\",\"ethiopic-halehame-tig\",\"ethiopic-numeric\",\"ew-resize\",\"exclusion\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fill-box\",\"fixed\",\"flat\",\"flex\",\"flex-end\",\"flex-start\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"georgian\",\"graytext\",\"grid\",\"groove\",\"gujarati\",\"gurmukhi\",\"hand\",\"hangul\",\"hangul-consonant\",\"hard-light\",\"hebrew\",\"help\",\"hidden\",\"hide\",\"higher\",\"highlight\",\"highlighttext\",\"hiragana\",\"hiragana-iroha\",\"horizontal\",\"hsl\",\"hsla\",\"hue\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-grid\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"japanese-formal\",\"japanese-informal\",\"justify\",\"kannada\",\"katakana\",\"katakana-iroha\",\"keep-all\",\"khmer\",\"korean-hangul-formal\",\"korean-hanja-formal\",\"korean-hanja-informal\",\"landscape\",\"lao\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"lighten\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-alpha\",\"lower-armenian\",\"lower-greek\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lower-roman\",\"lowercase\",\"ltr\",\"luminosity\",\"malayalam\",\"manipulation\",\"match\",\"matrix\",\"matrix3d\",\"media-controls-background\",\"media-current-time-display\",\"media-fullscreen-button\",\"media-mute-button\",\"media-play-button\",\"media-return-to-realtime-button\",\"media-rewind-button\",\"media-seek-back-button\",\"media-seek-forward-button\",\"media-slider\",\"media-sliderthumb\",\"media-time-remaining-display\",\"media-volume-slider\",\"media-volume-slider-container\",\"media-volume-sliderthumb\",\"medium\",\"menu\",\"menulist\",\"menulist-button\",\"menulist-text\",\"menulist-textfield\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"mongolian\",\"monospace\",\"move\",\"multiple\",\"multiple_mask_images\",\"multiply\",\"myanmar\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"octal\",\"opacity\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"oriya\",\"oromo\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"persian\",\"perspective\",\"pinch-zoom\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row\",\"row-resize\",\"row-reverse\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"saturation\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"screen\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"searchfield\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"self-start\",\"self-end\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"serif\",\"show\",\"sidama\",\"simp-chinese-formal\",\"simp-chinese-informal\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"soft-light\",\"solid\",\"somali\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"space-around\",\"space-between\",\"space-evenly\",\"spell-out\",\"square\",\"square-button\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"stroke-box\",\"sub\",\"subpixel-antialiased\",\"svg_masks\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"system-ui\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"tamil\",\"telugu\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thai\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"tibetan\",\"tigre\",\"tigrinya-er\",\"tigrinya-er-abegede\",\"tigrinya-et\",\"tigrinya-et-abegede\",\"to\",\"top\",\"trad-chinese-formal\",\"trad-chinese-informal\",\"transform\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"unidirectional-pan\",\"unset\",\"up\",\"upper-alpha\",\"upper-armenian\",\"upper-greek\",\"upper-hexadecimal\",\"upper-latin\",\"upper-norwegian\",\"upper-roman\",\"uppercase\",\"urdu\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"view-box\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"wrap\",\"wrap-reverse\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\"],k=e(f),y=t.concat(o).concat(a).concat(l).concat(d).concat(p).concat(g).concat(f);function w(e,t){for(var r,o=!1;null!=(r=e.next());){if(o&&\"/\"==r){t.tokenize=null;break}o=\"*\"==r}return[\"comment\",\"comment\"]}T.registerHelper(\"hintWords\",\"css\",y),T.defineMIME(\"text/css\",{documentTypes:r,mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:c,nonStandardPropertyKeywords:u,fontProperties:m,counterDescriptors:b,colorKeywords:h,valueKeywords:k,tokenHooks:{\"/\":function(e,t){return!!e.eat(\"*\")&&(t.tokenize=w)(e,t)}},name:\"css\"}),T.defineMIME(\"text/x-scss\",{mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:c,nonStandardPropertyKeywords:u,colorKeywords:h,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:\"//\",tokenHooks:{\"/\":function(e,t){return e.eat(\"/\")?(e.skipToEnd(),[\"comment\",\"comment\"]):e.eat(\"*\")?(t.tokenize=w)(e,t):[\"operator\",\"operator\"]},\":\":function(e){return!!e.match(/\\s*\\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\\w-]+/),e.match(/^\\s*:/,!1)?[\"variable-2\",\"variable-definition\"]:[\"variable-2\",\"variable\"]},\"#\":function(e){return!!e.eat(\"{\")&&[null,\"interpolation\"]}},name:\"css\",helperType:\"scss\"}),T.defineMIME(\"text/x-less\",{mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:c,nonStandardPropertyKeywords:u,colorKeywords:h,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:\"//\",tokenHooks:{\"/\":function(e,t){return e.eat(\"/\")?(e.skipToEnd(),[\"comment\",\"comment\"]):e.eat(\"*\")?(t.tokenize=w)(e,t):[\"operator\",\"operator\"]},\"@\":function(e){return e.eat(\"{\")?[null,\"interpolation\"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i,!1)&&(e.eatWhile(/[\\w\\\\\\-]/),e.match(/^\\s*:/,!1)?[\"variable-2\",\"variable-definition\"]:[\"variable-2\",\"variable\"])},\"&\":function(){return[\"atom\",\"atom\"]}},name:\"css\",helperType:\"less\"}),T.defineMIME(\"text/x-gss\",{documentTypes:r,mediaTypes:i,mediaFeatures:n,propertyKeywords:c,nonStandardPropertyKeywords:u,fontProperties:m,counterDescriptors:b,colorKeywords:h,valueKeywords:k,supportsAtComponent:!0,tokenHooks:{\"/\":function(e,t){return!!e.eat(\"*\")&&(t.tokenize=w)(e,t)}},name:\"css\",helperType:\"gss\"})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/css/css.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-mode-css/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-mode-css/readme",
"text": "This plugin adds Syntax Highlighting for CSS tiddlers (text/css) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n\n"
}
}
}
{
"tiddlers": {
"$:/config/DefaultColourMappings/menubar-foreground": {
"title": "$:/config/DefaultColourMappings/menubar-foreground",
"text": "#fff"
},
"$:/config/DefaultColourMappings/menubar-background": {
"title": "$:/config/DefaultColourMappings/menubar-background",
"text": "#5778d8"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols",
"text": "hide"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server",
"text": "hide"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar",
"text": "hide"
},
"$:/config/plugins/menubar/TableOfContents/Tag": {
"title": "$:/config/plugins/menubar/TableOfContents/Tag",
"text": "TableOfContents"
},
"$:/config/plugins/menubar/breakpoint": {
"title": "$:/config/plugins/menubar/breakpoint",
"text": "620px"
},
"$:/plugins/tiddlywiki/menubar/config": {
"title": "$:/plugins/tiddlywiki/menubar/config",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "Menu Bar",
"text": "\\define config-base() $:/config/plugins/menubar/MenuItems/Visibility/\n\n! Menu Bar Configuration\n\n!! Menu Items\n\nSelect which menu items will be shown. You can also drag items to reorder them.\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/MenuBar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n\n!! Breakpoint Position\n\nThe breakpoint position between narrow and wide screens. Should include CSS units (eg. `400px`).\n\n<$edit-text tiddler=\"$:/config/plugins/menubar/breakpoint\" default=\"\" tag=\"input\"/>\n\n!! Contents Tag\n\nThe tag for the ~TableOfContents used in the Contents dropdown\n\n<$edit-text tiddler=\"$:/config/plugins/menubar/TableOfContents/Tag\" default=\"\" tag=\"input\"/>\n\n!! Menu Bar Colours\n\nTo change the colour of the menu bar, define the colours `menubar-foreground` and `menubar-background` in the currently selected palette\n"
},
"$:/plugins/tiddlywiki/menubar/items/contents": {
"title": "$:/plugins/tiddlywiki/menubar/items/contents",
"caption": "Contents",
"description": "Table of Contents",
"is-dropdown": "yes",
"tags": "$:/tags/MenuBar",
"text": "<div class=\"tc-table-of-contents\">\n\n<$macrocall $name=\"toc-selective-expandable\" tag={{$:/config/plugins/menubar/TableOfContents/Tag}}/>\n\n</div>\n"
},
"$:/plugins/tiddlywiki/menubar/items/hamburger": {
"title": "$:/plugins/tiddlywiki/menubar/items/hamburger",
"tags": "$:/tags/MenuBar",
"caption": "Hamburger",
"description": "Show the full menu bar on a narrow screen",
"custom-menu-content": "{{$:/plugins/tiddlywiki/menubar/items/hamburger}}",
"show-when": "narrow",
"text": "<$list filter=\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[no]]\">\n<$button set=\"$:/state/popup/menubar/hamburger\" setTo=\"yes\">\n{{$:/core/images/menu-button}}\n</$button>\n</$list>\n<$list filter=\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[yes]]\">\n<$button set=\"$:/state/popup/menubar/hamburger\" setTo=\"no\">\n{{$:/core/images/close-button}}\n</$button>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/pagecontrols": {
"title": "$:/plugins/tiddlywiki/menubar/items/pagecontrols",
"tags": "$:/tags/MenuBar",
"description": "Page controls from the sidebar",
"caption": "Page controls",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/pagecontrols\" mode=\"inline\"/>",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/search": {
"title": "$:/plugins/tiddlywiki/menubar/items/search",
"custom-menu-content": "{{$:/plugins/tiddlywiki/menubar/items/search}}",
"description": "Search",
"caption": "Search",
"tags": "$:/tags/MenuBar",
"text": "\\define cancel-search-actions()\n<$set name=\"userInput\" value={{{ [<__storeTitle__>get[text]] }}}>\n<$list filter=\"[<__tiddler__>get[text]!match<userInput>]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[<__storeTitle__>] [<__tiddler__>] [<__selectionStateTitle__>]\"/>\"\"\">\n<$action-setfield $tiddler=<<__tiddler__>> text=<<userInput>>/><$action-setfield $tiddler=<<__refreshTitle__>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\whitespace trim\n<$vars searchTiddler=\"$:/temp/menubarsearch/input\" searchListState=<<qualify \"$:/state/search-list/selected-item\">>>\n<span style=\"margin: 0 0.5em;\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/menubarsearch\" storeTitle=<<searchTiddler>> selectionStateTitle=<<searchListState>> \n\t\trefreshTitle=\"$:/temp/menubarsearch/refresh\" tag=\"input\" type=\"search\" focusPopup=\"$:/state/popup/menubar-search-dropdown\" \n\t\tclass=\"tc-popup-handle tc-menu-show-when-wide\" placeholder=\"Search...\" default=\"\" cancelPopups=\"yes\" \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> inputCancelActions=<<cancel-search-actions>> \n\t\tfilterMinLength={{$:/config/Search/MinLength}} configTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\" />\n</$keyboard>\n</$keyboard>\n</span>\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/state/popup/menubar-search-dropdown\" type=\"nomatch\" text=\"\" default=\"\">\n\n<div class=\"tc-block-dropdown tc-search-drop-down\">\n\n<$list filter=\"[<searchTiddler>get[text]minlength[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">Type your search terms</div>\"\"\" variable=\"ignore\">\n\n<$list filter=\"[<searchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$vars configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} userInput={{{ [<searchTiddler>get[text]] }}}>\n\n{{$:/core/ui/SearchResults}}\n\n</$vars>\n\n</$list>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n</$vars>\n"
},
"$:/plugins/tiddlywiki/menubar/items/server": {
"title": "$:/plugins/tiddlywiki/menubar/items/server",
"tags": "$:/tags/MenuBar",
"description": "Server options",
"caption": "Server",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/server\" mode=\"inline\"/>",
"text": "<$list filter=\"[[$:/status/IsLoggedIn]get[text]else[no]match[yes]]\" variable=\"ignore\">\n<$transclude tiddler=\"$:/core/ui/Buttons/save-wiki\" mode=\"inline\"/>\n</$list>\n<$list filter=\"[[$:/status/IsLoggedIn]get[text]else[no]match[no]]\" variable=\"ignore\">\n<$button message=\"tm-login\">\nLogin\n</$button>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/sidebar": {
"title": "$:/plugins/tiddlywiki/menubar/items/sidebar",
"caption": "Sidebar",
"description": "Sidebar",
"is-dropdown": "yes",
"tags": "$:/tags/MenuBar",
"text": "<$scrollable fallthrough=\"none\" class=\"tc-popup-keep tc-menubar-dropdown-sidebar\">\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\" mode=\"inline\"/>\n\n</$scrollable>\n"
},
"$:/plugins/tiddlywiki/menubar/items/topleftbar": {
"title": "$:/plugins/tiddlywiki/menubar/items/topleftbar",
"tags": "$:/tags/MenuBar",
"description": "Items from $:/tags/TopLeftBar",
"caption": "Legacy Top Left Bar",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/topleftbar\" mode=\"inline\"/>",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>"
},
"$:/plugins/tiddlywiki/menubar/items/toprightbar": {
"title": "$:/plugins/tiddlywiki/menubar/items/toprightbar",
"tags": "$:/tags/MenuBar",
"description": "Items from $:/tags/TopRightBar",
"caption": "Legacy Top Right Bar",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/toprightbar\" mode=\"inline\"/>",
"custom-menu-styles-wide": "float: right;",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]reverse[]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>"
},
"$:/plugins/tiddlywiki/menubar/menu": {
"title": "$:/plugins/tiddlywiki/menubar/menu",
"tags": "$:/tags/PageTemplate",
"text": "\\define menubar-inner(size)\n<ul class=\"tc-menubar-list\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/toprightbar]]\">\n<$list filter=\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\" variable=\"ignore\">\n<$list filter=\"[[$size$]match[wide]] ~[<currentTiddler>get[show-when]match[$size$]] ~[{$:/state/popup/menubar/hamburger}match[yes]]\" variable=\"ignore\">\n<li style={{!!custom-menu-styles-$size$}} class={{{ [<currentTiddler>get[show-when]addprefix[tc-menubar-]] tc-menubar-item +[join[ ]] }}}>\n<$list filter=\"[<currentTiddler>!is-dropdown[yes]]\" variable=\"listItem\" emptyMessage=\"\"\"\n\t<!-- Dropdown -->\n\t<$set name=\"dropdown-state\" value=<<qualify \"$:/state/popup/topmenu/dropdown/\">>>\n\t<$set name=\"dropdown-state\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\n\t<$button popup=<<dropdown-state>> selectedClass=\"tc-selected\">\n\t<$set name=\"tv-wikilinks\" value=\"no\">\n\t<$transclude field=\"caption\" mode=\"inline\"/>\n\t<$text text=\" \"/>\n\t<span class=\"tc-menubar-dropdown-arrow\">\n\t<$transclude tiddler=\"$:/core/images/down-arrow\" mode=\"inline\"/>\n\t</span>\n\t</$set>\n\t</$button>\n\t</$set>\n\t</$set>\n\"\"\">\n<$list filter=\"[<currentTiddler>has[custom-menu-content]]\" variable=\"listItem\" emptyMessage=\"\"\"\n\t<!-- Link -->\n\t<$link to={{!!target}}>\n\t<$set name=\"tv-wikilinks\" value=\"no\">\n\t<$transclude field=\"caption\" mode=\"inline\"/>\n\t</$set>\n\t</$link>\n\"\"\">\n<!-- Custom content -->\n<$transclude field=\"custom-menu-content\" mode=\"inline\"/>\n</$list>\n</$list>\n</li>\n</$list>\n</$list>\n</$list>\n</ul>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/toprightbar]] +[limit[1]]\" variable=\"listItem\">\n<nav class=\"tc-menubar tc-adjust-top-of-scroll\">\n<div class=\"tc-menubar-narrow\">\n<<menubar-inner narrow>>\n</div>\n<div class=\"tc-menubar-wide\">\n<<menubar-inner wide>>\n</div>\n<div style=\"clear:both;\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]is-dropdown[yes]]\">\n<$list filter=\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\" variable=\"ignore\">\n<$set name=\"dropdown-state\" value=<<qualify \"$:/state/popup/topmenu/dropdown/\">>>\n<$set name=\"dropdown-state\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\n<$reveal type=\"popup\" state=<<dropdown-state>> class={{{ [<currentTiddler>get[dropdown]get[class]] }}} tag=\"div\">\n<div class=\"tc-drop-down\">\n<$transclude/>\n</div>\n</$reveal>\n</$set>\n</$set>\n</$list>\n</$list>\n</nav>\n</$list>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"text": "<!-- The menubar plugin overrides this tiddler to remove the core top left menu. The menu items that it would include are instead included in the menubar -->"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"text": "<!-- The menubar plugin overrides this tiddler to remove the core top right menu. The menu items that it would include are instead included in the menubar -->"
},
"$:/plugins/tiddlywiki/menubar/readme": {
"title": "$:/plugins/tiddlywiki/menubar/readme",
"text": "!! Introduction\n\nThis plugin provides a menu bar with the following features:\n\n* Menu items take the form of simple text links, dropdowns, or entirely custom content\n* Menu items can be individually enabled via the control panel\n* Responds to reduced screen width by abbreviating the menu items to a \"hamburger\" dropdown\n\n!! Menu Item Tiddlers\n\nMenu items are tagged <<tag $:/tags/MenuBar>>. The following fields are used by this plugin:\n\n|!Field Name |!Purpose |\n|title |Each menu item must have a unique title (not shown to the user) |\n|description |Description for use in listings |\n|tags |Must contain `$:/tags/MenuBar` |\n|caption |The text that is displayed for the menu item. Avoid links, using `~` to suppress CamelCase links if required |\n|target |For simple link menu items specifies a tiddler title as the target of the link |\n|is-dropdown |Set to `yes` to indicate a dropdown menu item |\n|text |For dropdown menu items, specifies the body of the dropdown |\n|custom-menu-content |Optional wikitext to be displayed in place of the caption |\n|custom-menu-styles-wide |Optional string of styles to be applied to menu item when the menubar is wide |\n|custom-menu-styles-narrow |Optional string of styles to be applied to menu item when the menubar is narrow |\n\nCustom menu items should make sure that the clickable link or button is an immediate child, and not wrapped in another element.\n\nNote that menu items can be pushed to the right of the menu bar setting the ''custom-menu-styles'' field to `float: right;`.\n"
},
"$:/plugins/tiddlywiki/menubar/styles": {
"title": "$:/plugins/tiddlywiki/menubar/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define breakpoint-plus-one()\n<$text text={{{ [{$:/config/plugins/menubar/breakpoint}removesuffix[px]add[1]addsuffix[px]] ~[{$:/config/plugins/menubar/breakpoint}] }}} />\n\\end\n\n\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}} />\n\\end\n\n\\define set-sidebar-scrollable-top-if-hamburger()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/MenuBar]] -[all[tiddlers+shadows]prefix[$:/config/plugins/menubar/MenuItems/Visibility/]regexp:text[hide]removeprefix[$:/config/plugins/menubar/MenuItems/Visibility/]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[$:/plugins/tiddlywiki/menubar/items/toprightbar]] -$:/plugins/tiddlywiki/menubar/items/hamburger +[limit[1]]\">\n\n\t.tc-sidebar-scrollable {\n\t\tmargin-top: 2em;\n\t}\n\n</$list>\n\\end\n\n\\define set-sidebar-scrollable-top()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/MenuBar]] -[all[tiddlers+shadows]prefix[$:/config/plugins/menubar/MenuItems/Visibility/]regexp:text[hide]removeprefix[$:/config/plugins/menubar/MenuItems/Visibility/]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[$:/plugins/tiddlywiki/menubar/items/toprightbar]] +[limit[1]]\">\n\n\t.tc-sidebar-scrollable {\n\t\tmargin-top: 2em;\n\t}\n\n</$list>\n<$reveal state=\"$:/state/popup/menubar/hamburger\" type=\"match\" text=\"yes\">\n\n\t<$set name=\"itemCount\" value={{{ [all[tiddlers+shadows]tag[$:/tags/MenuBar]] -[all[tiddlers+shadows]prefix[$:/config/plugins/menubar/MenuItems/Visibility/]regexp:text[hide]removeprefix[$:/config/plugins/menubar/MenuItems/Visibility/]] -[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/topleftbar]] -[all[tiddlers+shadows]tag[$:/tags/TopRightBar]limit[1]then[]else[$:/plugins/tiddlywiki/menubar/items/toprightbar]] +[count[]] }}}>\n\n\t\t.tc-sidebar-scrollable {\n\t\t\tmargin-top: calc(<<itemCount>> * 2em);\n\t\t}\n\n\t</$set>\n\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\nnav.tc-menubar {\n\tposition: fixed;\n\tz-index: 850;\n\tdisplay: inline-block;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n}\n\nnav.tc-menubar ul.tc-menubar-list {\n\tposition: relative;\n\tlist-style-type: none;\n\tmargin: 0;\n\tpadding: 0 0 0 42px;\n\tbackground: <<colour background>>;\n\tbackground: <<colour menubar-background>>;\n\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\thtml nav.tc-menubar ul.tc-menubar-list {\n\t\tpadding: 0 0 0 8px;\n\t}\n\n}\n\nnav.tc-menubar li.tc-menubar-item {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0;\n}\n\nnav.tc-menubar .tc-menubar-narrow li.tc-menubar-item {\n\tdisplay: block;\n}\n\nnav.tc-menubar li.tc-menubar-item > a,\nnav.tc-menubar li.tc-menubar-item > button {\n\tdisplay: inline-block;\n/*\ttext-transform: uppercase; */\n\tline-height: 1;\n\tfont-weight: 700;\n\tcolor: <<colour foreground>>;\n\tcolor: <<colour menubar-foreground>>;\n\tfill: <<colour foreground>>;\n\tfill: <<colour menubar-foreground>>;\n\ttext-decoration: none;\n\tpadding: 0.5em;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar li.tc-menubar-item > a.tc-selected,\nnav.tc-menubar li.tc-menubar-item > button.tc-selected {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n}\n\nnav.tc-menubar li.tc-menubar-item svg {\n\ttransition: none;\n\twidth: 1em;\n\theight: 1em;\n\tfill: <<colour foreground>>;\n\tfill: <<colour menubar-foreground>>;\n}\n\nnav.tc-menubar li.tc-menubar-item .tc-menubar-dropdown-arrow svg {\n\twidth: 0.5em;\n\theight: 0.5em;\n}\n\nnav.tc-menubar li.tc-menubar-item > a.tc-selected svg,\nnav.tc-menubar li.tc-menubar-item > button.tc-selected svg {\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n}\n\nnav.tc-menubar li.tc-menubar-item > a:hover,\nnav.tc-menubar li.tc-menubar-item > button:hover svg,\nnav.tc-menubar li.tc-menubar-item > button:hover {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar li.tc-menubar-item > a:active,\nnav.tc-menubar li.tc-menubar-item > button:active svg,\nnav.tc-menubar li.tc-menubar-item > button:active {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar .tc-drop-down,\nnav.tc-menubar .tc-block-dropdown {\n\tmax-width: 70vw;\n\tmax-height: 70vh;\n\toverflow: auto;\n}\n\nnav.tc-menubar .tc-drop-down a {\n\ttext-decoration: none;\n}\n\nnav.tc-menubar .tc-drop-down .tc-table-of-contents button {\n\tdisplay: inline-block;\n\twidth: auto;\n}\n\nnav.tc-menubar .tc-drop-down ol {\n\tmargin: 0;\n}\n\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar a,\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar button {\n\tdisplay: inline;\n\twidth: auto;\n}\n\nnav.tc-menubar .tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (max-width: {{$:/config/plugins/menubar/breakpoint}}) {\n\n\t.tc-menubar-wide {\n\t\tdisplay: none;\n\t}\n\n}\n\n@media (min-width: <<breakpoint-plus-one>>) {\n\n\tnav.tc-menubar li.tc-menubar-item.tc-menubar-narrow,\n\t.tc-menubar-narrow {\n\t\tdisplay: none;\n\t}\n\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t<<set-sidebar-scrollable-top-if-hamburger>>\n\n}\n\n@media (max-width: {{$:/config/plugins/menubar/breakpoint}}) {\n\n\t<<set-sidebar-scrollable-top>>\n\n}\n@media print {\n\n\tnav.tc-menubar {\n\t\tdisplay: none;\n\t}\n\n}\n"
},
"$:/tags/MenuBar": {
"title": "$:/tags/MenuBar",
"list": "$:/plugins/tiddlywiki/menubar/items/hamburger $:/plugins/tiddlywiki/menubar/items/topleftbar $:/plugins/tiddlywiki/menubar/items/contents $:/plugins/tiddlywiki/menubar/items/search $:/plugins/tiddlywiki/menubar/items/pagecontrols $:/plugins/tiddlywiki/menubar/items/server $:/plugins/tiddlywiki/menubar/items/toprightbar"
}
}
}
<div class="tc-table-of-contents">
<<toc-selective-expandable 'TableOfContents'>>
[[저장소 소개|문고]]<br>
[[도움말]]<br>
---<br>
''[[색인]]''<br>
<br>
[[연도별로 찾기|연도별 색인]]<br>
[[분류별로 찾기|분류별 색인]]<br>
[[주제별로 찾기|주제별 색인]]<br>
[[목록에서 찾기|목록]]<br>
---<br>
''[[정선(精選)]]''<br>
''[[찬가(讚歌)]]'' <br>
</div>
<div class="tc-table-of-contents">
<<toc-selective-expandable 'TableOfContents'>>
''마음의뜰''<br>
[[마음의 뜰|첫화면]]<br>
[[서점|https://www.upaper.net/gaenalitrak]]<br>
---<br>
''개나리✨''<br>
[[개나리✨|http://gaenali.net]]<br>
[[개나리✨위키|https://gaenali.net/wiki]]<br>
---<br>
''링크모음''<br>
[[추천사이트]]<br>
[[출판 관련 사이트]]<br>
[[전자출판 관련 사이트]]<br>
[[문학 관련 사이트]]<br>
---<br>
''티들리위키 관련''<br>
[[티들리 위키 관련 링크 모음]]<br>
[[티들리위키 정보]]<br>
</div>
<div class="tc-table-of-Links">
<$macrocall $name="toc-selective-expandable" tag={{$:/config/plugins/menubar/TableOfContents/Tag}}/>
[[첫화면]]<br>
[[마음의뜰 소개]]<br>
[[세월의 흔적들]]<br>
[[알리고 소개하고]]<br>
[[저작권 정보]]<br>
[[자주 묻는 질문]]<br>
</div>
{
"tiddlers": {
"$:/plugins/TWaddle/tw-admin/button": {
"created": "20170402140426027",
"creator": "Mat von TWaddle",
"text": "<$button class=<<tv-config-toolbar-class>> tooltip={{$:/plugins/TWaddle/tw-admin/button!!caption}} aria-label={{$:/plugins/TWaddle/tw-admin/button!!description}} class=<<tv-config-toolbar-class>>>\n <$action-sendmessage $message=\"tm-open-window\" \n $param=\"$:/plugins/TWaddle/tw-admin/content\" height=\"600px\" width=\"500px\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/plugins/TWaddle/tw-admin/icon}}\n</$list>\n</$button>",
"title": "$:/plugins/TWaddle/tw-admin/button",
"tags": "$:/tags/PageControls",
"modifier": "Mat von TWaddle",
"modified": "20180914232722214",
"description": "Open remote admin panel",
"caption": "TW Admin"
},
"$:/plugins/TWaddle/tw-admin/content": {
"created": "20170129121725770",
"creator": "twMat",
"text": "<div style=\"float:right\"><$vars tv-config-toolbar-icons=\"yes\">{{$:/plugins/TWaddle/tw-admin/button}}<br>{{$:/core/ui/Buttons/save-wiki}}</$vars></div>\n\n{{$:/plugins/TWaddle/tw-admin/sample}}",
"title": "$:/plugins/TWaddle/tw-admin/content",
"tags": "$:/tags/ControlPanel/Settings",
"modifier": "Mat von TWaddle",
"modified": "20180914232551925",
"list-before": "",
"caption": "TW Admin Panel"
},
"$:/plugins/TWaddle/tw-admin/readme": {
"created": "20170402162834837",
"creator": "Mat von TWaddle",
"text": "''TW Admin'' adds a {{$:/plugins/TWaddle/tw-admin/icon}} button to open a //separate browser window// with \"admin settings\". The settings can also be reached via //Controlpanel > Settings//,\n\nOf particular note is that this enables you hide the save tiddler button from viewers, but still save. It also means you can set the wiki to hide the whole sidebar, but still be able to access the save button.\n\nFor sample panel content, see [[here|http://tw-admin.tiddlyspot.com/#%24%3A%2Fplugins%2FTWaddle%2Ftw-admin%2Fsample]]",
"title": "$:/plugins/TWaddle/tw-admin/readme",
"tags": "",
"modifier": "Mat von TWaddle",
"modified": "20180914232705634"
},
"$:/plugins/TWaddle/tw-admin/icon": {
"created": "20170402184851291",
"creator": "Mat von TWaddle",
"text": "<svg class=\"tc-image-options-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n <g fill-rule=\"evenodd\">\n <path d=\"M110.48779,76.0002544 C109.354214,80.4045063 107.611262,84.5641217 105.354171,88.3838625 L105.354171,88.3838625 L112.07833,95.1080219 C115.20107,98.2307613 115.210098,103.299824 112.089164,106.420759 L106.420504,112.089418 C103.301049,115.208874 98.2346851,115.205502 95.1077675,112.078585 L88.3836082,105.354425 C84.5638673,107.611516 80.4042519,109.354468 76,110.488045 L76,110.488045 L76,119.993281 C76,124.409501 72.4220153,128.000254 68.0083475,128.000254 L59.9916525,128.000254 C55.5800761,128.000254 52,124.41541 52,119.993281 L52,110.488045 C47.5957481,109.354468 43.4361327,107.611516 39.6163918,105.354425 L32.8922325,112.078585 C29.7694931,115.201324 24.7004301,115.210353 21.5794957,112.089418 L15.9108363,106.420759 C12.7913807,103.301303 12.7947522,98.2349395 15.9216697,95.1080219 L22.6458291,88.3838625 C20.3887383,84.5641217 18.6457859,80.4045063 17.5122098,76.0002544 L8.00697327,76.0002544 C3.59075293,76.0002544 2.19088375e-16,72.4222697 4.89347582e-16,68.0086019 L9.80228577e-16,59.9919069 C1.25035972e-15,55.5803305 3.58484404,52.0002544 8.00697327,52.0002544 L17.5122098,52.0002544 C18.6457859,47.5960025 20.3887383,43.4363871 22.6458291,39.6166462 L15.9216697,32.8924868 C12.7989304,29.7697475 12.7899019,24.7006845 15.9108363,21.5797501 L21.5794957,15.9110907 C24.6989513,12.7916351 29.7653149,12.7950065 32.8922325,15.9219241 L39.6163918,22.6460835 C43.4361327,20.3889927 47.5957481,18.6460403 52,17.5124642 L52,8.00722764 C52,3.5910073 55.5779847,0.000254375069 59.9916525,0.000254375069 L68.0083475,0.000254375069 C72.4199239,0.000254375069 76,3.58509841 76,8.00722764 L76,17.5124642 C80.4042519,18.6460403 84.5638673,20.3889927 88.3836082,22.6460835 L95.1077675,15.9219241 C98.2305069,12.7991848 103.29957,12.7901562 106.420504,15.9110907 L112.089164,21.5797501 C115.208619,24.6992057 115.205248,29.7655693 112.07833,32.8924868 L105.354171,39.6166462 L105.354171,39.6166462 C107.611262,43.4363871 109.354214,47.5960025 110.48779,52.0002544 L119.993027,52.0002544 C124.409247,52.0002544 128,55.5782391 128,59.9919069 L128,68.0086019 C128,72.4201783 124.415156,76.0002544 119.993027,76.0002544 L110.48779,76.0002544 L110.48779,76.0002544 Z M64,96.0002544 C81.673112,96.0002544 96,81.6733664 96,64.0002544 C96,46.3271424 81.673112,32.0002544 64,32.0002544 C46.326888,32.0002544 32,46.3271424 32,64.0002544 C32,81.6733664 46.326888,96.0002544 64,96.0002544 Z\"></path> <path d=\"M56,72 L8.00697327,72 C3.59075293,72 0,68.418278 0,64 C0,59.5907123 3.58484404,56 8.00697327,56 L56,56 L56,8.00697327 C56,3.59075293 59.581722,0 64,0 C68.4092877,0 72,3.58484404 72,8.00697327 L72,56 L119.993027,56 C124.409247,56 128,59.581722 128,64 C128,68.4092877 124.415156,72 119.993027,72 L72,72 L72,119.993027 C72,124.409247 68.418278,128 64,128 C59.5907123,128 56,124.415156 56,119.993027 L56,72 L56,72 Z\"></path>\n </g>\n</svg>",
"title": "$:/plugins/TWaddle/tw-admin/icon",
"tags": "$:/tags/Image",
"modifier": "Mat von TWaddle",
"modified": "20180914232539846"
}
}
}
마음의뜰 공식 홈페이지이자 마음의뜰의 책들을 모아 놓은 문고(라이브러리)입니다.
$:/core/ui/ControlPanel/Plugins/Add/Plugins
$:/core/ui/ControlPanel/Toolbars
$:/core/ui/ControlPanel/Basics
$:/core/ui/ControlPanel/Plugins/Installed/Plugins
$:/core/ui/ControlPanel/EditorTypes
$:/core/ui/ControlPanel/Settings
$:/core/ui/ControlPanel/Saving/General
$:/core/ui/MoreSideBar/Explorer
$:/core/ui/ControlPanel/Toolbars/ViewToolbar
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define sidebarbreakpoint()\n<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\n\\end\n\n\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\define set-type-selector-min-width()\n<$set name=\"typeLength\" value={{{ [all[shadows+tiddlers]prefix[$:/language/Docs/Types/]get[name]length[]maxall[]] }}}>\n\n\t.tc-type-selector-dropdown-wrapper {\n\t\tmin-width: calc(<<typeLength>>ch + 4em);\n\t}\n\n\t.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {\n\t\tmin-width: <<typeLength>>ch;\n\t}\n\n</$set>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\ninput[type=\"search\"] {\n outline-offset: initial;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tfill: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml, body {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\n<<if-background-attachment \"\"\"\n\nbody.tc-body {\n background-color: transparent;\n}\n\n\"\"\">>\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n\tfont-size: 2em;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote > div {\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n left: -50px;\n top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n right: -80px;\n bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\nbutton, textarea, input, select {\n\toutline-color: <<colour primary>>;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration {\n\t-webkit-appearance:none;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n::selection {\n\tbackground-color: Highlight;\n\tcolor: HighlightText;\n\tbackground-color: <<colour selection-background>>;\n\tcolor: <<colour selection-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\t/* next 2 elements needed, since normalize 8.0.1 */\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n.tc-drop-down a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\n.tc-links-draggable-list .tc-droppable-placeholder {\n\tline-height: 2em;\n\theight: 2em;\n}\n\n.tc-sidebar-tab-open-item {\n\tposition: relative;\n}\n\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\n\tfont-size: 0.7em;\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tcolor: <<colour foreground>>;\n\tfill: <<colour foreground>>;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tborder-radius: 2px;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-primary-btn {\n \tbackground: <<colour primary>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\n.tc-sidebar-lists button small {\n\tcolor: <<colour foreground>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\n.tc-block-tags-dropdown > .tc-btn-invisible:hover {\n\tbackground-color: <<colour primary>>;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-sidebar-scrollable .tc-tag-label {\n\ttext-shadow: none;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tmargin-right: 3px; \n\tmargin-bottom: 1px;\n\tvertical-align: bottom;\n}\n\n.tc-edit-tags button.tc-remove-tag-button svg {\n\tfont-size: 0.7em;\n\tvertical-align: middle;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n.tc-tag-button-selected,\n.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour tiddler-background>>;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-topbar-right {\n\t\tright: 10px;\n\t}\n\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {\n\t\ttransform: rotate(-90deg);\n\t}\n\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n font-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-sidebar-lists .tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\ttransition: min-height {{$:/config/AnimationDuration}}ms ease-in-out, padding-top {{$:/config/AnimationDuration}}ms ease-in-out, padding-bottom {{$:/config/AnimationDuration}}ms ease-in-out;\n\t}\n\t\n\t<<if-no-sidebar \"\"\"\n\n\t\t.tc-sidebar-header {\n\t\t\tmin-height: 0;\n\t\t\tpadding-top: 0;\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\"\"\">>\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n\t.tc-story-river.tc-static-story-river {\n\t\tmargin-right: 0;\n\t\tpadding-right: 42px;\n\t}\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-tiddler-info {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t\tmargin-bottom: .5em;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.35em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n\tmargin-right: .1em;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-subtitle .tc-tiddlylink {\n\tmargin-right: .3em;\n}\n\n.tc-tiddler-missing .tc-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n height: 1.2em;\n width: 1.2em;\n margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-background>>;\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tcolor: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-type-selector .tc-edit-typeeditor {\n\twidth: auto;\n}\n\n.tc-type-selector-dropdown-wrapper {\n\tdisplay: inline-block;\n}\n\n<<set-type-selector-min-width>>\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n.tc-edit-fields.tc-edit-fields-small {\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n}\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {\n\twidth: auto;\n}\n\n.tc-edit-field-add-name-wrapper {\n\tdisplay: inline-block;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-edit-field-add-value {\n\t\twidth: 35%;\n\t}\n\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-viewswitcher .tc-image-button {\n\tmargin-right: .3em;\n}\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-drop-down .tc-drop-down-info {\n\tpadding-left: 14px;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n width: auto;\n margin-bottom: 0px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n\n/*\n** Centered modals\n*/\n.tc-modal-centered .tc-modal {\n\twidth: auto;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%) !important;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n\toverflow: auto;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n display: block;\n width: 100%;\n text-align: left;\t\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n flex: 1 0;\n background: <<colour tiddler-editor-background>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n background: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n flex: 3 1;\n border-left: 0.5em solid <<colour muted-foreground>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Import table\n*/\n\n.tc-import-table {\n\twidth: 100%;\n}\n\n.tc-import-table svg.tc-image-edit-button {\n\tmax-width: unset;\n}\n\n.tc-import-table th:first-of-type {\n\twidth: 10%;\n}\n\n.tc-import-table th:last-of-type {\n\twidth: 30%;\n}\n\n.tc-import-table .tc-row-disabled {\n\tbackground: <<colour very-muted-foreground>>10;\n\topacity: 0.8;\n}\n\n.tc-import-table .tc-row-warning {\n\tbackground: <<colour diff-delete-background>>50;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 28px;\n\tleft: 0;\n\tright: 0;\n\tmax-width: 50%;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 14px;\n\tpadding: 7px;\n\tborder: 1px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 7px;\n line-height: 0;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n font-size: 0.8em;\n margin-bottom: 0.5em;\n}\n\n.tc-alert-body > p {\n\tmargin: 0;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <<colour background>>;\n\tborder-bottom-none;\n\tbackground: <<colour dirty-indicator>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <<colour foreground>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: flex;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tfill: <<colour muted-foreground>>;\n\tbackground-color: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n align-items: center;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info {\n margin: 0.5em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugin-indicator {\n\tmargin: -16px 1em 0 2em;\n}\n\n.tc-plugin-info-sub-plugin-indicator button {\n\tcolor: <<colour background>>;\n\tbackground: <<colour foreground>>;\n\tborder-radius: 8px;\n padding: 2px 7px;\n font-size: 0.75em;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\tfill: <<colour background>>;\n}\n\n.tc-plugin-info-chunk {\n margin: 2px;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description {\n\tflex-grow: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n text-align: right;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\n\tfont-size: 1em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description div {\n\tfont-size: 0.7em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\n\twidth: 2em;\n\theight: 2em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 0 1em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugins {\n\tpadding: 0.5em;\n margin: 0 1em 1em 1em;\n\tbackground: <<colour notification-background>>;\n}\n\n.tc-install-plugin {\n\tfont-weight: bold;\n\tbackground: green;\n\tcolor: white;\n\tfill: white;\n\tborder-radius: 4px;\n\tpadding: 3px;\n}\n\n.tc-install-plugin.tc-reinstall-downgrade {\n\tbackground: red;\n}\n\n.tc-install-plugin.tc-reinstall {\n\tbackground: blue;\n}\n\n.tc-install-plugin.tc-reinstall-upgrade {\n\tbackground: orange;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <<colour table-header-background>>;\n\tborder-left: 1px solid <<colour table-header-background>>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <<colour table-header-background>>;\n\tborder-top: 1px solid <<colour table-header-background>>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <<colour table-header-background>>;\n\tborder-color: <<colour table-footer-background>>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\ninput.tc-palette-manager-colour-input {\n\twidth: 100%;\n\tpadding: 0;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n::-webkit-file-upload-button {\n\tcursor:pointer;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <<colour diff-equal-background>>;\n\tcolor: <<colour diff-equal-foreground>>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <<colour diff-insert-background>>;\n\tcolor: <<colour diff-insert-foreground>>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <<colour diff-delete-background>>;\n\tcolor: <<colour diff-delete-foreground>>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <<colour diff-invisible-background>>;\n\tcolor: <<colour diff-invisible-foreground>>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <<colour background>>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n \tlist-style-type: none;\n \tpadding-left: 0;\n \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n \tpadding-left: 1em; \n}\n\n.tc-tree button { \n \tcolor: #acacac;\n}\n\n.tc-tree svg {\n \tfill: #acacac;\n}\n\n.tc-tree span svg {\n \twidth: 1em;\n \theight: 1em;\n \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n \tcolor: lightgray;\n}\n\nselect {\n color: <<colour select-tag-foreground>>;\n background: <<colour select-tag-background>>;\n}\n\n/*\n** Utility classes for SVG icons\n*/\n\n.tc-fill-background {\n\tfill: <<colour background>>;\n}\n\n/*\n** Flexbox utility classes\n*/\n\n.tc-flex {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-flex-column {\n\tflex-direction: column;\n}\n\n.tc-flex-row {\n\tflex-direction: row;\n}\n\n.tc-flex-grow-1 {\n\tflex-grow: 1;\n}\n\n.tc-flex-grow-2 {\n\tflex-grow: 2;\n}\n\n/*\n** Other utility classes\n*/\n\n.tc-small-gap {\n\tmargin-left: .5em;\n\tmargin-right: .5em;\n}\n\n.tc-small-gap-left {\n\tmargin-left: .5em;\n}\n\n.tc-small-gap-right {\n\tmargin-right: .5em;\n}\n\n.tc-big-gap {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-big-gap-left {\n\tmargin-left: 1em;\n}\n\n.tc-big-gap-right {\n\tmargin-right: 1em;\n}\n\n.tc-word-break {\n\tword-break: break-all;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
"text": "15px"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
"text": "22px"
},
"$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
"text": "14px"
},
"$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
"text": "20px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storytop": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyright": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
"text": "686px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
"text": "960px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
"text": "350px"
},
"$:/themes/tiddlywiki/vanilla/options/stickytitles": {
"title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
"text": "no"
},
"$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
"title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
"text": "fixed-fluid"
},
"$:/themes/tiddlywiki/vanilla/options/codewrapping": {
"title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
"text": "pre-wrap"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n -moz-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n font-family:\n system-ui,\n -apple-system, /* Firefox supports this but not yet `system-ui` */\n 'Segoe UI',\n Roboto,\n Helvetica,\n Arial,\n sans-serif,\n 'Apple Color Emoji',\n 'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Consolas,\n 'Liberation Mono',\n Menlo,\n monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
"text": "system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\""
},
"$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
"text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
"text": "fixed"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
"text": "auto"
},
"$:/themes/tiddlywiki/vanilla/sticky": {
"title": "$:/themes/tiddlywiki/vanilla/sticky",
"text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\n}\n`\n</$list>\n</$reveal>\n"
}
}
}
! 2018년
* 연 초 Google Blogger.com을 이용하여 미원의 글 모음 블로그인 ‘미원의 뜨락’ 시작(trak.gaenali.pe.kr)
! 2019년
* 5월 7일, 미원의 첫 도서 ‘미원의 사계 – 봄이 온다(유페이퍼)’ 출간과 함께 마음의뜰 시작, 티스토리 닷컴에 마음의뜰 블로그 오픈(lable.gaenali.pe.kr)
* 5월 13일, ‘미원의 뜨락’과 ‘마음의뜰’ 블로그 통합하여 ‘마음의뜰 & 미원의뜨락’ 오픈(티스토리, mt.gaenali.pe.kr) 및 (구)미원의뜨락 블로그 종료
* 9월 16일, 미원의 두번째 도서, ‘미원의 사계 – 여름소경(小景) (유페이퍼)’ 출간
* 12월, 데이터 관리상의 이유로 ‘마음의뜰 & 미원의 뜨락’에서 ‘미원의 뜨락’ 부분 종료
! 2019년에 발간된 책의 목록입니다. (순서대로)
# [[미원의 사계 - 봄이 온다]] - 5월, 전자책
# [[미원의 사계 - 여름 소경]] - 9월, 전자책
! 2021년에 발간된 책의 목록입니다. (순서대로)
# [[미원단상 1 - 양주동천]] - 3월, 전자책
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qodKyrAHcEKIn2hAGSWi2sPz4GrJRXAtDw+CK7YLH5G5ubkNGzaU3x9EREREFQoJDQFS/4zJ4ODgMEX9+vWdPVcSpyuYqzxx7tixY6eUJ1+2b99eH+p2796dk5NTt27dzp07l/M+L0DAzspyfMG7W6lV6LNreU4OGVyJai0vB9fk5OQdO3aoI35+LVq00J4KUB4eBNezZ8/iE7xOnTpNmza1eYMrERERUflJugNEO487Ud1SWFh4+PBhxGND+pVLlBs1atSwoRfuVzp37tyhQ4ewUTjBcyu1Csmu7HElIs94Objm5ubu3bv39OnTGI6MjLzsssuCgrxwkyQ+pLKzs5Fa7d+tmpKSglnwCd6kCR+3Q0RERFQTMLgS1VpeDq5ERERERBWEwZWo1vLwqcJERERERERElYPBlYiIiIiIiHwagysRERERERH5NAZXIiIiIiIi8mkMrkREREREROTTGFyJiIiIiIjIpzG4EhERERERkU9jcCUiIiIiIiKfxuBKREREREREPo3BlYiIiIiIiHwagysRERERERH5NAZXIiIiIiIi8mkMrkREREREROTTGFyJiIiIiIjIp/mfP39eHaQKltaqvTpUzUUlHFCHiIiIiCpRZmYmfkZERMgoEdUe7HElIiIiIiIin8bgSkRERERERD6NwZWIiIiIiIh8GoMrERERERER+TQGVyIiIiIiIvJpDK5ERERERETk0xhciYiIiIiIyKfxe1wrj7PvcfXZr0WtdhUmIiKimo3f40pUa7HHlYiIiIiIiHwagysRERERERH5NAZXIiIiIiIi8mkMrkREREREROTTGFyJiIiIiIjIpzG4EhERERERkU9jcCUiIiIiIiKfxuBKREREREREPo3BlYiIiIiIiHwagysRERERERH5NAZXIiIiIiKVfwl1nIh8A4MrEREREZGDPq8yuxL5FAZXIiIiIiImVSKf5n/+/Hl10IbU1NSEhISioiJ1vCIFBARERka2adNGRo8ePZqenl5pq27VqlV0dLQ67qW1t735NnWotPhv5qpDpq2GM2fOnDp1qhI2HKsOCwtr1qyZOu7nl9aqvTpUmr7CPsjchpV58Pg+c/sQERFVF5mZmfgZEREho15kmVrdOk8mogrlXnDdtm1b3bp1ceKrjlewnJyc7t27y3Blrrq4uDgvL09bNXhl7Y2HDFeHSju1fJE6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YjC1OuNecCUiIiIiqioMruQLKi67Mpq5wEuFiYiIiIiI7KqgeMnU6hqDKxERERERkRu8HjKZWsvE4EpEREREROQeL0ZNplY7GFyJiIiIiIjc5pXAydRqE4MrERERERGRJ8oZO5la7eNThYmIiIiIiDzn2XOGGcTcwh5XIiIiIiIiz3kQQZla3cXgSkREREREVC5uBVGmVg8wuBIREREREZWXzTjK1OoZBlciIiIiIiIvKDOUMrV6jMGViIiIiIjIO1xEU6bW8mBwJSIiIiIi8hrLgMrUWk78OhwiIiIiIiLvk6/JYeDyCv+srCxpyuLiYgxoUCI/iYiIiIiIiCqaRH381NSp47hG2DGUmZkpSRXBVcioUGYnIiIiIiIiqlhKVlUhsgp1HMEVYbVIIQNKenXQgisTLBEREREREVUExFJtQE2rdeoEBATITxnwz8jIQEYtLCyMiIioV6+ezEBERERERERUJc6dO5eWlhYYGIjUip+OIHu+5CJhplYiIiIiIiKqcqGhofn5+YWFhZJVEVrV4FpUVKROQkRERERERFSlCgoKEFzlVlY1uEp2VV8nIiIiIiIiqlISXCW1AoMrERERERER+RbH04NLulvB8a04DK5ERERERETkOxBRBeIqRtUeV5CXiYiIiIiIiKqWRFaNo8eViIiIiIiIyHdIXlVH/PzU4KovIiIiIiIiIqpyWlBljysRERERERH5NAZXIiIiIiIi8jkWlwoTERERERER+SYGVyIiIiIiIvJpDK5ERERERETk0xhciYiIiIiIyKcxuBIREREREZFPY3AlIiIiIiIin8bgSkRERERERD6NwZWIiIiIiIh8GoMrERERERER+TQGVyIiIiIiIvJpDK5ERERERETk0xhciYiIiIiIyKcxuBIREREREZFPY3AlIiIiIiIin8bgSkRERERERD6NwZWIiIiIiIh8GoMrERERERER+TQGVyIiIiIiIvJpDK5ERERERETk0xhciYiIiIiIyKcxuBIREREREZFPY3AlIiIiIiIin8bgSkRERERERD6tOgXXwsLCLVu2LFf8/PPP6enp6gtERERERERUc1Wn4JqYmKiFVYTYQ4cOybD3HXPE4zW7GYyJiIiIiIiqnv+pU6cKCgpycnJiY2PVMl91WKGO+Pk1bNiwZ8+e6og3FGYnHz1y9GTq2byComJHgX9AUN3g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ef/Xz+7Ur9QvKKRRbMd7Hn/h11WOlaqFRERERLUekhWoI14SGhravXt3RAat/1MPyQ15D6lvmwJZbociJcX5t47Yo30bDRKpftXaRcte/CIcO6lV6F+tRtnV/9SpUwUFBaix4QJdH3RYoY4of8Nwv3PVnmNblu9PD27eo39nNy45JiIiIiIiH5Sfn4/caEitKESwzFBgtG7duoiRgAGJsihv0qSJ4bZEtyD6yvOWDMs5dOiQrBQB0isp3X5q1UhWl2Hp+DW0T5XbvHlzcHBwaGgoqhcUFOSjPa6WDJcKR0V56SpYIiIiIiKqueLj43fs2IEMmaRAYJM+VQzk5eUhVXbu3Llr164SI5FdGzZs2K5dO5SXs9NV63FF+pIBoZVjXTJQHqiku6kVDP2uyNIy7LOqU49r5WGPKxERERFRTZGfn5+YmIi4KDev1q1bF0lSAiqGZRpLSEnlue9UOkIDAgIQjPUr2r17tywZ5WpROSCQS8C2n1o1Wr8rqofoLoU+wtDjyuBKREREREREvqUaXypMREREREREtRCDKxEREREREfk0BlciIiIiIiLyaQyuRERERERE5NMYXImIiIiIiMinMbgSERERERGRT2NwJSIiIiIiIp/G4EpEREREREQ+jcGViIiIiIiIfBqDKxEREREREfk0BlciIiIiIiLyaQyuRERERERE5NMYXImIiIiIiMinMbgSERERERGRT/M/depUQUFBTk5ObGysWkbVUFqr9upQzRKVcEAdIiIiIiKiWmPz5s3BwcGhoaEhISFBQUHscSUiIiIiIiKfxuBKREREREREPo3BlYiIiIiIiHwagysRERERERH5NAZXIiIiIiIi8mkMrkREREREROTTGFyJiIiIiIjIp/F7XGsIZ9/jWl2+B7W615+IiIiIiLyI3+NKRERERERE1QmDKxEREREREfk0BlciIiIiIiLyaQyuRERERERE5NMYXImIiIiIiMinMbgSERERERGRT2NwJSIiIiIiIp/G4EpEREREREQ+jcGViIiIiIiIfBqDKxEREREREfk0BlciIiIiIiLyaQyuRERERERE5NP8T506VVBQkJOTExsbq5ZVkePHj6ekpJw/f14dr0j+/v5NmjRp2bKljFbhqsEra297823qUGnx38xVh6xWnZmZefLkyUrb8GbNmkVERMioYavt1N8XVNDuq0nY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
봄이 오면 나 노래하리라
싱그러운 꽃들이 기지개를 펴고
잠들었던 생명들이 깨어나며
따스한 햇살속 아름다운 향기가 퍼져나갈때
나 봄을 노래 하리라
여름이 오면 나 노래 하리라
시원한 바람이 나를 반기고
푸르른 초록에 녹음이 짙어오고
누구나를 반기는 물소리 시원하며
뜨거운 태양아래 구름예쁜 어느 날에
그늘에 쉬며 여름의 어느 순간을 나 노래 하리라
가을이 오면 나 노래 하리라
세상을 감성으로 만드는 선선한 날씨와
마음을 물들이는 단풍과 떨어지는 낙엽
그리고 마음을 돌아보게 하는 가을빛 노을
이 모든 것을 느끼고 즐기며 누리는 나, 가을을 노래 하리라
겨울이 오면 나 노래 하리라
누구나의 마음을 동심으로 돌리는 눈이 내리고
차가운 바람을 이겨낸 겨울의 온기와
따뜻한 커피 한잔의 위로 그리고 사랑
다가올 봄을 기대하게 하는 겨울의 풍경들
이 추위를 이겨내며 나 겨울을 노래 하리라
그리고 또 노래 하리라
매년 찾아오는 계절이지만
매번 또다른 계절의 느낌
그리고 계절의 분위기
계절이 주는 마음과 선물
이 모든 것들을 만날 때 나는 노래 하리라
! 미원 작품 저장소 도움말
!!! 미원 작품 저장소는 미원의 작품들을 모아놓은 일종의 보존실이자 데이타베이스입니다. 미원이 미원의 이름으로 내놓은 모든 작품들에 대한 최대한의 정보를 제공합니다.
! 자료를 찾는 방법
!!! 자료를 찾는 가장 쉽고 간편한 방법은 상단의 검색창을 이용하는 것입니다. 책 제목, 출간 연도 등을 두글자 이상 입력후 엔터(혹은 return)키를 눌러보세요. (검색은 한글·영문 상관없이 세글자 이상 입력하셔야 합니다.)
!!! 책에 대한 정보가 없고 목록에서 선택하는 방식으로 또는 분류별로 찾는 방식으로 정보를 얻기 원하신다면 [[색인]]코너를 참조하세요. 책의 시리즈 별로 혹은 연도별로 그리고 주제별로 찾을 수 있습니다.
!!! TiddlyWiki에 대해 잘 아시는 분이라면 [[검색연산자|https://tiddlywiki.com/static/search%2520Operator.html]]를 참고해보세요.
! 자료를 찾을 수 없을 경우
!!! 보통 찾고자 하는 자료, 예를 들어 책 이름이나 출간 연도 등을 착각하고 있는 경우에 찾지 못할 수 있습니다. 예컨데 2021년에 출간된 책을 2019년 책으로 착각한다거나 '봄이 온다'를 '봄이 운다'로 착각하는 식입니다.
!!! 검색창을 이용할 경우 띄어쓰기가 안되어 있거나 한번에 너무 많은 검색어를 입력하는 경우 검색결과가 없을 수 있습니다. (검색은 단어단위로 1~2개의 단어만 사용하여 검색하는 편이 효율적입니다.)
!!! 아직 저장소에 해당 자료에 대한 내용이 구축되지 않은 경우 찾지 못할 수 있습니다. 이 경우 별다른 공지가 없다면 빠른 시일내에 내용이 구축되도록 최선을 다하고 있습니다.
! 문서나 링크가 클릭되지 않는 경우
!!! 목록이나 페이지에는 문서 혹은 링크가 있는 듯 보이지만 클릭해도 아무런 반응이 없는 경우는 아직 문서가 구축되지 않은 것입니다. 향후 구축 예정이지만 어쨌든 현재는 구축되지 않은 문서를 의미합니다.
드디어 마음의뜰 새홈페이지가 개통했습니다. 아직 보완할 부분은 많습니다만 차차 갖춰지기를 소망합니다. 지켜봐주셔서 감사합니다!
! 마음의 뜰은 미원의 생각과 표현이 담긴 글들을 모아 책으로 출판하는 미니레이블입니다.
<$details summary="소개" state="!!accordion1">
마음의 뜰은 미원의 생각과 표현이 담긴 글들을 모아 책으로 출판하는 미니레이블입니다.<br>
미원의 생각과 표현이 담긴 글로 세상과 소통하고, 미원의 생각을 글로 표현하고, 미원의 생각과 표현을 글에 담아내려는 의도를 갖고 있습니다.
</$details>
<$details summary="목표" state="!!accordion2">
마음의뜰의 목표는 “꾸준히 출판활동을 지속하는 것”입니다.<br>
이 프로젝트를 시작하는 목적은 ‘수익’이 아니라 ‘유의미한 활동’을 하려는 개인적인 이유에서였습니다. 그렇기에 마음의뜰은 지금도, 앞으로도 ‘수익’이 주 목적인 책(속칭 ‘먹히는 글’, ‘잘 팔리는 책을 위한 글’)은 내지 않을 것입니다.
</$details>
<$details summary="다짐" state="!!accordion3">
<ol>
<li>신앙과 양심 그리고 사회윤리와 법률에 어긋나는 작품을 출판하지 않는다.</li>
<li>수익을 내는 자체가 목적인 작품을 출판하지 않는다.</li>
<li>신앙을 주제로한 도서가 아니더라도 모든 출판 과정은 기도로 영감을 구하며 시작한다. ‘기도의 부족이 모든 것의 부족이다.’</li>
<li>글을 쓰고 책을 내는데 필요한 모든 능력과 영감 그리고 그로부터 발생하는 수익은 하늘로 부터 오는 것이며 그것을 거두어 가는 것도 하늘의 뜻대로임을 명심한다.</li>
<li>지치지 않고 꾸준히 지속한다.</li>
<li>위 사항을 반드시 지킨다.</li>
</ol>
</$details>
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
<<list-tagged-draggable tag:"작품">>
! 미원 작품 저장소 소개
!!! 미원 작품 저장소(미원 작품 라이브러리)는 지금까지 미원이 세상에 내놓은 도서들의 목록 및 개별 도서의 ISBN, 발간시기, 책 표지, 소갯말, 목차 등에 대한 정보를 제공하는 저장소(라이브러리)입니다. 이 곳에서는 미원이 내놓은 도서에 대한 모든 정보를 확인 하실 수 있습니다.
! 브라우저에 대하여
!!! 이 사이트는 Microsoft Edge, Google Chrome, Mozilla Firefox, Apple Safari, Opera, Naver Whale 등 자바스크립트가 활성화된 현대적인 대부분의 브라우저에서 정상적으로 작동합니다.
!!! 다만 Microsoft Internet Explorer에서는 제대로 작동하지 않을 수 있으며 이는 정상적인 현상입니다. 참고로 Internet Explorer는 제조사인 Microsoft에서도 개발을 포기한 제품임으로 하루 속히 다른 브라우저로 이주하시는 것이 컴퓨터 보안 측면에서 유리합니다.
!!! 만일 Internet Explorer 브라우저가 아닌데 사이트가 정상 작동되지 않는다면 사용하고 계신 브라우저에서 'JavaScript(자바스크립트)'가 허용되어 있는지 확인해 보시기 바랍니다.
! 저작권 안내
!!! 본 저장소에 올라온 모든 자료는 별도의 언급이 없는 한 미원 또는 마음의뜰이 권리를 보유하고 있습니다. 미원 또는 마음의뜰의 명시적인 동의를 얻지 않고 본 저장소의 자료를 사용하는 것은 저작권을 침해하는 것으로 법적인 조치의 대상이 됩니다.
!!! 본 사이트는 티들리위키 5(TiddlyWiki Version 5)를 이용하여 제작되었습니다.
!!! 티들리 위키에서 제공하는 '내보내기'기능을 이용하거나 혹은 본 사이트가 작동하는데 필요한 파일을 임의로 다운로드하여 제3의 장소에 호스팅하거나 파일 형태로 공유하는 행위는 데이터의 일관성을 위해서 금지합니다. gaenali.net/library.html 이외에 호스팅되는 미원 작품 저장소는 모두 저작권을 위반하는 것으로 법적 조치의 대상이 됩니다.
! 이용방법
!! 본 사이트 이용 방법에 대해 알아보시려면 [[도움말]]을 참고하세요.
!! 본 사이트 이용 중 문의 사항에 대해서는 [[문의]] 코너를 참고하세요.
```
이 페이지는 단지 순수한 의도에서 유용하다고 판단하거나 소개하고 싶다고 생각된 사이트를 소개하려는 목적으로 존재합니다. 아래 각 사이트들은 개나리✨ 및 마음의 뜰과 직접적 연관이 없습니다.
또한 아래에 명시된 사이트는 어떠한 요청이나 요구를 받고 등재 된 것이 아님을 알려드리며 아래 사이트에 대해 개나리✨ 및 마음의 뜰은 어떠한 책임도 지지 않습니다.
```
!문학 관련 전시시설
* [[파주 지혜의 숲|http://forestofwisdom.or.kr/]] - 경기도 파주시 문발동 파주출판단지 내
* [[종로 윤동주문학관|https://www.jfac.or.kr/site/main/content/yoondj01]] - 서울특별시 종로구 청운동 청와대 뒷편
* [[부산 요산문학관|http://www.yosan.co.kr/main/index.html]] - 부산광역시 금정구 남산동 (1호선 범어사역 인근)
* [[고양 여행자북카페|https://www.goyang.go.kr/goyangtcenter/info/bookcafe.do]] - 고양시 일산동구 장항동 고양관광정보센터 내 (동구청 맞은편, 3호선 정발산역 2번출구)
* [[고양 플라워북카페|https://www.flower.or.kr/rose/rose01.php]] - 고양시 일산동구 장항동 호수공원 내
!분위기 있는 도서관, 도서실
* [[고양 마상공원작은도서관|https://www.smalllibrary.org/library/detail/1787057]] - 고양시 덕양구 주교동 마상공원 내
!문학주제 카페
* [[서울 마포 채그로|https://checkngrow.modoo.at/]] - 서울특별시 마포구 마포동
![[책과 함께하면 좋은 카페]]
사전에 '단상'이라는 단어를 검색하면 여러 의미가 뜬다. 여기서 단상(斷想)이란 짧은 생각, 퍼뜩 떠오른 생각을 의미하는 단어이다. '미원단상'이란 미원이 앞으로 풀어내게 될 여러 글들을 아우르는 하나의 카테고리(Category, 범주)를 뜻한다.
---
! [[미원단상 1 - 양주동천|미원단상 1 - 양주동천]]
>2021년 3월 발간, '미원단상'의 첫번째 책이며 일종의 여행기 성격을 띄고 있다.
[img[https://www.upaper.net/Cover/1137827/Cover.png]]
서명 : 미원단상 1
부제 : 양주동천
시리즈 : [[미원단상]]
출간시기 : 2021년 3월
출간방법 : 전자책 / 유페이퍼
ISBN : 9791166785221
ECN : I410-ECN-0111-2021-800-001490498
정가 : ₩3,000원
소개 : 경기도의 북부지역, 그 중에서도 동두천시를 중심으로 하여 2주동안 방역수칙을 잘 지키면서 동두천, 양주 남면, 파주 적성면, 연천군 등을 둘러보며 느낀 감상을 담은 여행기적 작품이다. 특히 부제를 정할때에 방문한 지역의 이름을 조합하여 제목을 지으려 '주양동천', '양천동주', '양파동천', '천주양연' 등 각 지역의 앞글자 혹은 마지막글자를 조합하여 이리저리 궁리해본 끝에 그나마 가장 느낌이 좋으면서도 무난한 듯 하여 '양주동천'으로 짓게 되었다. 다만 막상 짓고 보니 가장 핵심이되는 지역이면서 마음에 남은 '동두천'이 부각되지 않고 오히려 '양주'라는 이름이 양주시를 연상하게 하는 것 같아 조금 아쉬움이 남는다. (* ''양'' : ''양''주시, ''주'' : 파''주''시, ''동'' : ''동''두천시, ''천'' : 연''천''군)
구입 방법 : [[유페이퍼|https://www.upaper.net/gaenalitrak/1120656]] | [[YES24|http://www.yes24.com/Product/Goods/98873677]] | [[교보문고|https://digital.kyobobook.co.kr/digital/ebook/ebookDetail.ink?selectedLargeCategory=001&barcode=4801166785222&orderClick=LAG&Kc=]] | [[인터파크|https://edu.interpark.com/product/BookDisplay.do?_method=detail&sc.shopNo=0001100000&sc.prdNo=348416417&sc.saNo=007&bkid1=ebook&bkid2=prd&bkid3=newbook&bkid4=001]] [[네이버 시리즈|https://series.naver.com/ebook/detail.nhn?productNo=6079534]] [[알라딘|http://aladin.kr/p/EyaAL]]
책 소개
---
봄의 문턱에서 미원이 느낀 생각을 글로 남긴 첫번째 ‘미원의 단상’입니다. 이번 작품은 특별히 비대면을 지향하며 생황방역수칙을 지키는 가운데 경기도 북부지역 중 양주시 남면, 파주시 적성면, 동두천시, 연천군 등을 다니며 느낀 느낌과 풍경들을 담아낸 글입니다. 이 글이 지친 일상에 조금이나마 위로가 되기를 소망합니다.
---
목차 (표지 포함 19 페이지)
---
* 머릿말
* 코로나와 봄
* 내 마음에 불을 켜고
* 자유
* 바람그네
* 동두천 찬가
* 사진1 - 사진이 뒤집혀 보이는 것은 사용하시는 전자책 뷰어가 사진의 EXIF 데이터를 인식하여 자동 회전되어 발생되는 부분입니다. (특히 Internet Explorer 및 IE 기반 뷰어)
* 사진2
* 밤산책
* 동산
* 북쪽 하늘
* 바람
* 거리두기
* 봄을 맞으라
* 오후의 풍경
* 양주동천(陽駐憧泉)
미원의 사계는 미원의 시선(視線)에서 바라본 4계절의 풍경, 감상들을 풀어낸 글 모음집으로 2021년 12월 현재 4권 중 2권이 출간되었다.
---
! [[봄이 온다|미원의 사계 - 봄이 온다]]
>2019년 5월 발간, 미원의 첫 책이자 '미원의 사계' 시리즈의 '봄'편
! [[여름 소경|미원의 사계 - 여름 소경]]
> 2019년 9월 발간
[img[https://www.upaper.net/Cover/1118878/Cover.jpg]]
서명 : 봄이 온다
시리즈 : [[미원의 사계]]
출간시기 : 2019년 5월
출간방법 : 전자책 / 유페이퍼
ISBN : 9791164173990
ECN : I410-ECN-0111-2019-800-000374305
정가 : ₩1,000원
소개 : 미원의 첫 작품이면서 '미원의 사계' 시리즈의 '봄'편으로 유페이퍼를 통해 전자 출판되어 유페이퍼, YES24, 교보문고, 네이버 북(현. 네이버 시리즈), 알라딘에 유통되었다.
구입 방법 : [[유페이퍼|https://www.upaper.net/gaenalitrak/1118878]] | [[YES24|http://www.yes24.com/Product/Goods/72270195]] | [[교보문고|http://digital.kyobobook.co.kr/digital/ebook/ebookDetail.ink?selectedLargeCategory=001&barcode=4801164173991&orderClick=LEH&Kc=]] | [[네이버 시리즈|https://series.naver.com/ebook/detail.nhn?productNo=4138469]] [[알라딘|http://aladin.kr/p/CezQy]]
책 소개
---
모두의 마음을 움츠리게 했던 겨울이 지나가고 만물이 생동하는 봄입니다. 얼었던 마음이 녹아 마음의 자유와 평안을 얻기도 하지만, 갑작스레 찾아온 봄이 어색하여 마음에서 혼란이 일기도 합니다. 여러가지 모습과 풍경이 공존하는 봄, 이 아름다운 봄의 장면들을 당신과 함께 나누고자 합니다.
---
목차 (표지 포함 총 22페이지)
---
* 머릿말
* 봄(1)
* 추억을 걷다
* 바람(봄바람)
* 개나리
* 숲 (숲속에 들어서니)
* 꽃
* 있다면 (달려갈 그곳)
* (봄을 맞아) 내 살들에게 고함
* 사랑
* 봄(2)
* 이 또한 지나 가리라
* 반가운 봄
* 바람길
* 사계
[img[https://www.upaper.net/Cover/1120656/Cover.png]]
서명 : 여름 소경(小景)
시리즈 : [[미원의 사계]]
출간시기 : 2019년 9월
출간방법 : 전자책 / 유페이퍼
ISBN : 9791164177400
ECN : I410-ECN-0111-2019-800-000657236
정가 : ₩1,000원
소개 : 미원의 두번째 작품
구입 방법 : [[유페이퍼|https://www.upaper.net/gaenalitrak/1120656]] | [[YES24|http://www.yes24.com/Product/Goods/78895559]] | [[교보문고|http://digital.kyobobook.co.kr/digital/ebook/ebookDetail.ink?selectedLargeCategory=001&barcode=4801164177401&orderClick=LEH&Kc=]] | [[네이버 시리즈|http://aladin.kr/p/GM6T0]]
책 소개
---
사계절 중에서 가장 역동적이고 자유로운 계절이 무엇인가? 저는 ‘여름’이라고 생각합니다. 대비되는 계절인 겨울에 비해 얽매이는 것이 너무 없습니다. 추위와 싸울 필요도 없고, 길이 미끄러워 고생하거나 폭설로 지칠 이유도 없지요. 또 겨울보다 활동성도 대폭 증대되는 시기입니다. 물론 덥다는 문제와 폭우 등 몇 문제가 있긴 하지만 더위의 경우 추위에 비해 나름대로 구제책이 많이 있다고 생각합니다.
여름 소경(小景)은 이 아름다운 여름의 작은 풍경들을 제 나름대로 감성을 가지고, 그리고 제가 받은 영감을 가지고 표현한 작은 책이자 풍경(風鏡 : 눈을 갖다 대면 작은 풍경화 장면이 펼쳐지는 망원경 형태의 작은 도구)입니다.
이 책을 통해 아름다운 여름의 장면들을 많이 느끼고 누리셨으면 합니다.
---
목차 (표지 포함 19 페이지)
---
* 머리말
* 여름 소경(小景)
* 여름의 문턱
* 한 잔의 여유
* 우 중
* 휴식
* 소박한 일상에 대한 감사
* 밤 길
* 희생 (불판위의 고기)
* 진정한 휴식
* 바람
* 여름 밤 바람
* 사계
미원의 작품을 분류별로 찾으실 수 있습니다.
* [[미원의 사계]]
* [[미원단상]]
코로나의 혼란도 어느정도 마무리 되어가는 것 같습니다. 잘 지내셨습니까? 저도 살아는 있습니다. 개인적인 일들로 문학 활동은 거의 못했습니다. 그래서 이렇게나마 인사드립니다.
늘 건강하시고 평안하시기를 기도 드리면서 좋은 음식도 먹고 시원한 음료도 한잔하면서 곧 다가오는 여름도 잘 이겨내시기를 소망합니다!
!색인
!!! 원하는 정보를 찾기 위해서는 상단의 검색창을 이용하는 방법도 있지만 아래의 '색인'을 이용하는 것도 하나의 방법입니다.
!!! 아래에서 원하는 방법을 선택하세요.
!! [[연도별로 찾기|연도별 색인]] - 책의 발행 연도로 자료를 찾을 수 있습니다.
!! [[분류별로 찾기|분류별 색인]] - '미원의 사계', '미원 단상' 등 책의 분류별로 자료를 찾을 수 있습니다.
!! [[주제별로 찾기|주제별 색인]] - 주제(장르)별로 자료를 찾을 수 있습니다.
!! [[목록에서 찾기|목록]] - 모든 책을 목록화 해서 보여줍니다.
* [[2021년까지의 마음의 뜰|세월의 흔적들/2021년 이전]]
!! 2018년
* 연 초 Google Blogger.com을 이용하여 미원의 글 모음 블로그인 ‘미원의 뜨락’ 시작(trak.gaenali.pe.kr)
!! 2019년
* 5월 7일, 미원의 첫 도서 ‘미원의 사계 – 봄이 온다(유페이퍼)’ 출간과 함께 마음의뜰 시작, 티스토리 닷컴에 마음의뜰 블로그 오픈(lable.gaenali.pe.kr)
* 5월 13일, ‘미원의 뜨락’과 ‘마음의뜰’ 블로그 통합하여 ‘마음의뜰 & 미원의뜨락’ 오픈(티스토리, mt.gaenali.pe.kr) 및 (구)미원의뜨락 블로그 종료
* 9월 16일, 미원의 두번째 도서, ‘미원의 사계 – 여름소경(小景) (유페이퍼)’ 출간
* 12월, 데이터 관리상의 이유로 ‘마음의뜰 & 미원의 뜨락’에서 ‘미원의 뜨락’ 부분 종료
!! 2020년
* 연 초(일자 불명), ‘마음의뜰’을 Notion.so 기반으로 이동
* (2020년은 미원의 생업 등 으로 글 작업을 거의 하지 못했음)
!! 2021년
* 1월 1일, 미원의 개인 홈페이지 개나리✨와 마음의뜰을 하나의 틀에 담기로 하면서 통합 홈페이지 구축 (gaenali.net/matteul)
* 2월 중순(3~4주), 철저한 사회적 거리두기 및 생활방역 준수를 조건으로 글을 쓰며 새로운 탐험을 위한 2주간의 양.주.동.천 프로젝트 진행 (예정, '양.주.동.천'은 방문하는 지역의 앞 머리 글자로 경기도 ''__양__''주시(남면·은현면)·파''__주__''시(적성면·파평면)·''__동__''두천시·연''__천__''군(전곡읍·연천읍·신서면·백학면·왕징면)을 의미)
* 3월 19일, '미원단상 - 양주동천', 유페이퍼를 통해 출간
<<list-tagged-draggable tag:"시">>
우선 지금 현재는 주력으로 사용하는 기기가 안드로이드가 아니기에 더 나은 대안이 있는지는 모르겠습니다. 더 좋은 정보가 있으면 공유해주세요.
! 기본 설정법
1) 안드로이드에서 F-Droid (Google Play 보다 자유로운 앱스토어)를 설치합니다. (참고 : [[링크|https://androidsfactory.com/12]])
2) F-Droid에서 Tiddloid를 검색해서 설치해 줍니다.
3) 이제 해당 앱을 통해 티들리위키 파일을 편집이 가능합니다.
<$list filter="[!tag[hidden]tag[공지사항]sort[]]">
* <$link to={{!!title}}><$view field="title"/></$link><br><$list filter="[all[current]tags[]![contact]]"><$link to={{!!title}}> <br><$view field="title"/></$link></$list>
</$list>
미원의 작품을 연도별로 찾으실 수 있습니다. (* 연도가 없는 해에는 발간된 책이 없는 것입니다.)
* [[2019년]]
* [[2021년]]
! 마음의뜰에 대해 자주 묻는 질문들입니다.
<$details summary="마음의뜰은 출판사입니까?" state="!!accordion1">
마음의뜰은 출판사가 아니고 단지 작품활동을 더욱 잘하고자 하는 목적에서 만들어진 '레이블'입니다. </$details>
<$details summary="책은 어디서 구입할 수 있나요?" state="!!accordion2">
[[유페이퍼의 마음의뜰 서점|http://upaper.net/gaenalitrak]]에서 구입하는 방법이 있고 그 밖에 시중 인터넷 서점에서 구입하는 방법이 있습니다. (도서 별 구입가능한 서점사 정보는 저장소에서 책 이름으로 검색하세요.) </$details>
<$details summary="책을 구입했는데 환불하고 싶습니다." state="!!accordion3">
유페이퍼의 마음의뜰 서점에서 구입을 하셨든 아니면 YES24, 교보문고 등의 인터넷 서점에서 구입을 하셨든 상관 없이 모든 구입 내용에 대해서는 해당 서점사 고객센터에 문의하셔야 합니다. 마음의뜰은 도서 구입내용에 대해서 어떠한 도움도 드리지 못합니다.</$details>
<$details summary="책을 검색했는데 안나와요?" state="!!accordion4">
마음의뜰은 출판사로 등록되어 있지 않으므로 모든 도서는 전자책 유통사인 '유페이퍼'의 이름으로 발행됩니다. 따라서 '마음의뜰'로는 검색이 안됩니다. 책 제목 혹은 저자명(미원)으로 검색하셔야 합니다.</$details>
<$details summary="서점마다 책 가격이 달라요?" state="!!accordion5">
유페이퍼 마음의뜰 서점 상에 올라온 책 가격이 정가입니다. 그런데 이 책이 유페이퍼를 통해 다른 서점사에 납품되는 과정에서 서점사의 자체 이벤트나 정책을 통해 법률(출판문화산업 진흥법 제22조, 일명 '도서정가제')에서 허락하는 범위 내에서 할인을 하는 경우가 있습니다. 이는 마음의뜰 (혹은 유페이퍼)와 무관하며 오로지 서점사 자체의 결정에 따른 것입니다.
</$details>
<$details summary="쿠폰은 어디서 사용할 수 있나요?" state="!!accordion6">
간혹 저자(미원)의 재량으로 유페이퍼 상에서 사용 가능한 쿠폰을 발행하는 경우가 있습니다. 이 쿠폰은 '유페이퍼'상에서 '쿠폰 발행시 지정된 도서'를 구입하는데 사용이 가능합니다. 지정 도서 외의 도서를 구입하는데는 사용할 수 없고 현금화하거나 환불 등은 되지 않습니다. 또한 타 서점사에서는 사용할 수 없습니다. 쿠폰은 이메일로 전송되며 재발행되지 않으니 주의하시기 바랍니다.
</$details>
<$details summary="그밖에 연락이 필요합니다!" state="!!accordion7">
마음의뜰 혹은 저자 미원에게 연락을 하고 싶으시면 help@gaenali.net로 연락하시기 바랍니다.</$details>
!''저작권 정보''
!!''이 사이트의 모든 자료 등은 저작권법의 보호를 받습니다.''
!!! * 이 사이트는 티들리위키5를 이용해 구축되었습니다. 티들리위키5 및 그 부속 플러그인 등에 대한 모든 저작권은 [[https://tiddlywiki.com/#License]]에 명시된 조건에 따릅니다.
!!! * 그 밖에 플러그인 및 스킨에 대한 저작권은 해당 제작자가 규정한 저작권에 따릅니다.
!!! * 사이트 상단의 메뉴바 기능은 티들리위키5의 공식사이트의 플러그인을 사용하였습니다.
!!! * 그 밖의 모든 텍스트와 이미지들은 미원이 소유합니다. 다만 별도의 저작권이 표시되어 있는 자료 등은 해당 저작권자가 보유합니다. 미원 또는 해당 저작권자에게 명시적인 사전 허락을 받지 않고서 자료를 사용하는 것은 저작권 위반입니다.
!!!! * 명시적 사전 허락 : 사용하기 전에 이메일, 서면등의 방법으로 동의를 구한 것으로 자료상으로 허락받은 내용을 증명할 수 있는 것
!!! * 티들리위키가 지원하는 '내보내기' 기능 등을 이용해 본 사이트를 제3의 공간에 업로드하거나 미러하거나 보관하는 행위를 금지합니다.
!!! * 또한 티들리위키가 지원하는 '내보내기' 기능 등을 이용해 본 사이트를 다운로드 받은 후 이를 기반으로 새로운 위키 혹은 사이트를 구축하는 행위도 금지합니다.
!!! * Github상의 마음의뜰 저장소 데이터를 Clone(클론), Fork(포크) 등의 방법으로 복제하는 행위도 금지합니다.
!!! * 그 밖에 규정되지 않는 사항은 대한민국 법 혹은 사회통념에 따릅니다.
!!''티들리위키 초심자, 초보자를 위해''
!!! 저도 이 사이트를 구축하면서 많이 헤맸고 아직도 모르는게 너무나 많습니다. 질문을 해와도 답을 할 수 없는 경우가 많습니다. 이렇게 저렇게 만지다가 얻어 걸린거라 정확하게 '이렇게 했더니 저렇게 되더라'하고 답을 하기 어려운 경우이기 때문입니다. 보통 그런 경우엔 하나씩 뜯어보고 하면서 이해하게 되기도 하지요 티들리위키는 이를 하기에 충분합니다. 위키의 구조나 이를 통해 구축된 사이트의 모든 것이 낱낱이 공개되어 있기 때문입니다. 이웃집 꺽돌이·꺽순이의 속마음이나 신체구조는 알수가 없지만 티들리위키를 통해 구축된 사이트의 속과 내장은 모두 공개되어 있습니다.
!!! 이렇게 위의 저작권 안내에도 불구하고 티들리위키를 연구하거나 구조를 파악하는 일(일명 '리버스 엔지니어링') 위해 이 사이트를 샘플로 사용하신다면 오히려 저로써는 영광입니다. 다만 여전히 ''개인적 사용''만 가능하다는 것을 알려드립니다.
!!!! (1) 티들리위키가 자체 지원하는 방법을 통해 이 사이트를 사용자의 장치에 저장하여 위키의 내부를 분석하거나 사이트의 구조를 파악하는 것은 가능합니다.
!!!! (2) 위의 2번을 기반으로 새로운 것을 만드는 것도 가능합니다. 하지만 이 새로운 결과물을 웹 상에 공개하거나 타인과 공유하기 위해서는 다음 규칙을 지켜야합니다.
!!!! (3) 1번을 기반으로 새로운 결과물을 만든 경우 다음 사항을 지키는 조건에서 공개 혹은 공유가 가능합니다.
(3-1) 새로운 결과물 상에 마음의뜰 사이트의 어떠한 컨텐츠도 들어있지 않아야 함<br>
(3-2) 새로운 결과물 상에 티들리위키 및 테마나 플러그인을 제외하고 사용자가 저작권을 직접적으로 취득하지 않은 어떠한 데이터도 포함되어 있지 않아야 함.<br>
(3-3) 새로운 결과물을 공개 혹은 공유할때 출처를 명시하는 것은 당연하지만 어떠한 경우에도 미원 및 마음의뜰과 해당 사이트가 직·간접적인 관계가 있는 듯 소개하는 것은 불가능 함.
!!!! (4) 다만 위 1~3번에도 불구하고 다음의 목적으로는 절대 사용 할 수 없습니다.
(4-1) 대한민국의 반국가단체·반헌법적단체·그 밖의 한국 내에서 불법인 내용을 다루는 사이트를 구축하기 위한 용도(예 - 친북·친일·친박 및 극우·음란물·마약 등)<br>
(4-2) 사회적 지탄이 되는 내용을 담고 있는 사이트를 구축하기 위한 용도(성혐오를 비롯한 각종 혐오·범죄조장 등)<br>
(4-3) 기독교적 내용을 담고 있는 사이트로서 보편적 기독교 신앙과 이를 뒷받침할 성경적 해석 등과 배치되는 주장 혹은 보편적 기독교에서 동의할 수 없는 주장을 주요 이론으로 삼는 내용을 담은 사이트를 구축하기 위한 용도(일명 '이단·사이비')
```
이 페이지는 단지 순수한 의도에서 유용하다고 판단하거나 소개하고 싶다고 생각된 사이트를 소개하려는 목적으로 존재합니다. 아래 각 사이트들은 개나리✨ 및 마음의 뜰과 직접적 연관이 없습니다.
또한 아래에 명시된 사이트는 어떠한 요청이나 요구를 받고 등재 된 것이 아님을 알려드리며 아래 사이트에 대해 개나리✨ 및 마음의 뜰은 어떠한 책임도 지지 않습니다.
```
! 도구들
* [[온라인 맞춤법 검사기|http://speller.cs.pusan.ac.kr/]]
* [[표준국어대사전|https://stdict.korean.go.kr/main/main.do]]
* [[다음 사전|https://dic.daum.net]]
* [[네이버 사전|https://dict.naver.com/]]
* [[Google 도서 검색|https://books.google.co.kr/?hl=ko&tab=wp&authuser=0]]
* [[네이버 책|https://book.naver.com/]]
---
! 전자출판관련 정부기관, 민간단체
* [[문화체육관광부(문체부)|https://www.mcst.go.kr/kor/main.jsp]]
* [[한국출판문화산업진흥원|http://www.kpipa.or.kr/main/main.do]]
* [[한국저작권위원회|https://www.copyright.or.kr/main.do]]
* [[사단법인 한국전자출판협회|http://www.kepa.or.kr/]]
* [[한국전자출판협동조합|https://www.ebookcoop.co.kr/]]
* [[한국전자출판학회|http://www.dtp.or.kr/]]
---
! 전자출판 플랫폼
* [[교보문고 PubPle/POD|http://pod.kyobobook.co.kr/index.ink]]
* [[애플북스|https://www.apple.com/kr/apple-books/]]
* [[유페이퍼|http://upaper.net]]
---
! 전자도서관 (디지털도서관)
* [[교보문고 디지털도서관|https://digital.kyobobook.co.kr/digital/library/libraryIs.ink]]
* [[예스24 전자도서관|http://www.yes24.com/notice/eLibrary/eLibrary.aspx]]
* [[국립한국방송통신대학교 중앙도서관/전자도서관|https://library.knou.ac.kr/]]
* [[경기도사이버도서관|https://www.library.kr/cyber/index.do]]
* [[경기도메모리|https://memory.library.kr/]] - (구)경기도 인천시, (구)경기도 강화군, (구)경기도 옹진군, (구)경기도 개성시 등 사라진 행정구역을 포함하여 경기도의 과거 자료와 문서 등을 보존하는 아카이빙 사이트
---
! 주요 인터넷 서점사 (가나다- ABC - 123 순)
''아래 링크된 서점사는 마음의뜰 도서의 취급여부와 무관하게 링크되었습니다.''
* [[교보문고|http://www.kyobobook.co.kr/index.laf?OV_REFFER=http://matteul.gaenali.net]]
* [[네이버 시리즈|https://series.naver.com/ebook/home.series?isWebtoonAgreePopUp=true]]
* [[방송대 e북|https://press.knou.ac.kr/goods/ebookList.do?condLscValue=201&condMscValue=000]]
* [[알라딘|https://www.aladin.co.kr]]
* [[인터파크 도서|http://book.interpark.com/]]
* [[영풍문고|https://www.ypbooks.co.kr/kor_index.yp]]
* [[Google Play 도서|https://play.google.com/store/books?hl=ko]]
* [[YES24|https://yes24.com]]
```
미원의 작품 중 정(精)선(選)한 작품을 모아놓은 코너입니다.
```
<<list-tagged-draggable tag:"정선">>
작품의 종류(장르)별로 검색이 가능합니다.
* [[시]]
* [[수필]]
* [[신앙수기]]
[[Frank Mills의 'Sunday Morning Suite'에 맞춰 부르는 노래|https://www.youtube.com/watch?v=quVq--X2Q1k]]
01:02 부터
내 영혼아 주를 찬양 하여라
(나를 위해 십자가 지신 주께)
내 영혼아 주님을 송축 하여라
(못자국 난 그 손으로 불러 주시네)
(그 주님의) (사랑과) (은혜와) (희생을) (바라 보라) 모두 함-께 주의 보혈 찬양(X4)
그 높고 놀라운 주의 사랑
손뼉과 소리로 찬양-해
십자가 승리로 역사 하신주
모든 권세와 나라가 무너지네
(그 주님의) 보혈과 능력과 영광과 존귀의 위엄에 우리 영광을 올려 아멘(X11) 아멘을
내 영혼아 주를 찬양 하여라
(나를 위해 십자가 지신 주님께)
내 영혼아 주님을 송축 하여라
(못자국 난 그 손으로 불러 주시네)
나 때로는 방황을 한적도 있었고
(나 때로는 주님을 의심도 했었고)
나 때로는 마귀와 친구도 했었고
(나 때로는 마귀에 속기도 했었던)
어둠의 순간 이제는 자유해
이제는 주님의 영광이 임재해
(그 주님의) (사랑과) (은혜와) (희생을) (의지하라) 함-께 주의 보혈 찬양(X11) 찬양을
십자가 승리로 역사 하신주
승리의 그 이름 찬양 하세
우리의 무한한 방패 되신주
승리의 그 이름을 의지하세
(그 주님의) 보혈과 능력과 영광과 존귀의 위엄에 우리 영광을 올려 아멘(X11) 아멘을
십자가 승리로 역사 하신주
주님의 나라가 곧 임하리라
어둠의 순간들 다 지나가고
이제는 승리의 함성이 울리리라
(그 주님의) (사랑과) (은혜와) (희생을) (기억 하라) 모두 함-께 주의 보혈 찬양(X11) 찬양을
어둔날 다 지나 가
그날이 오리라 (X5) 그날이(X3) 오리라
십자가 승리의 그-날 아멘.
[[Enya의 'Long Long Journey' 멜로디|https://www.youtube.com/watch?v=5A01guT4HL4]]에 맞춰 부르는 곡
주님 나를 찾아 오사 만나 주시고
나의 어둠 슬픔 걱정 가져가시니
영원토록 밝은 빛이 나와 함께해
오- 영원토록 주와 함께 밝은 곳에 거하네
주님 나를 회복하사 어루만지고
나의 고통 약함 허물 치료하시니
영원토록 밝은 빛이 나와 함께해
오- 영원토록 주의 빛이 나를 이끄시-네
영원토록 밝은 빛이 나를 감싸며
오- 영원토록 주의 사랑 나를 변케 하시네
오 주의 크신 은혜 영원히 찬양해
오 주님의 크신 사랑 나의 삶을 변화시키네
영원토록 밝은 빛이 나와 함께해
오- 영원토록 주의 빛이 나를 이끄시-네
영원토록 밝은 빛이 나와 함께해
오- 영원 토록 주와 함께 밝은 곳에 거하네
영원히 주와 함께 아멘-
----------
* Enya의 곡들을 잘 들어보면 (가사는 영어라 제가 모르겠지만) 멜로디는 찬송가 처럼 잔잔하고 엄숙한 분위기의, 그러면서도 아름다운 곡조의 곡들이 많습니다. 제가 알기로 찬송가에 수록된 곡들은 최초부터 찬송가에 쓰일 목적으로 작곡된 곡도 있지만 당대의 대중가요나 군가, 민요등 세상 노래의 멜로디를 차용하여 가사만 같다 붙인 곡들도 있는 것으로 압니다. (기뻐하며 경배하세, 마귀들과 싸울지라, 천부여 의지 없어서 등 등) 따라서 Enya같은 사람의 곡들에 가사를 붙여서 노래로 만들어도 좋을 것 같다는 생각이 듭니다.
```
미원의 작품 중 기독교적 주제를 가지고 작사한 노랫말(찬양)의 모음입니다.
```
<<list-tagged-draggable tag:"찬가">>
[img[표지 URL]]
서명 : 책 제목
시리즈 :
출간시기 : 년 월
출간방법 : 전자책 / 유페이퍼
ISBN :
ECN :
소개 :
구입 방법 : [[유페이퍼|https://www.upaper.net/gaenalitrak/1118878]] | [[YES24|http://www.yes24.com/Product/Goods/72270195]] | [[교보문고|http://digital.kyobobook.co.kr/digital/ebook/ebookDetail.ink?selectedLargeCategory=001&barcode=4801164173991&orderClick=LEH&Kc=]] | [[네이버 시리즈|https://series.naver.com/ebook/detail.nhn?productNo=4138469]] [[알라딘|http://aladin.kr/p/CezQy]]
책 소개
---
```
모두 방문해본 카페이고 커피닮다를 제외하면 장시간 앉아도 본 카페들입니다.
추천 기준은 (1)프렌차이즈가 아니면서 (2)분위기 좋은 카페들입니다. 여기서 분위기는 카페 내부의 분위기 뿐 아니라 주변 분위기도 포함됩니다.
순전히 개인적 관점에서 작성된 곳입니다. 모두 다 버스 혹은 지하철(또는 둘 다)로 갈수는 있는 곳이지만 어떤 곳은 배차간격이 길어서 충분한 시간을 두고 방문해야 합니다.
```
>[[카카오맵(구. 다음지도)|https://map.kakao.com/]] [[네이버 지도|https://map.naver.com]]
* [[알마센&카카오 커피랩|https://www.instagram.com/cafe_almacen/]]
>고양시 일산동구 약산길 41 (중산동 20) / 약산마을 언덕길 올라서 010버스 회자지 부근
* [[큐커피|https://www.instagram.com/queue_coffee_lab/]]
>고양시 덕양구 고양대로1315번길 72 나동 (주교동 593-4) / 고양시청 인근 주교동행정복지센터 맞은편 (구. 큐닉스컴퓨터 자리)
* [[커피 마시다|https://www.instagram.com/coffee_masida/]]
>고양시 일산동구 성현로 207 (성석동 498-4) / 성석동 마골오거리 (←청아공원 간판 붙어 있는 2층 상가)
* [[커피폴|https://www.instagram.com/coffee_paul/]]
>경기도 동두천시 중앙로 279 1층 (생연동 602-11) / (구)버스터미널 정류장(연천방면)에서 서울의원 방향으로 가다가 중앙새마을금고 대각선 맞은편
* [[커피닮다|https://www.youtube.com/watch?v=QYDYBe643pc]]
>경기도 동두천시 중앙로 349-1 (생연동 570-12) /1호선 보산역 1번출구, 캠프보산에서 부대찌개거리 방향
* [[W-37|https://www.instagram.com/cafe_w_37/]]
>서울특별시 마포구 와우산로37길 11, 2층 (동교동 189-5) / 홍대 책거리 내, 공항철도·경의중앙선 홍대입구역 1·6번 출구에서 직진하다 목수의딸·비아토르 빌딩 2층
[img[mt-side.png]]<br>
---<br>
<br>
마음의뜰은 미원의 창작 활동을 더 잘하기 위해 시작된 1인출판 레이블입니다.<br> ''상단의 메뉴바에서 원하는 페이지를 선택해서 이동하세요.''<br><br><br>
---<br>
마음의뜰은 2019년 5월 시작되었고 2021년 11월부터는 국내에서는 처음으로 TiddlyWiki 기반의 사이트로 운영되고 있습니다.<br>
이 사이트의 TiddlyWiki 버전은 <<version>>입니다.
```
이 페이지는 단지 순수한 의도에서 유용하다고 판단하거나 소개하고 싶다고 생각된 사이트를 소개하려는 목적으로 존재합니다. 아래 각 사이트들은 개나리✨ 및 마음의 뜰과 직접적 연관이 없습니다.
또한 아래에 명시된 사이트는 어떠한 요청이나 요구를 받고 등재 된 것이 아님을 알려드리며 아래 사이트에 대해 개나리✨ 및 마음의 뜰은 어떠한 책임도 지지 않습니다.
```
* [[제책이란|http://www.samto.com/technote/read.cgi?board=FAQ&y_number=21]]
```
이 페이지는 단지 순수한 의도에서 유용하다고 판단하거나 소개하고 싶다고 생각된 사이트를 소개하려는 목적으로 존재합니다. 아래 각 사이트들은 개나리✨ 및 마음의 뜰과 직접적 연관이 없습니다.
또한 아래에 명시된 사이트는 어떠한 요청이나 요구를 받고 등재 된 것이 아님을 알려드리며 아래 사이트에 대해 개나리✨ 및 마음의 뜰은 어떠한 책임도 지지 않습니다.
```
! 출판관련 정부기관, 민간단체 (출판관련 정부기관 > 출판관련 협회 > 출판관련 유관 정부기관 > 출판관련 민간단체 순)
* [[문화체육관광부(문체부)|https://www.mcst.go.kr/kor/main.jsp]]
* [[한국출판문화산업진흥원|http://www.kpipa.or.kr/main/main.do]]
* [[대한출판문화협회|http://kpa21.or.kr]]
* [[한국저작권위원회|https://www.copyright.or.kr/main.do]]
* [[한국작은출판문화연구소|http://korpub.or.kr/default/]]
---
! 도서관 및 도서 관련 시설
* [[국립중앙도서관|https://www.nl.go.kr/]]
* [[대한민국국회도서관|https://www.nanet.go.kr/main.do]]
* [[작은도서관|https://www.smalllibrary.org/main/index]]
* [[고양시도서관센터|https://www.goyanglib.or.kr]]
* [[동두천시립도서관|https://lib.ddc.go.kr/]]
* [[국립한국방송통신대학교 중앙도서관/전자도서관|https://library.knou.ac.kr/]]
* [[파주 지혜의 숲|http://forestofwisdom.or.kr/]]
* [[모당공원 작은 도서관|https://www.facebook.com/modangparklibrary/]]
* [[한양문고|http://hanyangbook.com/]]
* [[국가기록원|https://www.archives.go.kr/next/viewMain.do]]
---
! 주요 인터넷 서점사 (가나다- ABC - 123 순)
''아래 링크된 서점사는 마음의뜰 도서의 취급여부와 무관하게 링크되었습니다.''
* [[교보문고|http://www.kyobobook.co.kr/index.laf?OV_REFFER=http://matteul.gaenali.net]]
* [[네이버 시리즈|https://series.naver.com/ebook/home.series?isWebtoonAgreePopUp=true]]
* [[알라딘|https://www.aladin.co.kr]]
* [[인터파크 도서|http://book.interpark.com/]]
* [[영풍문고|https://www.ypbooks.co.kr/kor_index.yp]]
* [[YES24|https://yes24.com]]
> ''이 문서를 비롯하여 마음의뜰 홈페이지에서 티들리 위키 관련 정보를 다루는 문서는 점진적으로 [[개나리✨위키|https://gaenali.net/wiki]]로 이전될 예정입니다. 처음에 마음의뜰에 이 코너를 만들때는 개나리✨에는 티들리 위키 관련 정보를 제공하는 코너를 만들 적합한 공간이 없었으므로 부득이 이 사이트에 내용을 만들었습니다만 이제 별도의 공간이 생겼으므로 그곳에 내용을 옮기려고 합니다.''
```
이 페이지는 단지 순수한 의도에서 티들리위키와 관련하여 유용하다고 판단하거나 소개하고 싶다고 생각된 사이트를 소개하려는 목적으로 존재합니다. 아래 각 사이트들은 개나리✨ 및 마음의 뜰과 직접적 연관이 없습니다.
또한 아래에 명시된 사이트는 어떠한 요청이나 요구를 받고 등재 된 것이 아님을 알려드리며 아래 사이트에 대해 개나리✨ 및 마음의 뜰은 어떠한 책임도 지지 않습니다.
```
! 티들리위키 공식 사이트
* [[티들리위키5 공식사이트|https://tiddlywiki.com/]]
* [[티들리위키 클래식|https://classic.tiddlywiki.com/]]
* [[티들리위키 깃허브|https://github.com/TiddlyWiki]]
! 티들리 위키에 적용 가능한 테마(스킨) 들
* [[티들리 위키 추천|https://tiddlywiki.com/static/Community%2520Themes.html]]
> 티들리 위키 공식 사이트가 추천한 테마입니다.
* [[미니멀한 5가지의 테마들|https://nesslabs.com/tiddlywiki-themes]]
> 심플하고 미려한 5가지의 테마들입니다.
* [[Tiddly Touch|http://muritest.tiddlyspot.com/]]
> 터치 인터페이스에 친화적인 테마로 노트메모 대용으로 사용이 가능합니다.
* [[Google 검색 결과|https://www.google.com/search?client=firefox-b-d&q=Tiddlywiki+Theme]]
> Google 검색창에 'TiddlyWiki Theme'를 검색한 결과입니다. 때로는 검색만 해봐도 나오는 경우도 있습니다.
! 티들리위키 관련 프로그램
```
티들리위키 자체는 파일 하나만 있으면 작동하지만 이 위키를 편집하기 위해서는 프로그램이 있어야 편리하게 사용 할 수 있습니다. 아래 프로그램은 제가 직접 써보고 좋다고 생각된 것들입니다.
<br>
참고로 티들리위키의 공식(오피컬) 데스크탑 혹은 모바일 어플리케이션은 없습니다. (개발자가 직접 빌드해 사용할 수 있는 안드로이드용 앱 코드를 제공하기는 하지만 프로그래밍 도구가 있어야 하기에 사실상 무용지물입니다.) 아래 소개하는 프로그램들은 모두 비공식이나 많은 이들이 활용하고 있는 제품입니다.
```
* [[TiddlyDesktop|https://tiddlywiki.com/static/TiddlyDesktop.html]]
> Windows, Linux, MacOS를 지원하는 데스크탑용 프로그램입니다.
* [[Tiddloid|https://github.com/donmor/Tiddloid]]
> 안드로이드용 티들리위키 편집 프로그램입니다.
* [[TiddloidLite|https://github.com/donmor/TiddloidLite]]
> 위 프로그램의 경량화(라이트) 버전
* [[Quine 2|https://tiddlywiki.com/static/Saving%2520on%2520iPad%252FiPhone.html]]
> iOS/iPadOS용 유료 티들리위키 편집 프로그램으로 2021년 10월 기준 5,900원가량 하는 유료 프로그램입니다. 유료라는 점이 흠이긴 하지만 티들리위키의 매력을 아시는 분이라면 충분히 지불할 가치가 있다고 생각됩니다. iOS/iPadOS의 파일앱을 지원하며 iCloud Drive를 파일 위치로 지정하면 iCloud Drive를 지원하는 장치에서 쉽게 열어보고 동기화 할 수 있습니다.
* [[Timimi|https://ibnishak.github.io/Timimi/]]
> 위 티들리데스크톱은 별도의 프로그램 형태로 돌아간다면 이 티미미는 내가 컴퓨터에서 주로 사용하는 웹브라우저에서 플러그인 형식으로 설치해 돌아간다는 특징이 있습니다. Safari를 제외한 대다수의 웹브라우저를 지원합니다.
! 티들리위키를 웹호스팅해주는 사이트
```
티들리위키의 단점(제3자 공개의 불편함, 언제어디서나 별도 프로그램 없이 수정)을 말끔하게 해소시켜주는 호스팅 사이트입니다.
```
* [[Tiddlyspot|http://tiddlyspot.com/]]
> 클래식의 티들리위키 및 티들리위키 5를 호스팅 해주는 사이트였으나 기술적 문제로 2021년 초 서비스 종료되었습니다.
* [[Tiddlyhost|https://tiddlyhost.com/]]
> 위 서비스의 설립자가 티들리스팟 종료 이후 새롭게 만든 서비스입니다. 단 티들리위키5만을 지원합니다.
! 티들리위키 관련 정보(한국어)
! 티들리위키 관련 정보(외국어)
* [[tesseRact|https://ibnishak.github.io/Tesseract/]]
* [[http://tobibeer.github.io/tb5/#]]
* [[https://kookma.github.io/TW-Scripts/]]
티들리위키의 파일을 열어서 열람하는데는 웹브라우저만 있으면 되지만 이 위키를 열어서 내용을 수정해서 반영하기 위해서는 이 수정한 내용을 티들리위키 파일내에 반영(저장)시켜주는 프로그램이 필요합니다. 이 페이지에서는 그 다양한 방법과 프로그램들을 소개합니다.
! 이미 만들어진 티들리위키를 단순열람시
이 경우에는 자바스크립트를 지원하는 최신 웹브라우저만 있으면 됩니다. 그 어떤 프로그램의 설치도 필요 없습니다.(Mozilla Firfox, Microsoft Edge, Google Chrome, Opera, Gnome Web, KDE Konqueror, Apple Safari 등) __''단 모바일 환경의 경우 특정 브라우저에서만 사용이 가능한 경우도 있습니다.''__
! 컴퓨터에서 나 혼자 수정하며 보는 용도로 사용할때
1) 가장 원시적인 방법은 웹브라우저에서 티들리위키의 내용을 변경 후 '저장'을 누르면 나오는 다운로드 창에서 해당 티들리위키 파일을 덮어써주는 것입니다. 다만 매우 불편하며 특히 '변경사항이 있을때 마다 저장'을 활성화 한 경우 수백번을 저장해주어야 합니다.<br>
2) 브라우저 플러그인인 [[Timimi|https://tiddlywiki.com/#Timimi%3A%20WebExtension%20and%20Native%20Host%20by%20Riz]]를 사용하는 방법<br>
> Mozilla Firefox, Google Chrome, Chromium 기반의 Microsoft Edge, Opera, Naver Whale<br>
3) [[Tiddly Desktop|https://tiddlywiki.com/#Saving%20on%20TiddlyDesktop]]을 사용하는 방법<br>
> Windows, Linux, MacOS 지원
! 네트워크 상에 저장해서 사용하는 방법
1) [[Google Drive + Chrome 브라우저 플러그인을 사용하는 방법|https://tiddlywiki.com/#TiddlyDrive%20Add-on%20for%20Google%20Drive%20by%20Joshua%20Stubbs]] - 단점은 PC에서만 쓸 수 있다는 점입니다.<br>
2) [[Dropbox용 티들리위키를 사용하는 방법|https://twcloud.github.io/]]<br>
3) Apple iCloud Drive에 넣어 놓고 사용하는 방법 - 애플의 iCloud Drive를 지원하는 기기를 가지고 있다면 여기에 티들리위키를 넣어두고 모바일에서는 Quine(유료)앱, PC에서는 Windows 또는 MacOS용 Tiddly Desktop앱을 이용해 동기화 할 수도 있습니다. (만일 여러분이 사용하시는 클라우드 서비스나 NAS 앱이 'iOS/iPadOS'의 '파일앱'을 지원한다면 iCloud Drive가 아니라 해당 서비스를 사용할 수도 있습니다.)<br>
4) WebDav 서버를 사용하는 방법 - 만일 WebDav서버를 갖고 계시다면 WebDav 서버상에 티들리위키 파일을 넣어놓고 WebDav서버에 웹브라우저를 통해 접속해 티들리위키파일을 이용하면 해당 저장 내용이 자동으로 서버측 파일에 반영됩니다. [[참조|https://tiddlywiki.com/#Saving%20via%20WebDAV]] WebDav서버를 얻는 가장 쉬운 방법은 스마트폰/스마트패드에서 WebDav 서버를 지원하는 앱을 이용하는 것이고 Wevo Air M7 등의 WebDav 지원 무선외장하드를 이용하는 방법이 있습니다.<br>
! 제3자와 공유를 하고 싶을때 (수정 불필요)
1) 인터넷호스팅을 사용하시면 그냥 파일을 업로드해서 주소를 공유하면 될것입니다. 혹은 Tistory에 블로그를 만드신 뒤 스킨관리자에서 티들리위키 파일을 업로드하고 그 주소를 제3자와 공유하시면 됩니다.<br>
! 제3자와 공유를 하고 싶을때 (수정 필요)
1) [[티들리호스트|티들리호스트, 가장 간편한 티들리위키 발행법]]를 사용하는 방법 - 제3자와 위키를 공유도 하면서 위키의 내용을 바로바로 수정하고 싶을 때 가장 쉽고 간편한 방법입니다.<br>
2) [[깃허브|티들리위키를 깃허브에 발행하고 수정하는 법]]를 사용하는 방법 - 조금 복잡하긴 하지만 고생한 보람은 느낄수 있습니다.<br>
''티들리위키의 운영에 도움이 될만한 팁을 나름대로 정리해 보았습니다.''
<$list filter="[!tag[hidden]tag[티들리위키]sort[]]">
* <$link to={{!!title}}><$view field="title"/></$link><br><$list filter="[all[current]tags[]![contact]]"><$link to={{!!title}}> <br><$view field="title"/></$link></$list>
</$list>
<b>* 과거에 이 문서를 처음 작성할때 저는 아이폰과 아이패드를 쓰고 있었지만 현재는 모두 과거의 일이며 갤럭시폰과 크롬북을 쓰고 있습니다. 또한 iOS/iPadOS 기기는 앞으로도 사용할 계획이 전혀 없습니다. 따라서 iOS/iPadOS용 정보는 더 이상 업데이트 되지 않음을 양해바랍니다. 또한 Android와 ChromeOS에서 티들리위키를 편집하는 방법에 대해서 기록해볼 예정입니다.</b>
우선 티들리위키의 작동방식을 이해하시기를 원합니다. 그리고 인터넷에 떠도는 정보들의 도움을 받아서라도 혼자서 할 수 있겠다고 생각되실 때 도전하세요. 참고로 스스로 익히시는 기회를 드리는 차원에서 깃허브에 ''저장소''를 만드는 방법과 이 ''저장소''의 HTML파일을 웹에 발행하는 방법은 알려드리지 않겠습니다. 검색을 해보시거나 부딪혀 보시길 권합니다.
아무튼 티들리위키의 작동방식을 이해하셨다면 저장이 까다롭다는 것을 아셨을 것입니다. 그렇기에 깃허브에 파일을 올리면 호스팅은 될지언정 이를 수정하기 위해서는 또 별도의 환경을 만들어야 합니다. 이 '환경'은 크게 두가지가 있습니다.
! 1. 티들리 위키의 기본 GitHub Saver를 이용하는 방법
이 기능은 가장 쉽습니다. Mozilla Firefox, Google Chrome, Microsoft Edge, Opera, Apple Safari 등 최신 웹브라우저가 돌아가는 그 어떤 장치에서도 사용 가능합니다. (대신 보안에 민감하신 분께는 사용을 권하지 않습니다.
!! 토큰 만들기
# 우선 [[링크|https://github.com/settings/tokens]](혹은 깃허브 로그인 → 우측 상단의 프로필 이미지 → Settings → Developer settings → Personal access tokens) 에 가셔서 Generate New Tokens를 눌러줍니다.
# 암호를 입력하는 창에 내 깃허브 계정 암호를 입력합니다.
# 이제 뭔가 복잡한 화면이 나오는데 여기서 'Notes'에 토큰의 이름을 정해줍니다. 나중에 이 토큰을 왜 만들었는지 기억하는 용도입니다.
# 그 아래 'Expiration'에서 'No Expiration'를 선택합니다. 토큰의 유효기간을 설정하는 부분입니다. 기한을 짧게 설정하면 토큰이 만료된 후 새 토큰을 만들어 줘야 하는 불편함이 있습니다. 따라서 공공장소의 컴퓨터 등 보안상 문제가 있을 수 있는 곳에서 사용하지 않고 오로지 100% 나 혼자 쓰는 내 컴퓨터나 내 스마트패드, 내 스마트폰 등에서만 사용할 목적이라면 기한을 정하지 않는 것도 방법입니다.
# 그리고 그 밑에 'Select scopes'가 있습니다. 이 토큰으로 할 수 있는 일이 무엇인지 권한을 설정해 주는 것인데 다 체크(V)해줘야 됩니다.
# 다 되었으면 맨 밑의 녹색버튼(Generate Token)을 누릅니다.
# 그러면 ghp_로 시작하는 코드번호가 뜹니다. 이 코드번호는 여러분의 주민등록번호, 인감도장, 통장비밀번호와 같은 중요정보이고 여러분의 깃허브 계정의 암호와 같은 역할을 합니다. 따라서 메모장이나 카카오톡 '나에게'에 적어두시면 안됩니다. 가장 간편한 방법은 요즘 대부분의 브라우저에서 지원하는 '암호관리자' 기능을 이용해 해당 암호관리자에 코드번호를 추가하는 것입니다.
!! TiddlyWiki에서 설정하기
# 이제 깃허브 상에 올려진 티들리위키에 웹브라우저를 통해 접속합니다. (예를들자면 저장소이름.github.com/파일이름.html)
# 별도로 건드리신 것이 없다면 우측 패널 영역에 도구 아이콘 3개가 있을 것입니다. 그 중 + 버튼 옆의 톱니바퀴 모양의 설정 버튼을 누릅니다. (혹은 티들리위키 내의 검색창에 $:/ControlPanel를 입력후 엔터를 치세요)
# 설정 화면이 나오면 한글판 티들리위키라면 '저장'을, 영문판이라면 'Saving'을 눌러주세요.
# 여러 탭이 나오는데요 그 중에서 'GitHub Saver'를 눌러줍니다.
# 다음 아래의 이미지를 참고하여서 나의 상황에 맞게 채워줍니다.
[img[A79E55FB-F3DA-48F4-A414-1F96BEDDD0F2.jpeg]]
① 나의 깃허브 사용자 이름 (''로그인시 사용된 이메일주소가 아닙니다. https://github.com/settings/profile에 방문했을때 좌측 상단에 프로필 이미지 옆에 뜨는 이름을 말하는 것입니다.'')
② 위에서 만들어준 토큰의 ghp_로 시작하는 코드번호를 붙여넣기 해줍니다.
③ 저장소의 주소를 입력해 줍니다. (보통 사용자이름/저장소명의 형태를 띕니다. 예컨데 abcdefg/githerb.github.io)
④ Branch(분기)의 종류를 입력합니다. 만일 별도로 설정한 것이 없다면 master 또는 main 입니다.
⑤ 저장소 내에서의 해당 파일의 위치를 입력해 주세요. 만일 최상단(루트)에 위치하고 있다면 /입니다.
⑥ 해당 티들리위키 파일의 이름을 입력해주세요. (예컨데 index.html)
# 모든 칸은 비어있을 수 없고 다 채워져 있어야 합니다. 이렇게 다 제대로 채웠다면 체크표시(V)가 원(O)에 들어가 있는 모양의 아이콘을 눌러줍니다. PC에서는 Ctrl + S 또는 ⌘ + S를 눌러주어도 됩니다.
# 이렇게 저장을 눌렀을때 에러메시지가 뜨거나 '다른이름으로 저장' 창이 뜨는것이 아니라 '위키를 저장했습니다.'라는 연노랑 혹은 살구색의 팝업이 살짝 떴다가 사라진다면 설정이 성공한 것입니다.
> 만일 404에러가 뜨거나 '다른 이름으로 저장'이 뜬다면 설정값을 잘못 입력한 경우입니다. 가장 대표적인 예로는 오타가 있을 수 있고 토큰을 만들때 권한을 제대로 주지 않았을 수 있습니다. 또 ①에 사용자이름이 아니라 로그인 이메일주소를 입력한 경우도 있을 수 있습니다.
!!! 주의사항
> 이 방법은 몇가지 단점이 있습니다. 사용에 참고해주세요.
# 만들어진 티들리위키의 내용이 많아 위키파일의 용량이 크다면 저장시 오래걸릴수 있습니다.
# 위에서 다소 복잡하게 설정해준 내용은 'TiddlyWiki에서 설정하기'를 할때 사용한 브라우저에서만 유효합니다. 예컨데 Mozilla Firefox에서 작업했다면 Google Chrome에서는 또 새로 설정 해주어야 작동합니다. (1브라우저 1설정)
# 하지만 사용하는 브라우저에서 설정을 마쳐도 '쿠키 및 임시데이터 삭제'를 하거나 혹 브라우저가 업데이트되는 과정에서 설정이 초기화 될 수 있습니다. 역시 이때도 다시 설정을 해주어야 합니다.
# 한번 설정을 하면 브라우저의 데이터를 지우지 않는 이상 '로그아웃'하는 기능이 없습니다. 따라서 PC방, 민원실 컴퓨터, 직장 컴퓨터, 친구네 집 컴퓨터 등과 같은 공용컴퓨터에서는 사용하게 되면 그 컴퓨터를 사용하는 제3자도 내 티들리위키를 브라우저 데이터가 지워지지 않는 한 얼마든지 수정할 수 있게 됩니다. ''부득이한 경우 브라우저의 '익명 탐색', '사생활 보호모드' 등을 사용하시기 바랍니다. 하지만 가장 좋은 것은 공용컴퓨터에서는 작업을 하지 않는 것입니다.''
! 2. 깃허브 연동기능을 이용하는 방법
이 방법은 다소 복잡하지만 '토큰' 방식의 문제점인 '토큰'이 노출되었을 경우의 보안문제로 부터 자유롭다는 장점이 있습니다.
!!! PC의 경우 (초기 설정)
1) 깃허브 계정을 만든 후 Windows/Linux/MacOS에서 Github Desktop 프로그램을 설치합니다. (github.com에서 다운로드 가능하며 사이트를 익히는 차원에서 링크는 공유해 드리지 않겠습니다.)<br>
2) [[링크|https://www.google.com/search?newwindow=1&client=firefox-b-d&sxsrf=AOaemvJkHSKqZaSYl0rb9UQvzTlNWUCI6g:1635089382837&q=%EA%B9%83%ED%97%88%EB%B8%8C+%EB%8D%B0%EC%8A%A4%ED%81%AC%ED%83%91&spell=1&sa=X&ved=2ahUKEwjo1NvOruPzAhWXyIsBHYoxB7kQBSgAegQIARA1&biw=1920&bih=919&dpr=1]]에서 여러분이 이해하기 쉬운 방법으로 설명해주는 글을 찾아서 그 글의 설명을 따라서 깃허브 저장소와 연결합니다.<br>
3) 컴퓨터에 연동된 깃허브 저장소 디렉터리에 티들리위키 파일을 옮기거나 복사합니다.<br>
4) 깃허브 데스크탑 프로그램에서 'Commit to Master'를 눌러 동기화를 해줍니다.<br>
5) 깃허브 데스크탑의 메뉴모음 바로 밑 탭처럼 보이는 3개의 영역중 가장 오른쪽에 있는 Fetch Origin 버튼을 눌러 동기화를 해줍니다.<br>
!!! PC의 경우 (초기 설정 이후)
1) 설정해둔 깃허브 저장소 디렉터리에서 티들리위키 파일을 티들리데스크탑 프로그램이나 웹브라우저 등을 통해 열고 티들러를 추가하거나 삭제하거나 편집하거나 그 밖의 작업을 하고 저장을 해줍니다.<br>
2) 깃허브 데스크탑 프로그램에서 'Commit to Master'를 눌러 동기화를 해줍니다.<br>
3) 깃허브 데스크탑의 메뉴모음 바로 밑 탭처럼 보이는 3개의 영역중 가장 오른쪽에 있는 Fetch Origin 버튼을 눌러 동기화를 해줍니다.<br>
4) 이후 티들리위키의 내용을 티들리데스크톱, 플러그인이 설치된 웹브라우저 등을 이용해 수정 한 다음 위 1번과 3번을 반복해 주면 됩니다.<br>
5) 다만 여러 티들러를 만들거나 편집하는 경우 티들리위키에서 저장을 할 때마다 1~3번을 반복하는 것은 비효율적일 수 있습니다. 또 자칫 잘못하면 단시간에 많은 변경을 업로드하는 것으로 인해 깃허브 시스템 제한에 걸려 일시 차단될 수도 있습니다. 어차피 티들리위키에서 저장만 해두면 일단 내 컴퓨터에는 확실히 남아 있는 것이므로 최종 작업 후 한번만 1~3번을 진행해 줍니다. ''여기서 주의 할점은 티들리위키에서만 저장을 하면 웹상에 반영이 안된다''는 점이고 ''티들리위키에서 저장 안하고 깃허브 데스크탑에서만 1~3번을 반복하면 티들리위키의 수정사항이 저장되지 않았으므로 당연히 웹상에 반영이 안된다는 점입니다.''<br>
!!! iOS/iPadOS의 경우
> [[iOS/iPadOS에서 설정법]]
!!! 안드로이드의 경우 (초기 설정)
> [[안드로이드에서 설정법]]
! [[티들리 위키 관련 링크 모음]]
! [[티들리 위키 정보]]
!깃허브, 가장 강력하지만 가장 불편한 플랫폼
[[티들리위키를 깃허브에 발행하고 수정하는 법|깃허브]]에 티들리위키를 올리면 내가 보유한 도메인을 직접 연결할 수 있다는 장점이 있습니다. 하지만 과정이 다소 복잡하고 수정시에 꼭 환경을 갖추어야 한다는 단점이 있지요.
만일 내가 보유한 도메인을 연결하거나 할 필요가 없다면 꼭 불편한 [[티들리위키를 깃허브에 발행하고 수정하는 법|깃허브를 이용한 발행]]을 고수할 필요는 없습니다.
!대안은 없는 가?
물론 있습니다! 과거에는 티들리위키를 웹상에 쉽게 올리고 편집할 수 있게 해주는 사이트로 티들리스팟이라는 사이트가 있었고 그 사이트는 내부 사정으로 잠정 중단되었는데, 티들리스팟 설립자가 새롭게 오픈한 티들리호스트라는 사이트가 있습니다. 이 사이트를 이용하면 간편하게 티들리위키를 발행할 수 있으며 별도의 설치나 설정 없이도 티들리위키를 수정할 수 있습니다. (현재는 무료이나 [[https://github.com/simonbaird/tiddlyhost/wiki/FAQ|FAQ]]에 따르면 고급기능은 유료로 제공하는 부분유료화 될 계획도 있다고는 합니다.)
방법은 간단합니다.
!! 티들리위키 버전 5.1.20 이후의 경우
1. [[https://tiddlyhost.com|티들리호스트]] 사이트에 가셔서 회원가입하고 로그인 한 뒤
2. 'Create Site'를 눌러 정보 입력 후 새로운 사이트를 만든다음
3. 나의 사이트 화면에서 'Action'을 눌러 나오는 메뉴에서 'Upload'를 누르고 내가 만든 티들리위키 파일을 업로드 하면 끝입니다.
4. 업로드한 위키를 수정하고 싶다면 단지 티들리호스트 로그인 상태에서 해당 위키에 들어가서 그냥 수정후 저장해주면 끝입니다. (별도의 플러그인도 프로그램 설치도 필요 없습니다.)
!! 티들리위키 버전이 5.1.20 보다 낮은 경우
1. 위 3번과정 까지 마치고 업로드한 위키의 설정에 가셔서 저장(Saver)의 TiddlySpot Saver탭에 가서 아래의 예시를 참고하여 설정을 완료합니다.
[img[454654.png]]
[img[4546541.png]]
2. 이제 저장이 잘 됩니다. (단. 해당 설정은 설정에 사용한 브라우저에서만 유효합니다. 그리고 해당 설정을 했더라도 Tiddlyhost.com에 로그인이 되어 있어야 합니다.)
!기타
일단 이 방법은 '내가 보유한 도메인 연결'이 안된다는 점이 흠입니다.
또한 깃허브처럼 티들리위키 파일외에 다른 파일을 같이 올릴수 있는 저장소는 제공하지 않습니다. 오직 티들리위키 파일만 올릴 수 있고 이미지 등의 경우 올려진 티들리위키에서 가져오기 방식으로 임베드하는 것만 가능합니다.
하지만 가장 쉽고 간편합니다. 도메인 연결이 필요 없고 여러 기기에서 동기화가 필요하다면 이용해 볼만 합니다. 또 사이트 상태를 'Private'로 설정하면 티들리호스트에 로그인한 나만 볼 수 있으므로 유용합니다.
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a6j4zkutN1G7vLTTr2x8VahPdoIr2KznlhngUw5DWroW3qDtCvXJeEP2G/26/AniTwV8YdM1fwVfeMPD/i3xr4n1O0llv4tMuo/FflbbOCVbZ54PJw/70o+NiZSQOygA/UH9nf8AaK8E/tH+GdS17wnZ6jo99oOoy6RrOj6xALbUNNv4VSRoLiJWkjyYpI5EeOR43jdWRyK+hq+QP2T/AIF/ET4VyeOPiN8Z77T7zxn8R9eGuaomkCT7BaLBY2um2lpbvMqSSrFa2cW6Vo4zJIWOxRgV9f0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAMbqKX+P8KRuopf4/wqeoH//W/vzTrUtRJ1qWgS2CiiigYUUUgI6CgBaKKKACiiigAooooAKKKKAEIBGDURjY+1TUUARIpU8+lS0UUAFFFFABRRRQAVVngjuY/JmRWXIOGGRlTkHHsQCKtUUARKu0n/PFS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUARtkLwM/TimbCMtj0/Sp6KAI0Dj72KkoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKQEHpQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFISByaAFopoZW6GnUAFFFFADG6il/j/CkbqKX+P8KnqB//1/78061LUSdaloEtgooooGFcl/aeuz313babaQPHayLFuknaMkmNJPuiFx/H611tcxpAzqWsf9fa/wDpNBQAfa/Fg62dmO3/AB9P/wDI9OF14tP/AC5Wn/gU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UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAMbqKX+P8KRuopf4/wqeoH/0P784xz9KlqOPvUlBMNgooooKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAY3UUv8f4UjdRS5Abn0qeoH//0f78YOY1Y+lT1Bb/AOqX6VPSWwBRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBjdRUciqxwwBqRuopj/eqeoH//2Q==
/9j/4AAQSkZJRgABAQAASABIAAD/4QBqRXhpZgAATU0AKgAAAAgAAgExAAIAAAARAAAAJodpAAQAAAABAAAAOAAAAABnbm9tZS1zY3JlZW5zaG90AAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAFAKADAAQAAAABAAADAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgDAAUAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/dAAQAUP/aAAwDAQACEQMRAD8A3PHvxI8W6j4y8W6trHinxNHdw+JtZ0m1tdJ1+TSbK3stOaJEColvNljuGSFG7G489eBl+KWuwfe8SeODj08bT/8AyBXEfFDWBZeM/FYZsA+MPFDfi08H+FfO/in4m6TpMbr5ouLj+GJC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7qW3nj0uGRJ4Y0tZpxLu+2TjbvjVDlf4uuafKxXPpCivKPA2s+LPEngm/vYLyBtWTVtWtoZbqIvEsVrqU8MaskTRE7YUCghgcgEk85w/Evib4neFNLTXLq+0PUbePULCyligtbhJM3l3FbEBjcuFZfN3YKnp0o5RnudFYHiq81LTvC+saho8Zlv7azuJbdApctMkbMgCjlssAMDr0r5n1P4h+N7fwddarp3iDULnXY7B5orE+FrwK92Iiyw7/KwAX+XOcd80KNxNn1vRXMauPFtxp9q/hu4srW5IDTG9gkmXBXoojliIOfUn6VwMHifx5pvi/wAL6PrV1pOo6f4jN0BJZW80TqILdplZWeeVWDEAdOhpJDPZaKKKQBRXE/EfxLfeD/A+seJtMjjmutPh8yNJgTGW3ADcFIOOexFeUeMPHPxE8M2fjDS9RurA3eneF7zWLO6sraSIxzRb0Xck0sytgjdyMdiMVSjcD6NorzXWPFV9e+GtN1fwZcR6jbXM6R3V3aIL4ww7G3yRxRE+YwcKpAyVyTtOMVLoeq6vNq1tb211danZyB/tEl3YtaGLCkqVcxxBiWwCu0nBzkY5VgPRaKwTqN5Ld3qRNFFFYlVIcEu+UD5zkBV5wDg5INQeItR1yw0ltU0O0S+ktyssts7eW8kAGZFickKJQOV3/KSNpKg71QHS0V514E8dr8RFk8QeH41Phgr5dtcyblmuZlbEhEZwUjjIKfONzNkgBQrP6LTaA8o0ok3OpZ/5/br/ANHNW3WHpP8Ax9al/wBft1/6OatytGAUV5f8QviH4b0Dw34ht7bxDY2mu2llcmGE3MP2hbgRM0QETHJYtjAI544roPDnjjwn4iS2tdL12xv76SFZGiguYnl6AsTGrbhjvxxVezdri5lsdhRRRUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiuB1v4oeBvDupzaNrOp/Z7y32708mZ8b1DjlEIOQQeDXfU7BcKKKKQBRXCxeMbi51zSbWwsFu9G1lXMOoxTblVkjaQq8ez5SdpA+b9QQO6ptAFFFfJ3xU8R33ib4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+R/xo869/ur+R/xo5Q5DRorO869/ur+R/wAaPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8aPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8AGjzr3+6v5H/GjlDkNGis7zr3+6v5H/Gjzr3+6v5H/GjlDkNGis7zr3+6v5H/ABo869/ur+R/xo5Q5DRorO869/ur+R/xo869/ur+R/xo5Q5DRorO869/ur+R/wAaPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8aPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8AGjzr3+6v5H/GjlDkNGis7zr3+6v5H/Gjzr3+6v5H/GjlDkNGis7zr3+6v5H/ABo869/ur+R/xo5Q5DRorO869/ur+R/xo869/ur+R/xo5Q5DRorO869/ur+R/wAaPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8aPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8AGjzr3+6v5H/GjlDkNGis7zr3+6v5H/Gjzr3+6v5H/GjlDkNGis7zr3+6v5H/ABo869/ur+R/xo5Q5DRorO869/ur+R/xo869/ur+R/xo5Q5DRorO869/ur+R/wAaPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8aPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8AGjzr3+6v5H/GjlDkNGis7zr3+6v5H/Gjzr3+6v5H/GjlDkNGis7zr3+6v5H/ABo869/ur+R/xo5Q5DRorO869/ur+R/xo869/ur+R/xo5Q5DRorO869/ur+R/wAaPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8aPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8AGjzr3+6v5H/GjlDkNGis7zr3+6v5H/Gjzr3+6v5H/GjlDkNGis7zr3+6v5H/ABo869/ur+R/xo5Q5DRorO869/ur+R/xo869/ur+R/xo5Q5DRorO869/ur+R/wAaPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8aPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8AGjzr3+6v5H/GjlDkNGis7zr3+6v5H/Gjzr3+6v5H/GjlDkNGis7zr3+6v5H/ABo869/ur+R/xo5Q5DRorO869/ur+R/xo869/ur+R/xo5Q5DRorO869/ur+R/wAaPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8aPOvf7q/kf8aOUOQ0aKzvOvf7q/kf8A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lH/CxtJ/587r8ov/AI5Xxto/iNYkstMsr291eVNXe2gW+Fzp80IeyluI4rnzYg8y8cFkPDKx3MnzY2mfGa5s/D+kf24llJqcmlQajdGa+jtfMSbcEEKvGA8z7GJjAVV4G/kEgH3F/wALG0n/AJ87r8ov/jlH/CxtJ/587r8ov/jlfI2q/Fa307ULONLWB7G7NltZ71EvHS9KBXitArMyJvG4uydDgHHO/wDEOPXZtMso9DE8q/aka7htJlt7ua1CPuWCRmXDBtjHDKSoIBBNAH01/wALG0n/AJ87r8ov/jlH/CxtJ/587r8ov/jlfHWk+LodF0jVp7K4uLr7LcQIbPWpjaS2AlXH7+5uC7NE2CysA55IXd2vaN8V7K+RJ9StUtLXy9QL3EU/nw+Zp5VnVG2JvV4mMitgZCsNvGaAPrf/AIWNpP8Az53X5Rf/AByj/hY2k/8APndflF/8cr4yf41WltN5WpWdtZvai1F7BJfot3HLcokhWGAoDMIlkG85TJBChiK9D8OeI77X77VIzp621nptzNaCYzbnlkhbBIQIMLg9S2c5GCOaAPrLRNbtNetHu7RHjVHMbLIAGDAA9iR0I71sV5/8Of8AkE3n/X03/oqOvQKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACv54f23v+TsPHP10z/022tf0PV/PD+29/wAnYeOfrpn/AKbbWvMzb+F8zw+IP4C9f0Z8w0UUV82z4cKKKKQEmlf8jj4a/wCv+D/0ale6fH7/AJE6z/6/4/8A0VLXhelf8jj4a/6/4P8A0ale6fH7/kTrP/r/AI//AEVLXq4b+Ee3g/4LP//V+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9BP7DH/JrPgr66n/6crmvWyj+I/T9T6Hhz+NL0/VH1pRRRX0R9mFFFFAHn/xG/wCQTZ/9fS/+ipK+f9f8MWevyWl21xPY31gXNvdWrBJoxIAHX5ldGVsDKsrA4BxkA19Ua1olprtvHbXbuixSCQGMgHIU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tkpWKGPJA3MXYksSzMzMWZmJZmJYkkk0AfCVpoGuaVqun6vr/hLVNU0fwl498Vahf2SadNOzxatNdPp2oW0Owi8SISjPk73j8zO3cpA+g/gFo1/aXPj3xKui3HhvQvE+u/btL066h+zTJEtnbwTTvbnBh+0TxSSbGAbncwBY19D0UAfGFnHqXwybxz8NvFnh3xJd6J4l1u/1nTNX8MxXMkjR6nL9qkgeWyYXFtNFMXTexVGQr8+Mgcj8NfCvxPt/Ffg6TxZpeura6d461m5txq13Pq09npM/hyVLYzXbyTAKZZNh/eFBMzIrE9fv2igD85fDvw11HxZD8IvCPibQNbs7Xw94g8VpqrRrf6YYfNjupreVbu3MLeTL5kYSWOTy5CTHknctdV4n+Bb6F8TPEtl4B03Vbi11v4ca7p6z3t/f6jCb+4uIBDALi+mmEbuASEDLkAtjgmvvCigD85/EGreJPiHb+F9K0fwV4itD4e8FeIrK+kvtKubVEv7nToYoraMyIPNdmjbDR7kbKhWYnA3/AIcaDJrN/wDBTSvDnw+1LwfqPgKMya1eXmntZRRQf2bLbS2iTsAt0bi5kjkJjLj5C77W4r75ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACv54f23v+TsPHP10z/022tf0PV/PD+29/wAnYeOfrpn/AKbbWvMzb+F8zw+IP4C9f0Z8w0UUV82z4cKKKKQEmlf8jj4a/wCv+D/0ale6fH7/AJE6z/6/4/8A0VLXhelf8jj4a/6/4P8A0ale6fH7/kTrP/r/AI//AEVLXq4b+Ee3g/4LP//Q+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9BP7DH/JrPgr66n/6crmvWyj+I/T9T6Hhz+NL0/VH1pRRRX0R9mFFFFABRVe5uobRUabd+8baoVWck4J6KCegNVv7Utv7k/8A4Dzf/EUAaNFZ39qW39yf/wAB5v8A4ij+1Lb+5P8A+A83/wARQBo0Vnf2pbf3J/8AwHm/+Io/tS2/uT/+A83/AMRQBo0Vnf2pbf3J/wDwHm/+Io/tS2/uT/8AgPN/8RQBo0Vnf2pbf3J//Aeb/wCIo/tS2/uT/wDgPN/8RQBo0Vnf2pbf3J//AAHm/wDiKP7Utv7k/wD4Dzf/ABFAGjRWd/alt/cn/wDAeb/4ij+1Lb+5P/4Dzf8AxFAGjRWd/alt/cn/APAeb/4ij+1Lb+5P/wCA83/xFAGjRWd/alt/cn/8B5v/AIij+1Lb+5P/AOA83/xFAGjRWd/alt/cn/8AAeb/AOIo/tS2/uT/APgPN/8AEUAaNFZ39qW39yf/AMB5v/iKP7Utv7k//gPN/wDEUAaNFZ39qW39yf8A8B5v/iKP7Utv7k//AIDzf/EUAaNFZ39qW39yf/wHm/8AiKP7Utv7k/8A4Dzf/EUAaNFZ39qW39yf/wAB5v8A4ij+1Lb+5P8A+A83/wARQBo0Vnf2pbf3J/8AwHm/+Io/tS2/uT/+A83/AMRQBo0Vnf2pbf3J/wDwHm/+Io/tS2/uT/8AgPN/8RQBo0Vnf2pbf3J//Aeb/wCIo/tS2/uT/wDgPN/8RQBo0Vnf2pbf3J//AAHm/wDiKP7Utv7k/wD4Dzf/ABFAGjRWd/alt/cn/wDAeb/4ij+1Lb+5P/4Dzf8AxFAGjRWd/alt/cn/APAeb/4ij+1Lb+5P/wCA83/xFAGjRWd/alt/cn/8B5v/AIij+1Lb+5P/AOA83/xFAGjRWd/alt/cn/8AAeb/AOIo/tS2/uT/APgPN/8AEUAaNFZ39qW39yf/AMB5v/iKP7Utv7k//gPN/wDEUAaNFZ39qW39yf8A8B5v/iKP7Utv7k//AIDzf/EUAaNFZ39qW39yf/wHm/8AiKP7Utv7k/8A4Dzf/EUAaNFZ39qW39yf/wAB5v8A4ij+1Lb+5P8A+A83/wARQBo0Vnf2pbf3J/8AwHm/+Io/tS2/uT/+A83/AMRQBo0Vnf2pbf3J/wDwHm/+Io/tS2/uT/8AgPN/8RQBo0Vnf2pbf3J//Aeb/wCIo/tS2/uT/wDgPN/8RQBo0Vnf2pbf3J//AAHm/wDiKP7Utv7k/wD4Dzf/ABFAGjRWd/alt/cn/wDAeb/4ij+1Lb+5P/4Dzf8AxFAGjRWd/alt/cn/APAeb/4ij+1Lb+5P/wCA83/xFAGjRWd/alt/cn/8B5v/AIij+1Lb+5P/AOA83/xFAGjRWd/alt/cn/8AAeb/AOIo/tS2/uT/APgPN/8AEUAaNFZ39qW39yf/AMB5v/iKP7Utv7k//gPN/wDEUAaNFZ39qW39yf8A8B5v/iKP7Utv7k//AIDzf/EUAaNFZ39qW39yf/wHm/8AiKP7Utv7k/8A4Dzf/EUAaNFZ39qW39yf/wAB5v8A4ij+1Lb+5P8A+A83/wARQBo0Vnf2pbf3J/8AwHm/+Io/tS2/uT/+A83/AMRQBo0Vnf2pbf3J/wDwHm/+Io/tS2/uT/8AgPN/8RQBo0Vnf2pbf3J//Aeb/wCIo/tS2/uT/wDgPN/8RQBo0Vnf2pbf3J//AAHm/wDiKP7Utv7k/wD4Dzf/ABFAGjRWd/alt/cn/wDAeb/4ij+1Lb+5P/4Dzf8AxFAGjRWd/alt/cn/APAeb/4ij+1Lb+5P/wCA83/xFAGjRWd/alt/cn/8B5v/AIij+1Lb+5P/AOA83/xFAGjRWd/alt/cn/8AAeb/AOIo/tS2/uT/APgPN/8AEUAaNFZ39qW39yf/AMB5v/iKP7Utv7k//gPN/wDEUAaNFZ39qW39yf8A8B5v/iKP7Utv7k//AIDzf/EUAaNFZ39qW39yf/wHm/8AiKP7Utv7k/8A4Dzf/EUAaNFZjavZxjc4mUEgZMEo5JwB93ueKd/alt/cn/8AAeb/AOIoA0aKzv7Utv7k/wD4Dzf/ABFH9qW39yf/AMB5v/iKANGis7+1Lb+5P/4Dzf8AxFH9qW39yf8A8B5v/iKANGis7+1Lb+5P/wCA83/xFH9qW39yf/wHm/8AiKANGis7+1Lb+5P/AOA83/xFH9qW39yf/wAB5v8A4igDRorO/tS2/uT/APgPN/8AEUf2pbf3J/8AwHm/+IoA0aKzv7Utv7k//gPN/wDEUf2pbf3J/wDwHm/+IoA0aKzv7Utv7k//AIDzf/EUf2pbf3J//Aeb/wCIoA0aKzv7Utv7k/8A4Dzf/EUf2pbf3J//AAHm/wDiKANGis7+1Lb+5P8A+A83/wARR/alt/cn/wDAeb/4igDRorO/tS2/uT/+A83/AMRR/alt/cn/APAeb/4igDRorO/tS2/uT/8AgPN/8RR/alt/cn/8B5v/AIigDRorO/tS2/uT/wDgPN/8RR/alt/cn/8AAeb/AOIoA0aKzv7Utv7k/wD4Dzf/ABFH9qW39yf/AMB5v/iKANGis7+1Lb+5P/4Dzf8AxFH9qW39yf8A8B5v/iKANGis7+1Lb+5P/wCA83/xFH9qW39yf/wHm/8AiKANGis7+1Lb+5P/AOA83/xFH9qW39yf/wAB5v8A4igDRorO/tS2/uT/APgPN/8AEUf2pbf3J/8AwHm/+IoA0aKzv7Utv7k//gPN/wDEUf2pbf3J/wDwHm/+IoA0aKzv7Utv7k//AIDzf/EUf2pablVhKm9lUFoZVGWOByVAGSaANGiiigAooooAK/nh/be/5Ow8c/XTP/Tba1/Q9X88P7b3/J2Hjn66Z/6bbWvMzb+F8zw+IP4C9f0Z8w0UUV82z4cKKKKQEmlf8jj4a/6/4P8A0ale6fH7/kTrP/r/AI//AEVLXhelf8jj4a/6/wCD/wBGpXunx+/5E6z/AOv+P/0VLXq4b+Ee3g/4LP/R+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9BP7DH/JrPgr66n/6crmvWyj+I/T9T6Hhz+NL0/VH1pRRRX0R9mFFFFAGde/8fOn/APXdv/RMlJ/bOkf2ufD/ANug/tQQfavsnmr9o+zltnm+Vnf5e/5d2MZ4zmlvf+PnT/8Aru3/AKJkrwHcE/a6w52mXwMNmf4tmpndj127lz6ZHrQB77a6zpF9qF7pFlfQXF9pvl/areOVXlt/OXfH5qAlk3ryu4DI5HFaVfB/iDWfHek/EX413Xw0ZTq02peE7QlPs7XIiNoDci0junjgkulhJaOORsE44PANa8+NfxG03wnB4a0bVdR8QeJ7/wAU2+iMbnSbTTtb0+2uLKS9CyW909rYSzuIWEMoKwsrg4d12sAffNFfBtz8TPjzpHhfWdJvppbDVbPxH4YsNPvdXTSJL54NYvYoZ4r210u4ngUKG+Vx5LOjjaAyl66/UP8AhdGo/EXxV4C0j4j3Gn2nhbw5peoC6Om6fLc3F9eS34JcNB5YhYQKHRUDfKuxkO8uAfYdFfBd38XviT438N+E77wx4hvbHVrzwfpuu3thoOkW15Kt3qEZdXuZ9QzbQ2zFGEcYdZThyW2gGrugePPjD8V7rwpHo/i7/hEk1X4faf4lufslha3BbUbhiDt+1Ry7YTn5l5OAArKckgH3PRXwh4N+K/xcsrL4aePvFGuprtn4+8O6hqdzo8VlDbw281rYLfQ/ZZFBnywyjiWRwScqFGFEvwp+Jfx61fWPAWveIre/uNI8bKr3cd+ugWmnxRz2r3KSaU1rfSX8pQqP3cySM8W5z5bLigD7qooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAM7VP+PZP+u9v/AOjkrybxZ4s+Iv8AwsWPwL4Fj0r/AJBQ1J31IT/892hKqYW/3SAV9eegr1nVP+PZP+u9v/6OSvIppPK/aFeXG7Z4TLYHU4vs0AYfinxX8ZPA/h+98V+MdV8GaLo2mxmW5u7uW8hgiQd2dyAMngdyeBzXysv7fWj4W7k8SaJDpTv5a6pLoXiWPTCw6/6Y1oIcf7RbbjnOK9D8KaBpv7UHx/8AGfjPx9bpqfgv4P6u3hzw/pE6l7STWreKKa/1OeJvklliaRYLfcCsYV2ADtkM8JeJfjfpn7cdz8MviF4xg1zwxq/gnUNctdKtLCO0tLMpq0FrAu5mkmmkEJPmO8m0sxCoqgUAe6aJrnxw8TaRaeIPDl/4N1TTNQjWa2urWW8mgmjcZV45EJVlPYg4rV/4yK/6lX/yer57ttDsP2X/ANpXwtoPgeBdP+HfxqkvbWfSYgUtNL8Q2UD3cdzaIPkiS9hV45YkVV8xFcdxX3dQB4r/AMZFf9Sr/wCT1H/GRX/Uq/8Ak9XtVFAHiv8AxkV/1Kv/AJPUf8ZFf9Sr/wCT1e1UUAeK/wDGRX/Uq/8Ak9R/xkV/1Kv/AJPV7VRQB4r/AMZFf9Sr/wCT1H/GRX/Uq/8Ak9XtVFAHiv8AxkV/1Kv/AJPUf8ZFf9Sr/wCT1e1UUAeK/wDGRX/Uq/8Ak9R/xkV/1Kv/AJPV7VRQB4r/AMZFf9Sr/wCT1H/GRX/Uq/8Ak9XtVFAHiv8AxkV/1Kv/AJPUf8ZFf9Sr/wCT1e1UUAeK/wDGRX/Uq/8Ak9R/xkV/1Kv/AJPV7VRQB4r/AMZFf9Sr/wCT1H/GRX/Uq/8Ak9XtVFAHiv8AxkV/1Kv/AJPUf8ZFf9Sr/wCT1e1UUAeK/wDGRX/Uq/8Ak9R/xkV/1Kv/AJPV7VRQB4r/AMZFf9Sr/wCT1H/GRX/Uq/8Ak9XtVFAHiv8AxkV/1Kv/AJPUf8ZFf9Sr/wCT1e1UUAeK/wDGRX/Uq/8Ak9R/xkV/1Kv/AJPV7VRQB4r/AMZFf9Sr/wCT1H/GRX/Uq/8Ak9XtVFAHiv8AxkV/1Kv/AJPV3mnXmo3/AIasbvVzEbx5YPNMCskW4TqPlVmZgOO5NddXH6X/AMizZ/8AXeL/ANKRQB2FFFFABRRRQAV/PD+29/ydh45+umf+m21r+h6v54f23v8Ak7Dxz9dM/wDTba15mbfwvmeHxB/AXr+jPmGiiivm2fDhRRRSAk0r/kcfDX/X/B/6NSvdPj9/yJ1n/wBf8f8A6KlrwvSv+Rx8Nf8AX/B/6NSvdPj9/wAidZ/9f8f/AKKlr1cN/CPbwf8ABZ//0vj+iiivhz8rCiiigBD0Nf0E/sMf8ms+Cvrqf/pyua/n2PQ1/QT+wx/yaz4K+up/+nK5r1so/iP0/U+h4c/jS9P1R9aUUUV9EfZhRRRQBnXv/Hzp/wD13b/0TJXIeOfhb4F+JH2GTxfppubjTC5tbmGeezurfzQA4iuLaSKZA4A3BXAbAyDgV1epzQ28tjLO6xos5yzEADMUg6mpP7X0n/n9g/7+L/jQB5unwM+FMXg2bwDH4fiTRri5F9IglmE7XisGFybrf9o88FRiXzN4wBuxTIPgT8KYPC9/4POhCfTtTuEvLlri4uLi6luYtvlztdyyPc+bHtXY/mbkwNpFel/2vpP/AD+wf9/F/wAaP7X0n/n9g/7+L/jQB55pfwU+GWj6IPD1hoxFodStdYdpLm4muJtQspY5oJ5riSRppWR4kx5jsCFCkFeK6+Pwh4di1/VfFCWmNT1y0trG8m8yT97b2hmaFNu7au0zy8qATu5JwuNT+19J/wCf2D/v4v8AjR/a+k/8/sH/AH8X/GgDyeX9nn4PyrpMbaCVj0bTrfSIY0u7tI5dPtBiG2ukWYLdxoCcLcCQcnPU56Dwl8Ivh94G+y/8IxpjWv2LTv7Jh33NxP5dh5zTiBfOkfCK7nZ3VcIpCKqjuP7X0n/n9g/7+L/jR/a+k/8AP7B/38X/ABoA5PS/hj4H0WHwpb6Zpvkx+CLdrTRx50zfZYHhFuy/M58zMQC5k3HvnPNYPhX4FfCnwV4gj8T+GdBWzv7cTLbZnnlgtBcHMotLeSRobYPkhhCiZHHTivSv7X0n/n9g/wC/i/40f2vpP/P7B/38X/GgDRorO/tfSf8An9g/7+L/AI0f2vpP/P7B/wB/F/xoA0aKzv7X0n/n9g/7+L/jR/a+k/8AP7B/38X/ABoA0aKzv7X0n/n9g/7+L/jR/a+k/wDP7B/38X/GgDRorO/tfSf+f2D/AL+L/jR/a+k/8/sH/fxf8aANGis7+19J/wCf2D/v4v8AjR/a+k/8/sH/AH8X/GgDRorO/tfSf+f2D/v4v+NH9r6T/wA/sH/fxf8AGgDRorO/tfSf+f2D/v4v+NH9r6T/AM/sH/fxf8aANGis7+19J/5/YP8Av4v+NH9r6T/z+wf9/F/xoA0aKzv7X0n/AJ/YP+/i/wCNH9r6T/z+wf8Afxf8aANGis7+19J/5/YP+/i/40f2vpP/AD+wf9/F/wAaANGis7+19J/5/YP+/i/40f2vpP8Az+wf9/F/xoA0aKzv7X0n/n9g/wC/i/40f2vpP/P7B/38X/GgDRorO/tfSf8An9g/7+L/AI0f2vpP/P7B/wB/F/xoA0aKzv7X0n/n9g/7+L/jR/a+k/8AP7B/38X/ABoA0aKzv7X0n/n9g/7+L/jR/a+k/wDP7B/38X/GgDRorO/tfSf+f2D/AL+L/jR/a+k/8/sH/fxf8aANGis7+19J/wCf2D/v4v8AjR/a+k/8/sH/AH8X/GgDRorO/tfSf+f2D/v4v+NH9r6T/wA/sH/fxf8AGgDRorO/tfSf+f2D/v4v+NH9r6T/AM/sH/fxf8aANGis7+19J/5/YP8Av4v+NH9r6T/z+wf9/F/xoA0aKzv7X0n/AJ/YP+/i/wCNH9r6T/z+wf8Afxf8aANGis7+19J/5/YP+/i/40f2vpP/AD+wf9/F/wAaANGis7+19J/5/YP+/i/40f2vpP8Az+wf9/F/xoA0aKzv7X0n/n9g/wC/i/40f2vpP/P7B/38X/GgDRorO/tfSf8An9g/7+L/AI0f2vpP/P7B/wB/F/xoA0aKzv7X0n/n9g/7+L/jR/a+k/8AP7B/38X/ABoA0aKzv7X0n/n9g/7+L/jR/a+k/wDP7B/38X/GgDRorO/tfSf+f2D/AL+L/jR/a+k/8/sH/fxf8aANGis7+19J/wCf2D/v4v8AjR/a+k/8/sH/AH8X/GgDRorO/tfSf+f2D/v4v+NH9r6T/wA/sH/fxf8AGgDRorO/tfSf+f2D/v4v+NH9r6T/AM/sH/fxf8aANGis7+19J/5/YP8Av4v+NH9r6T/z+wf9/F/xoA0aKzv7X0n/AJ/YP+/i/wCNH9r6T/z+wf8Afxf8aANGis7+19J/5/YP+/i/40f2vpP/AD+wf9/F/wAaANGis7+19J/5/YP+/i/40f2vpP8Az+wf9/F/xoA0aKzv7X0n/n9g/wC/i/40f2vpP/P7B/38X/GgDRorO/tfSf8An9g/7+L/AI0f2vpP/P7B/wB/F/xoA0aKzv7X0n/n9g/7+L/jR/a+k/8AP7B/38X/ABoA0aKzv7X0n/n9g/7+L/jR/a+k/wDP7B/38X/GgDRorO/tfSf+f2D/AL+L/jR/a+k/8/sH/fxf8aANGis7+19J/wCf2D/v4v8AjR/a+k/8/sH/AH8X/GgDRorO/tfSf+f2D/v4v+NH9r6T/wA/sH/fxf8AGgDRorO/tfSf+f2D/v4v+NH9r6T/AM/sH/fxf8aANGis7+19J/5/YP8Av4v+NH9r6T/z+wf9/F/xoANU/wCPZP8Arvb/APo5K8mP/JxX/cq/+31elajqmmPboqXkLETQHAkU8CVST17DmsS80fwrd+Iz4q/tEQaibRbLzIrhF/cLI0m3v1Zsn1wPSgD5Y+DWp2/wS/aE+JHwS8YTCzi+I2s3PjTwrczMFivhexwpqVlGTgefbXCeZ5YyzRyBwMZxsXvh/XW/4KCaT4pXTrk6MnwyvbNr0Qv9mFy2s28iwmbGwSFAWCZ3FQTjFes/Er4SfCn4veHG8K/EWUazYb1mi8y5US286fcmt5VxJDKv8MkbKw9eteGN+yRo0sX9nXfx9+JFxpGTmxfxPGFZTwY2uFt1u2THGDPn3oAXxhqlv8dP2r/A3hDwhMt9oXwUmutc8R3cbBoE1W7tZbPT9PVhnNwgklmlX+BAASGbFfcdeNfD/wCGXww+Ffhi28G/DuSPQNGtMlLe1nRFLt96RzyzyN1Z3JZjySTXa+RpP/Qfm/8AApaAOworj/I0n/oPzf8AgUtHkaT/ANB+b/wKWgDsKK4/yNJ/6D83/gUtHkaT/wBB+b/wKWgDsKK4/wAjSf8AoPzf+BS0eRpP/Qfm/wDApaAOworj/I0n/oPzf+BS0eRpP/Qfm/8AApaAOworj/I0n/oPzf8AgUtHkaT/ANB+b/wKWgDsKK4/yNJ/6D83/gUtHkaT/wBB+b/wKWgDsKK4/wAjSf8AoPzf+BS0eRpP/Qfm/wDApaAOworj/I0n/oPzf+BS0eRpP/Qfm/8AApaAOworj/I0n/oPzf8AgUtHkaT/ANB+b/wKWgDsKK4/yNJ/6D83/gUtHkaT/wBB+b/wKWgDsKK4/wAjSf8AoPzf+BS0eRpP/Qfm/wDApaAOworj/I0n/oPzf+BS0eRpP/Qfm/8AApaAOworj/I0n/oPzf8AgUtHkaT/ANB+b/wKWgDsKK4/yNJ/6D83/gUtHkaT/wBB+b/wKWgDsKK4/wAjSf8AoPzf+BS0eRpP/Qfm/wDApaAOworj/I0n/oPzf+BS0eRpP/Qfm/8AApaAOwrj9L/5Fmz/AOu8X/pSKPI0n/oPzf8AgUtT+bpNtp9vp1jdxzbZ4do8xWc5mVj0/wAKAOpooooAKKKKACv54f23v+TsPHP10z/022tf0PV/PD+29/ydh45+umf+m21rzM2/hfM8PiD+AvX9GfMNFFFfNs+HCiiikBJpX/I4+Gv+v+D/ANGpXunx+/5E6z/6/wCP/wBFS14TpjrH4u8OSOQqrfQEk8AASpya90+PzqPCNlGSNxvkIHcgRSZP4ZFerhv4R7eD/gs//9P4/ooor4c/KwooooAQ9DX9BP7DH/JrPgr66n/6crmv59j0Nf0E/sMf8ms+Cvrqf/pyua9bKP4j9P1PoeHP40vT9UfWlFFFfRH2YUUUUAZ17/x86f8A9d2/9EyVo1nXv/Hzp/8A13b/ANEyV8N/G/RvCut/tNaXb+LPhxcfEq3TwhI0dlbwWU7QP/aAHnEXs9ugGCVyrFuemMmgD71or4H8I3nxB+CHgWe2jttM8DWXibxHcSaRpuvXUmotpGmm2QiGK3tJS9xLJNG8gghm2xK5Jbgiugg/aL+It/8AC638S2Wk2q6hD4ju9C1HUhp2oz2Nnb2okYX76emL1UkxGmxmGxny7hRyAfbFFfGOp/H34gx+AvDOv6Y+hXS6nf31rqHiCxgvtW0eyitd3kvJa2rC4iec4VlkkCwsCHc8ZqXv7SnjLSNCj1O8j0LUn1fwte3+jzaZNJc2d3rdlerZ+QJd4JilNxbN5eBJGfMUuxGQAfbNFfDMH7VHi5/DkGtDRrK5udN8OQ3Gr26GSML4gvdTGkW1qkhdvKg+0w3JferuEVcHg56Dxv8AGr4tfCmw8Vad42t9E1HWLLwrqHiXSrmwhuYrVm014457a4glmeQ4aeIq6yrvG75UIoA+xqK+Yrnx38b7zxjY/DbR4tAtNek019dvbi5iupbW1s5JvItrSNEmR5py6yeZMWjQBciLkLVr9lO41O7+Ft7d61bpZ6hN4l8TPcwROZY4pm1i6MiK5CllVsgNgZHOBQB9J0V8z/GaFvGHxQ+Hfwk1e6mtvDOvQ6vqOoRQTPbtqDaYluIbNpI2V/KJnaWRARvEYByu4Vzup+C/DfwP+K/w5b4XW/8AYlh4wv7vSdU0i3kcWlxCljPeJdrAzFElt3gAaRACySMrZ4wAfXVFfk78O/jJ4Iuf2iNJ+NNr4tsbq8+Iuv6l4YuNMS7je4g0kKkOjSNbBspuntC7NjpdD8ftT9nL/V/Ewf8AU865/wChR0AfR1Ffldq/wz+HviL9gu68da74dsb/AMQ6ToGprZ6hNAj3MCx3ly6COQjcoDOzDB6knvXtPxP8D+Efg34r+EN18JvAkInuPEdzJJp+kJa2ct240a+QHdO8MOUVi2XccAgZJAIB90UV8baT4o8T+Jv2qvCkniXwbf8AhBrfwproiS+uLG4M4a80/JQ2VxcAbcDO8qTkYzzjV+J3jDxd4K+PVjrzatEvhTR/BPiDV7zThbzO8yafPZNIQwuUj847l8qQxHYvmKQ3mBkAPrSivlTSfib8WLLUPCFt8SrPR/7N+ItvcpaLpgnWfTrpLKS+SGd5XdbhWhikUyIkWHA+Ug5HhPwJ/aRm0v4I2k1jYKuh/DDwNp95ew3UU0d/qlx9mKR/YtxVFtUkheN5ysgd8hVCqHYA/SGivjfwp8ePifPqVzY+ItEN5BLpV9fJdw+Hdd0i30+6tIvNWC5k1SKNJ0l5CyRtG2VwYxuBGp8PPi18X9R1b4aT+PbTRBpPxMsJbiGHT0uEubCaOzF6gkklldJldAwIVEKNgbnA3EA+tKKpalf2+laddapd58izieaTaMnZGpZsDucCvlnwt8Y/ipJB8PvGvjLT9Ij8KfEm4t4LW2svP/tDTv7Qt3ubJppncxXG5UCShI4tjNld4BoA+s6K8L+BXjf4gfEjw5J4y8WRadZ6fcT3dtaW9nHL5x+x3c1u0srySMoDiMbUUEj7xf5tieQah8a/jhBpXxG+INnp2gyeFfhxqupW01o63I1C+stMxJPJHMJfKhkWI4UNG4d1P3ARQB9p0V8R+Lv2l/G58S+J7b4faMb6w8KSxwC3Og63qU2qzm2iunjiu9Phe2sztmVE83zG3fM6qhUnt7X4ufFTXPE3jZPD3h+2fSvB2nWt+lhNFMmq3017phuorFRvCQyifCs7KcAhAm7LgA+paK+H/D/7Tfim08LeKvEPimTQ9ZutE0qK+TTLGO80rUoLyaUQra3Vpfl5RH5jov2kBVBz+76V2ur/ABV+LXw8vL/QviJBol7fXfhvV9c0u40yK5igS40dI2mtbiKaV3df38ZWVXTcAwKKcUAfVdFfKHhT4s/FyHXPByeP7TQ207xzo15qVtFY+fBNYTWkEVwIp555HjlRkkILqkexh0YcnjfCH7QPjLxL4n07wnr8+h6tY+KdJ1O4STRbe+WOxmtIVkEf22ctb3qsrMN8Ij5AbbtIoA+4aK8F+BeoPpP7MHw/1SNY2az8H6VMBNKIIiY9PjYB5WyEXjljwo5PSvHvBn7THiT/AISWOz8Zz6RrOlXWganrfn6HaX0SWraWsMkkK3N0zQ3oZJTiSEpgqCygMpoA+26K+T4vi38Y/C/geT4ueP8ARNJufCb6Fc628GmSSx3mnmOAXEFvK87slyZQfLMkaRhH52lea0tS+JPxn+GvhbXfHXxT0bSdR0XTdDuNVB0Z5YZbe7gCstjKJ3kMwkDHFwgQAqd0YyKAPp6ivjPwz8efi1NfXlnqPhSfxDJJpF/fWy2Ph/XNGSC9s4vNjspZtVhWOb7QcpHKmw7hgxfMCK3hH9oL4lar4c8WXot9G8U69o+i/wBpW+jabBfadqsV3na1tcWF5vndASMTIF3EFRHuK0AfatFfO/wM+Kev/EG81vT9e1fQtXbTktpEOlRXdhdQmbfviu9PvmeeEqVGyQkB8kbVKkV5X4u+I/xF+Hvxh+JmqRXtrrFhBpvhO10zSZIp4lF7rN7d2VsTN9odIwJSWuHWHMiBAAhjzIAfblFfBHx38dePrL4dfEn4Z/E9dMuLxvC0mtWd9pMc8ELQRzrBPDLDPJMyvGzIVcOQ6sflUrg9VN+0/rFx4K8VfEbStLj/ALOs9XtPD+k6ZNa3f9qfbbmaOIXF9DGrypG4mWWO3igaZowMEvIEQA+zaK+HLz9o34p6L4T8XX114fXUr3RLaxurC/k0PWNCsLlrm8S2ktJItTVZBMgcMrxyOpDZKjaVPtXgXxp8S0+J+pfDT4kLpNzIukW+sWl1pMU8Cqsk8kEkEqTyylirKCsilQwJyimgD3mivANXv7rWfjrPZrA97F4C8OJqlvaKwXztQ1eW5t0bnjekNpJGhPAE7+vHj3gv9pvxX/ZWveIPiCdGH9i+HrzXLrRLeG903W7CWzQSPayQXxJuUxuQ3EaogcD5SrA0AfcFFfE3hn9pLx9a3H9oeNvD815or6Vf6lPJZeHtc0waY1jbNdeVNc6nCkFwsqo0aSIYj5m0eWQ2RqfCv49fEnxZ4r8OWPiDQJJ9L8TxSO7Wvh/XLBdHYQGePz72/hW2uo22+V5kflfOylVZSSAD7For5S+NFqPHvxo+H3wW8SXEsHhDWNO1nWL62imeD+1Z9Na1jhs5HjZXMKC5aaSPOJNqhsqCD5roEPw/+FHxkl8H+EfBHiDwNba9pus20dm/2L/hG9WOmqJftccMV7LPE4ThXEMRdJMSAEDb9vguD41sNGp7V+0lB1FFRVuWLkneTmnf3JO0YSSVrta8vNLEWla2l7H3vRX5j+C9e8ea1Hp7w3+n6Z4SvPgrp+orodra3Iht/OtnUJA0l46qUk6SNGzeSFiOWHmnkvHXxE+IVz+wPb+Hrn4WazaaV/wh2kwf2w99o7WvlLBAFuPKS+a52OACF8neARlQcgfQ0/CurLEU6CxEfenCDu4xtz36SlHmkrfDFu/RmTxqs3boz9ZaK+XvE3xs8VaN4b/aC1i2tbJpvhRFM+lh0kKzGPQbfVB9qAkBf99MynyzH8gA+9lj5PoeqfG28+NXxfvPhZDoSOlv4evJ/wC11uHFzO+mArbQiCSPyRwczOZMZUCNvmI+dwPA+Iq0qlWrUjBRipJt6Pm9lZN9NKsXs9dO7W0sSk0kr/0/8j75or5U+IXj20+KX7E/i34j2Ns1nB4l8BanqCwOdzQ/aNMlcxlsDO0kjOOcZrix8cviX8JLewk+Ken6Vd6JceC9X8SW0GlLOl5anQIbWSS1mlmdo5zIlwAsqRxAMpym3mpwfA2Lrwkqdvaqc4cj0bcEm7a2bSvfZabttIJYmKeu3c+36K/PvTvj58UfFdhf+HvFfh+S403xFoGqytcWnhvX9Ji0iaKzeZY7m61WBILlJAGRZY/KPmbQIyHyE+EfxB+Puv2Gm/Dj4Xw+HLaw8I+DPCt79o1eK7lkuJtRsWK24EE0YQEwkmXB2DA8t88ejW8NcZSpTqVpxjyWbu7Llb5b3evxaW5dd17tm4WLi2rH6C0V86n433er/staj+0BoGnx2uoQ+GL7WorK6Jmiju7S2kkMMhQoXjWWMqSpUsvI2k8cn4W+LXxk0nxL4EtfivY6EdM+JEFybJdK+0RzabdwWb6gsFzJcSOlwjQRSAzIsQDqPkKnNeJT4OxsoVZOydNzi4tq96a5ppdHyxTe/Sy1aT1eIjp5/qfW1FfBPgf9qfxhd+O/DeleLLjQNV0XxNb6nM50G3v5F019PtXvAn9pSlrS+3JGykwrGd3zKCtbmgfHL433F78JPEXiDTdAh8KfFm7Hlw263TX+m2sum3Go28ckhk8ueV0iXfIsaKhDIEfcrr6eK8OMyotqpyr3XJXdr2U20rrVr2c/J2Vm+aN844uD2/r+rn21RXwF8Nf2rPiP481Xwlr8Phie68MeMLyGFLO28N6/Hc6dZ3ZIgvJtWmgGnTooKNME2IqklJZAvzeq/tN6Xr2uX/wr0PT7qxj03UfFkMV5bX1nJdx3BSzuriLeqXEAMaGJiUYHc/lvuAjKyeHxHwvjMqqqjjI2k7/g7NfJ9dnum1qa0q0Zq8T6oor4/tPjl8TJNAsPi/cafpI+H2o61Fpi2aif+1o7S41AabFeNNv8lmMrLI0Ai4jOPMLCvTPhB43+IHj/AFDxNqWvRadZ6Fo+s6zo1rHbxym6nOnX8kEc7u0hRB5abWQKSz5cMi4SvnjU90or46+J3xA+KvinSvixaeA7LSB4d8E21zpt2t955vdQuf7PS6uBbvGyxwCOOdFQukm9852rzXnuk/H/AMbaVo+leCvAunqR4V8O6G07S6Fresfbbm6sI7gQJJpUTx2qiMoPMlLksxxHhcsAfoPRXxJp3xG+JEnxS8SeNbiaDS9IT4faRrSaDq6TWBs555L4+VdXEs/lQSJLGwnmNvzHsTYDGXfNs/j14o8QWfjjwj4pXRfElvF4N1HXIZ7Cx1Czsn8geVLayfanP2mNvMX95DIvy5BCkg0AfdtFfANn478T+DdS8eeKvBuiJeXsumeCEMUcFxcwWNvcQzLLcG3t91xLFboSxjjJcgdepro9c+JGseKPgd4h+Jd5qujarqvw31AataXmhNLGjpYIsk0c9rOzzW0stu89vJE7sdj7gfmGAD7bopAQQCOhpaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAM7VP+PZP+u9v/AOjkrndT8Qa8Nfm8P+HdMtryW1tYLqZ7q7e1ULcPKkapsgnLHMLFs7ccYzk46LVP+PZP+u9v/wCjkrmbD/kpGu/9gnSf/R9/VRAqahr/AI50mxuNU1TS9Es7O0jaWaebWZo4oo0GWd3awAVVAySTgCvkSf8A4KDfCZHnktLi21LTrV9k2pWEOu3mmxt73kGivCR/tKxX3rU8b6VbftL/ALS+ofBrxSn2j4c/Cax07VNY01t3k6zrWrCR7KG6HAktrWGMzGI5V5HXeCqgHnf2kfDPxz+EHw08bfHTwz8ZrnT28HxTahpegLpenQ6CthbuDFp8kXlPcSO8YEQlE6necoqAhQcy7AfVHgj4l6r8SvDVp4x8Ap4f1/Rb4Ew3dnrU0sTY4K5Ww4ZTwynDKeCAa6z7f8SP+gFpP/g2n/8AkCviLxdFB8EPFfw5/af8HaWPDdh8Sr3SdH8caJECltI+u7FttRKLhFurS5ZUkkC7pY3YMc4J/RSjmXYDiPt/xI/6AWk/+Daf/wCQKPt/xI/6AWk/+Daf/wCQK7eijmXYDiPt/wASP+gFpP8A4Np//kCj7f8AEj/oBaT/AODaf/5Art6KOZdgOI+3/Ej/AKAWk/8Ag2n/APkCj7f8SP8AoBaT/wCDaf8A+QK7eijmXYDiPt/xI/6AWk/+Daf/AOQKPt/xI/6AWk/+Daf/AOQK7eijmXYDiPt/xI/6AWk/+Daf/wCQKPt/xI/6AWk/+Daf/wCQK7eijmXYDiPt/wASP+gFpP8A4Np//kCj7f8AEj/oBaT/AODaf/5Art6KOZdgOI+3/Ej/AKAWk/8Ag2n/APkCj7f8SP8AoBaT/wCDaf8A+QK7eijmXYDiPt/xI/6AWk/+Daf/AOQKPt/xI/6AWk/+Daf/AOQK7eijmXYDiPt/xI/6AWk/+Daf/wCQKPt/xI/6AWk/+Daf/wCQK7eijmXYDiPt/wASP+gFpP8A4Np//kCj7f8AEj/oBaT/AODaf/5Art6KOZdgOI+3/Ej/AKAWk/8Ag2n/APkCj7f8SP8AoBaT/wCDaf8A+QK7eijmXYDiPt/xI/6AWk/+Daf/AOQKPt/xI/6AWk/+Daf/AOQK7eijmXYDiPt/xI/6AWk/+Daf/wCQKPt/xI/6AWk/+Daf/wCQK7eijmXYDiPt/wASP+gFpP8A4Np//kCj7f8AEj/oBaT/AODaf/5Art6KOZdgOI+3/Ej/AKAWk/8Ag2n/APkCj7f8SP8AoBaT/wCDaf8A+QK7eijmXYDiPt/xI/6AWk/+Daf/AOQKPt/xI/6AWk/+Daf/AOQK7eijmXYDiPt/xI/6AWk/+Daf/wCQKn03WpNf8PxahNbi1mW9NvLEH8xVltbzyJNr4Xcu+MlSVBIxkA8V2Feb+Ev+RYn/AOw7qX/p4mp6W2A9IoooqACiiigAr+eH9t7/AJOw8c/XTP8A022tf0PV/PD+29/ydh45+umf+m21rzM2/hfM8PiD+AvX9GfMNFFFfNs+HCiiikBzuvf8sP8AgX9KzL7VtU1Ty/7SvJrvyRtTzpGk2j0XcTgfStPX/wDlh/wL+lc7XfQ+FHpYd+4j/9T4/ooor4c/KwooooAQ9DX9BP7DH/JrPgr66n/6crmv59j0Nf0E/sMf8ms+Cvrqf/pyua9bKP4j9P1PoeHP40vT9UfWlFFFfRH2YUUUUAZ17/x86f8A9d2/9EyVzZ8CaQfiKvxO86f+1F0ptHEe5fs/2dpxcFtu3f5m8Yzvxj+HPNdJe/8AHzp//Xdv/RMlaNAHmfj/AOF+nePdR0LXf7X1HQNY8OPO1lfabJCsyJdII542W4iniZJFVc7oyRgFSDXB2n7N/h7TLCe10XxT4h0+5fVpNahvI72N7m3vLiIxXBV5YZBIk4JZ0nWVdxygUAAfRFFAHz9F+zt4fstPtE0XxLr2lazb3t3qEmsW91Eb66uL9US4a4WSB7Zw6xxgL5AC7F2BTnLZ/wBmj4c3OmeEtNnkvpD4Q1tvEEU7Tq095fSTNcytdsyESJLORK6qE+ZE27VGK+g6KAPCdP8A2dPhrYWPj7TZIbm7tviPeSX2pJLNjy5HYyBbZo1RolSVnmTkssjMwbpjPuf2b/DGraT4ksPFPiHW/EN74l0iXQpNQv7iB7q20+bl4rby4EhTc2GZmjZnKqXLYFfQ1FAHlXjf4S6V4y1zTvFVrrGp+Gtd023ks1v9JmjimltJmV3t5VmimjdN6hlym5G5RlJOcLwl8HR8OW8LaN4H1e/h0HR7/Vr29gubkSm6Gp+bII5Mxl5THPKHjZnBAU7zIxzXuVFAHA/ED4b+HPiRp9naa4bi1utLuBd2F9ZTNbXllcKpTzIJU5BKsyspBVlJDKRxXBWv7PuhbtTv9c8S67r+t3+nXWlwapf3UL3Wn212u2X7EkcCW8MjYBMnkljtAYkDFe90UAeS+IPgv4N8QfCa3+DTefYaHY21nb2slq6Jc2x09o3t5YnZGUSI0atuKkE5yOTWFrXwD0i/1vV9a0DxV4g8K/8ACQyCbU7bSLyKG3u5/LWJpiskMrRSuiqHeBoi2ASc817vRQB5brfwe8F6v8Irr4JW0UuleGbjTjpapaOBNFb7dvyPKsgL45LOGJOSck1t+JPAWj+KNd8KeINQmnjuPB95LfWixMoR5ZbWW0YShlYldkzEBSp3AHOMg9vRQBxN54D0i++IWl/EmWacanpGnXmmRRqy+Q0N7LBLIzqVLFw0C7SGAAJyDwRmeKvhdoHi7xXpfi7Ubi5in06xvtMlt4zEba+sNR8sz29ykkbkoWhRgY2RsjBYqSK9JooA8J8K/ADw14Y1XTNTn1zWddTw/bzWuj2+pXSTQ6ZFPH5L+RtiR2byv3YedpXCEqGwTmEfs4fDw6N4U0KY3c1t4V0WXw780ke7UdJngEElrfYjAkQ7VkGwIVkUMpUEg++UUAeF6D8BND0i4nutU8R674jmOmz6TaNql3HN9htLkKJVgCRIC7BVzLKJJCFALYyD01j8KPDtgPAQhuLpv+FdwNb6fueM+ajWZsibjCDcfLOfk2fNzjHFenUUAcT4B0DWtC8FafoHizUJNav4Y3We4uZBPJKHdmCySBIxIVQhCwjQNjO1QcV514X/AGefCXhbVNEuotX1fUdL8LSPLoukXt0kun6a7I0StCojWV/Kjdki86STy1PyY4I97ooA4/wH4J0r4eeF7bwnoss09nay3MqvcMrSFrqeS4fJRUGA8hC8dMZyea+a/Dn7NJ1qfxyPHOpavp+k+JvEuoX9xpFrexCw1OzkkUwtOoV5EEiKFkSOSIuoAkBr7EooA8I8Wfs/eF/FWsavqSa1rOiWviRYl1nT9Nu1t7TUhFGIR5ymNpELRKsTtA8TOigMTiuqHwm8Keb4xZjcGHxvBBbXsKyeWkUVvbfZFFu0YV4z5fOdxIblSOlem0UAfPtp+zj4QmGonxprGr+NX1DSptED6xcRO0GnzsjyRRG2hgwzNHGxlbdLlFIfPW1YfADw/GNVm8QeIda8S32p6RcaHHeancxSzWdhdDE0dv5cMaBnIUtI6O7FF3MQMV7xRQB5NrHwY8Ia9b+HrLVXuZ7bw5pl5pMUXmKqz2t/bJazCYqoYt5aDBQpgkn0A47S/wBnDRNOv/D2pXHi7xDqU/haKa1sDdXNsyR2c8PkSWxjS2RGVk2/vCpmyq/vcZB+iqKAPO7L4YeGLT4UW/wanE154eg0VNBbznAnls0thane8YQb2jHLKF55AFcFpf7PGh2WtaJr+reKNd1+50K2urCFdRntpYZLC7jWOW1khS3jjKNsQlwqysVXdIyjFfQNFAHzzpH7NPgWw8q01nUtW8SaRY6fdaVYaZql0s1pY2V5H5MsUISOORsw/ug80kjqnCsKtaP+zv4PtHuv+Em1XVvGEM+lT6JFDrNyk8dtp10FE8MQijiJMgRA0kheUhQN/WvfKKAPBNK/Z68NWv2sa/4g13xOJtMn0e3/ALTvg5srK6CiVbdoI4WEjBVzM5eb5R8/XNW3/Zx8NSi/l8TeJNf8SXl3pj6RDd315GtxZWkkkcrLbvawwYcyRRsZHDuSgyxGQfoWigDynwP8JdO8Ga/e+Lb3XdV8Ua7e2sVib7VpYXljtIXaRYY1t4YIwu9ixOwsx6sazvF/wM8IeNtf1vXdZur5U8RabaadfWsMqRwSf2fO9xZ3Kt5ZmjuLeSRmjeORRnBZWIBr2eigD58uP2cvC+qaR4lsPE2va1r9/wCKLBNLuNSvp4GvIbGNzIsNv5cCQxrvJZj5RZzguWIGNzxX8CfBHi/XNd13UXvLd/Elna217FazCGN59PlE1lfKVXzEu7ZgBHKrj5QAyttXHs9FAHgLfs8+G73SNd0/xF4g1rXr3xCLKO41G+uIXukg0+cXEEMQSBII4xJktti3NuJZicEenL4K0pfHz/EUSzf2k+mLpRj3L5HkJM04bbt3b9zEZ3Yx2zzXYUUAePa94KvZPipb+J7e1+16R4i0abQtZVX8t4kgaS4s5gcqxXMtxE235g0qEYAYjC0P9nbwrp93BP4k1rWPGEFlp91pVnba1cRTw2tneosU8aeVDE0hkjUIXmaR9vG7kmvfqKAPC/C/wC8M+Hr+G81TWtY8UQWNjNptja6xdJc29naXChJY41SOMyF0UIXmaWTb8u7BOZPBfwH8P+C9b0vWE17WtZi8PQSW+kWepXazW2mxSr5ZEIWNHciP92rzvKypkAjJr3CigD5u+POh/wDCVzaVpZ8A+J9dudJddQ0/XfDd9pNjcaddHfEyxSX2oWsu4x5EimJ4XRwDuIIXxrSvBWp2viWw8ba/8M/iT4n8S6dBdWsOo6pq3heSRLe8hMMkSxRatFbopB3fJEpZgC5YAAfe1FfZ5dxviMNhlhYU4uKTWrqXtL4lpNWTvqlZPdq5zzw6b5r/AJf5HwVp3gq/0iLQoNM+FvxDt4tE8KJ4OZBf+EiLzTIojFEbjdqZ/fRkl1eLywW+8pX5a6LW9M1PXvggnwEvPhB46Tw+mk22jieO+8Ki8+z2iJGjbzq5j8wiMbj5eM5wor7Torpqcf15zhUlRhzRkpJ3qaSTbT/ibpt2+7ZCWFVrX/L/ACPzv+JHwx1T4kaj4suZ/AHxP0Gw8dxRx67p+mar4Sitb5obcWscjebqcsiOIkRWEcipIEAkVhkGfXPh1rWq+KNe8Wab4E+KXh+68UW1pZanHpur+FIYrm1soBbxRlW1Nyh27j5kZWUFm2uAQB+hNFddLxMxkIRpxpQtFcqX7zb3d/3mtuSFr3a5Y22VpeDi9b/l/XU+TNXvdT1T4V33wctvgh4w0vw3e6NLoSx2l54ZV7eyltza4iZ9ZcBkjPylg3IBIPOc3XYL7xNq2h6nrvwU8Z3keh6PqehraveeFzb3Fnqy26XCzr/bG5iVtlA2sowzZByMfYtFeTR4xnTfNChFO8nfmq3vJcsnf2l7taNmjoJ9fy/yPgPQPAur6LJu1D4d/E7xBHbaZc6Rp0Wp6v4WnTTLS7QRyi3C6qheQoqqJbgzSBRjdgkHmLD4KeNtO1jWfFWneH/Hmg2lxo3h7w9Z2mj6roEWrS2emw3UMxvDLeNZDG2IrJDIJh5v7vb+9CfpHRXrR8Tsaue1KHvJJ/G1ZSUrWc2tWrvTW7e7bM/qcdNT441608Uar8CfEXwK8EfB7xB4ZtLjwtqejaY17d6EbWJzp8sVvHI0GrXE2ZH2pv2N8zbpCF3OOI8O/DW/8MX9kuv/AA5+IPjSPw/YXGk6bHeat4cl0+zt7iL7PO1kG1S3uCJYgUSS53TLGduVJIr7+orkocf4inTnShRilJtvWpduSs3ze05rtaPXVNrq708Km7t/l/kfn94P+FWp2eueBY7vwj8SvJ8GzpBpcuq6l4VmsbCxlhazlgngtr5mmt/IfEjeVLdbFxG+chsTwP8ABP4maZ4p8C6jqfhrW7TS/hhLf38Gnya1YX1i2LG4tYLDRF3xSlJGmUo+pMhiRBGHVWY1+jlFdc/E7HSU17OHvRcft6Jqadvf0b556/3m+rvP1OOmv9f0j4F8OeBL3wxrmlXtl8MPiRNofh+7kvtK0CbVvC7aTYXMm/DxRrqyzMsfmN5Uckzxx5+RVwMfZXirwTpXi+98OX+pSzRSeF9TXVbYQsqh50t57YLJuVspsnY4Xacgc4yD2FFfM8QcR1cylGdaKTjfZy1u7680pa3u2922222bUqKhojwK3/Z18HW2rQTrqmrNoFrqZ1mHw+1yh0mK/wDNNwJVj8rztqznzliMxiV+QgwBXpvgvwVpXgWx1HT9Ilmmj1PU9Q1WQzsrMJ9SuXupVXaqgIryEICCQuMknmuwor541PBvGP7Pnhfxhq+val/bWs6Lb+LIli1qx026SG11HZF5AaZWjd1cxBY2aJ496qFfcKqal+zj4XuooYtH8Q654fD6Xa6Pf/2bdxw/2laWUflQi53QviQISvmw+VJtON2AAPoSigDwfxR+zv4D8UzXK3E99ZWF54fh8Nz2VrMiW8ljavJJanLRtKslu8jNGyyDOfnDgYqhJ+zpo15qNxrWt+LvEOr6je6NfaDcz3VxbN51hfqAUMaWyRI0bKHR40Ri3+sMi/LX0PRQB4Vd/s/eFLhL9rbVdWsLu9j0dEurW5SKe2fREdLaSIiLaWIdhIsiuj5xsA4rl/EnwNeDwlq3hLR7q+1+8+IGpWaeIdX1OaJpzp8KqJtyxJDHg28X2eJIohhpQzAqGNfTtFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBnap/wAeyf8AXe3/APRyVzNh/wAlI13/ALBOk/8Ao+/rptU/49k/672//o5K53U/D+vHX5vEHh3U7azlurWC1mS6tHulK27yvGybJ4CpzMwbO7PGMYOaiB8oXGp2/wABv2wta13xdMLPwn8dLLS7az1CVglvb+IdEilhFnKxwEa7tWVoST87xlAM4z84fEr4/eF/jb8YJPDPxW0fxPo3wk8CX6SxaZH4a1e6k8UalavujnumgtXRNPgkUNFATumcB5AFCrX6JeM/h1rXxF8NX3g7x1NoGu6JqSeXcWl3os0sTjscNf8ADA8qwwVOCCCAa+W4/wBiTx7p8B0nw3+0D4z0PQvlWPTba7meGCNOFihnuJ5ruNAOAFnGBjB4o5V3An+OnjHSP2iPEnwx+A/w9lku5NT1HSPGPiHfG8D6ZoGmyx3sSXkUiiSG4u5vKjihdQ4wzMoC5r78r53+FXwLf4L6HNofw+uNIsheym4vbqXTbq4vr+5bJae7updRaWeQkn5nY4zgYHFeo/YPiR/0HdJ/8FM//wAn0cq7gdvRXEfYPiR/0HdJ/wDBTP8A/J9H2D4kf9B3Sf8AwUz/APyfRyruB29FcR9g+JH/AEHdJ/8ABTP/APJ9H2D4kf8AQd0n/wAFM/8A8n0cq7gdvRXEfYPiR/0HdJ/8FM//AMn0fYPiR/0HdJ/8FM//AMn0cq7gdvRXEfYPiR/0HdJ/8FM//wAn0fYPiR/0HdJ/8FM//wAn0cq7gdvRXEfYPiR/0HdJ/wDBTP8A/J9H2D4kf9B3Sf8AwUz/APyfRyruB29FcR9g+JH/AEHdJ/8ABTP/APJ9H2D4kf8AQd0n/wAFM/8A8n0cq7gdvRXEfYPiR/0HdJ/8FM//AMn0fYPiR/0HdJ/8FM//AMn0cq7gdvRXEfYPiR/0HdJ/8FM//wAn0fYPiR/0HdJ/8FM//wAn0cq7gdvRXEfYPiR/0HdJ/wDBTP8A/J9H2D4kf9B3Sf8AwUz/APyfRyruB29FcR9g+JH/AEHdJ/8ABTP/APJ9H2D4kf8AQd0n/wAFM/8A8n0cq7gdvRXEfYPiR/0HdJ/8FM//AMn0fYPiR/0HdJ/8FM//AMn0cq7gdvRXEfYPiR/0HdJ/8FM//wAn0fYPiR/0HdJ/8FM//wAn0cq7gdvRXEfYPiR/0HdJ/wDBTP8A/J9H2D4kf9B3Sf8AwUz/APyfRyruB29FcR9g+JH/AEHdJ/8ABTP/APJ9H2D4kf8AQd0n/wAFM/8A8n0cq7gdvRXEfYPiR/0HdJ/8FM//AMn0fYPiR/0HdJ/8FM//AMn0cq7gdvRXEfYPiR/0HdJ/8FM//wAn0fYPiR/0HdJ/8FM//wAn0cq7gdvXm/hL/kWJ/wDsO6l/6eJq0fsHxI/6Duk/+Cmf/wCT6n03RZNA8PxafNcC6ma9NxLKE8tWlurzz5NqZbau+QhQWJAxkk809LbgdhRRRUAFFFFABX88P7b3/J2Hjn66Z/6bbWv6Hq/nh/be/wCTsPHP10z/ANNtrXmZt/C+Z4fEH8Bev6M+YaKKK+bZ8OFFFFIDndf/AOWH/Av6VztdFr//ACw/4F/Sudrvo/Cj0sP8CP/V+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9BP7DH/JrPgr66n/6crmvWyj+I/T9T6Hhz+NL0/VH1pRRRX0R9mFFFFAGVqcMNxLYxTosiNOcqwBBxFIehqT+yNJ/58oP+/a/4UXv/Hzp/wD13b/0TJXzF+0iPif4V0R/HHgv4iajocUuo6LYLp8djpk9ui399b2crh7i0lmLbZWcZkIDY4xxQB9O/wBkaT/z5Qf9+1/wo/sjSf8Anyg/79r/AIV4BefEbUPg8l34c8Rf8JR8Tb6zgOqXd/b6dYRiysmyqq7QiyhfBidgkayTYySMba6WP47eFL7xZpfhDQ7DUNWuNW0nT9djuLeGMWsemahJLGtzLJLJHsWPyt0ikbsMuxXO4KAetf2RpP8Az5Qf9+1/wo/sjSf+fKD/AL9r/hXg2iftK+Edd13wvpFvoOuQWnjW5kg0XUp7SNLG+SOCS4M6P5pdYikeU8xEdwysiMm5luaV+0T4U1e9037Po2sRaJrtwbPS9alt4k03ULk7hHHC5l81fOKkQvLFHHIcbXO5cgHtv9kaT/z5Qf8Aftf8KP7I0n/nyg/79r/hXkfwC+JPiT4peB5/EfijRJdFuotU1WyVZPICSR2d9PbptENxP8yLGI5SxAMquUBjKsca1/aS8IXml32swaNrLWlnqE2kRMLWMteapDdvafY7VBKWlkZkMgYARrHy7qVdUAPdf7I0n/nyg/79r/hR/ZGk/wDPlB/37X/CvBtU/aX8G6B4d1fW/E2jazpF7oN1p1re6VNaxvqEQ1WYQWsypDLJHLE7bsGKRydjKFLjbVqL9o3wbaWOvTeLtL1bwnf+Hra3vJtP1O2QXc8F3L5Fu9sttJOk3mzfugqOWEhCsFJGQD2/+yNJ/wCfKD/v2v8AhR/ZGk/8+UH/AH7X/CvEG/aN8HabpviC78YaTq/hW88OWcWoTWGo2yC6mtbiTyYZLcW8s0coeXEeA+5XIDhciqWt/GpLvwpqV7PpfiDwRfaVqehW0qXlhbPOyapqEFvH5RMsttJHLuMcrLIZIlLMFEgQEA98/sjSf+fKD/v2v+FH9kaT/wA+UH/ftf8ACvmnQ/2irq1u/iD/AMJx4dvrO38O+JItC0lLeO3muL+W4traSK2jjiuZWe4ZpWkyQkYhZCzBllCdHcftI+DdN0PU9V1/SdX0i90S/wBN0++0u4tkN/A+rSrFay7IpZElicsSGhdydrBQXG2gD3P+yNJ/58oP+/a/4Uf2RpP/AD5Qf9+1/wAK8rg+NvhyE+IovEum6h4buPDGjRa9dw6gkCv9gk8/508maVWKG3cOMjaSo5zXXXfjvTdO+HE3xM1W2uNP0+10ptXnguFVbiGFIPtDpIqsyiRVBDAMQCOCetAHTf2RpP8Az5Qf9+1/wo/sjSf+fKD/AL9r/hXh9l8VdX8KeHPC+k+K9N1DxV451+yk1KbTdHghMkERZXkyZXt4khtzKkCNI4eTA+++416j4L8c+H/HfhmPxVosjx2paaKaO5QwzW09s7RTwzo3KSRSKyuD0I4JGCQDf/sjSf8Anyg/79r/AIUf2RpP/PlB/wB+1/wrwbRP2lfCOu674X0i30HXILTxrcyQaLqU9pGljfJHBJcGdH80usRSPKeYiO4ZWRGTcy++amSNNuyOCIZP/QTTQGcYvC4OClmCPaOjy/C392y/KOs/UY9RbTriLRZYbe9MbCB542lhSTHyl40eNmUHqA6k+orxLwn8W76Dwbqmt+PliuNQ0/X7vQYo9Lt3Q3k8NybeFYYZZZCHkIyQZNqjJJABNDaT1PVwWT1sRSdSjq01G3W8r26Wtp3PffL8Lf3bL8o6PL8Lf3bL8o68ws/ilpk9h4jmv9Kv9M1Hwta/bLzTrhYTdeQ0byRvGYppIHEnluqkS43KQxUisuy+M2l33hXVPHcOgasvhvTdMn1Vb+SO3SO6ht08xkgjacTFmUEoXjSNgMh8EErmibLh3Gu/7vZpbqzcknFJ3s+ZO6te61Wh7H5fhb+7ZflHR5fhb+7ZflHXiekfHTw5q2uwaA2k6nZTTXsNgZLiKFY45rq1N5bbyszNiaEZXapKn5ZAjEA2Lb42eG7m6tnGm6imiXuof2Xb6y0UX2Ca780wBFxKZwrSgxrI0QjZsYbBBo5omlThfMIu0qL2T6a3va2uraTaS1a1SseyeX4W/u2X5R0eX4W/u2X5R14v4i1HxLo3xi8IWFvrlxJo/iJNQE+nPFamCM2lurI0cghFwCWJZt0rDsABxW14i+KFhoes32hafoupa/daTbx3V/8A2dHC62kUu4oXM00RZmCMwjiDvgZ28jJzIz/sCu/ZeytLnjz6aWXM4e85JJPmVuzbVm7np3l+Fv7tl+UdHl+Fv7tl+UdeT3Pxf0FtT0XSPD+n33iG48Q6Y2r2X2FIdktorRgsXnlhVDiRSN5Uds7iFKL8YfDdz4e0HXNJs73UrjxLLLBY6fBGgvHmt9/nowlkSJPJMbCRnkCAjAY5GTmiL/VzHWjJ0nr/APbb9l7stXZe7Lsz1ny/C392y/KOjy/C392y/KOuQ8IeMtN8ZWd5cWkE9jc6bcvZ3lpdqqXFtcIquUkCM6HKOrqyOysrAgmuD8Ma7468d2eveK/DOpWtlpt3cLb6Et5am5ga3tWKTXbrHJBK32l93ljzQojVHA+Zsu6IhktX957VqChZNu+8nolZO91eWm8U2r6X9r8vwt/dsvyjo8vwt/dsvyjrwb4S+Jfin4vuNUvvFF/ox07SdV1LSnhs9OuYZ5WsZmhEqyyXsqqGK7ipjPHG7vXReAvGd34n8U+KtOv7XU9Ln0s2WdP1FLIC3E8TMDFJZyzbxJt3N5jkqcAADikpJ2OjHcO1aEq0XOMvZJOVm+rUbapN6tXey73aT9X8vwt/dsvyjo8vwt/dsvyjr5n8V/Gy4u18Pv4QstQtbDUfE1hpS6pJBA1neR/bPIuo48u8qghXCyNEgOPkbOMnxe+NlxofhDxnJ4MstQ+0+HB9lfV44IJLO2viEYRFZHMjkCRQzCFo1JwzDBwnUid+G4IzCpUpUlFJzdtXtqo+921aVtZXurX0Ppjy/C392y/KOjy/C392y/KOvF/ilqPiXQNb8G6pouuXFpa6hrVlpl1YCK1e3minMhdmaSFp1fAABSVRgdM5Nd63i/TY/GqeBJopor+awbUIZGVRBNFHIIpVjbduLxlkLgqAA6kE84q6vY8eeTVVRhWg1JSTel7pRdne6W2+l9Ne9ur8vwt/dsvyjo8vwt/dsvyjr57tvjtpk3ifzrlRY+D/AOytXvVvZ428yWTRruO3nki8t33Qssm6MbA7YyBggHe0r4m6jrPiLxPHoWmnXdI0ex0i4s0sfLW7upNRWSV8NczQw7Fi8pwGKnBbknatJTidtbhTHU05VIWSV23oviULXeiak7NN6dT2by/C392y/KOjy/C392y/KOvn9vHup3H7OWt/ELRb+7fUrXRtVure5voLZLlLi1WbYZIoN9vlHTAA3KQBnOTXf+E/Hdj4kv5NCso5ryfTrWBr68RUFpHcyIrfZy+4EzbTvZUUhARuKkgEUkzHFcO4mlCpNq6hKUXvo42TeqWl2kurelj0Hy/C392y/KOjy/C392y/KOvKPAXjO78T+KfFWnX9rqelz6WbLOn6ilkBbieJmBiks5Zt4k27m8xyVOAABxXlPgP40a/4q1mzTVvEWj6ZBe6peWcVk2i34eRbe5lijiTUXuxbG4kjjDbQhIJxsNLnidVPhLFS9ra37tRbteXxRclblT6J6/D52ab+totO0O4TzILW2kXplUQj8wKl/sjSf+fKD/v2v+FeQ/E/xRq/gTw/N4502YJZ6DcWV1qkJRWE+mtI8N1yQSrRRv56lSCWiCk7WYV7fVNWPmDO/sjSf+fKD/v2v+FH9kaT/wA+UH/ftf8ACtGikBnf2RpP/PlB/wB+1/wo/sjSf+fKD/v2v+FaNFAGd/ZGk/8APlB/37X/AAo/sjSf+fKD/v2v+FaNFAGd/ZGk/wDPlB/37X/Cj+yNJ/58oP8Av2v+FaNFAGd/ZGk/8+UH/ftf8KP7I0n/AJ8oP+/a/wCFaNFAGd/ZGk/8+UH/AH7X/Cj+yNJ/58oP+/a/4Vo0UAZ39kaT/wA+UH/ftf8ACj+yNJ/58oP+/a/4Vo0UAZ39kaT/AM+UH/ftf8KP7I0n/nyg/wC/a/4Vo0UAZ39kaT/z5Qf9+1/wo/sjSf8Anyg/79r/AIVo0UAZ39kaT/z5Qf8Aftf8KP7I0n/nyg/79r/hWjRQBnf2RpP/AD5Qf9+1/wAKP7I0n/nyg/79r/hWjRQBnf2RpP8Az5Qf9+1/wo/sjSf+fKD/AL9r/hWjRQBnf2RpP/PlB/37X/Cj+yNJ/wCfKD/v2v8AhWjRQBnf2RpP/PlB/wB+1/wo/sjSf+fKD/v2v+FaNFAGd/ZGk/8APlB/37X/AAo/sjSf+fKD/v2v+FaNFAGd/ZGk/wDPlB/37X/Cj+yNJ/58oP8Av2v+FaNFAGd/ZGk/8+UH/ftf8KP7I0n/AJ8oP+/a/wCFaNFAGd/ZGk/8+UH/AH7X/Cj+yNJ/58oP+/a/4Vo0UAZ39kaT/wA+UH/ftf8ACj+yNJ/58oP+/a/4Vo0UAZ39kaT/AM+UH/ftf8KP7I0n/nyg/wC/a/4Vo0UAZ39kaT/z5Qf9+1/wo/sjSf8Anyg/79r/AIVo0UAZ39kaT/z5Qf8Aftf8KP7I0n/nyg/79r/hWjRQBnf2RpP/AD5Qf9+1/wAKP7I0n/nyg/79r/hWjRQBnf2RpP8Az5Qf9+1/wo/sjSf+fKD/AL9r/hWjRQBnf2RpP/PlB/37X/Cj+yNJ/wCfKD/v2v8AhWjRQBnf2RpP/PlB/wB+1/wo/sjSf+fKD/v2v+FaNFAHP6jpemJboyWcKkzQDIjUcGVQR07jivP/ABZ488MeFPEcfhb/AIRe+1m/ktBe7dNso7jbCZGjyw3Kwwy88Y5HOTXp+qf8eyf9d7f/ANHJXk3/ADcV/wByr/7fUAZ3/C0NJ/6Jv4k/8E6//F1XHxc8PG4NmPh74gM6jcY/7JTeB67fMzivJ/GWp+Mv2kfi34h+C/g7xBeeFfh54FWK38U6npjCHUNT1O5RZl0q0ueWt4ooGV7qaPEhLrEpX5mr4r8e/Anwh8Ibrw9rXxM/Z18MWPgvXNftdIF9oniHUbnxRYT6hN5FvdSXLRwvKS5BKxzMwJ6k0Afpp/wtDSf+ib+JP/BOv/xdH/C0NJ/6Jv4k/wDBOv8A8XXlvw08R+Ofgn8YbD9nX4l6/deLdB8U2c934M1y/wBragzaeu680u/lQDzpoois0U5UGRN4cllr7NoA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uj/haGk/9E38Sf8AgnX/AOLr3uigDwT/AIWhpP8A0TfxJ/4J1/8Ai6P+FoaT/wBE38Sf+Cdf/i697ooA8E/4WhpP/RN/En/gnX/4uvSLKTTNU0Wy1u1037A08sDBJY40mj/fKpDbCwB+jGuzrj9L/wCRZs/+u8X/AKUigDsKKKKACiiigAr+eH9t7/k7Dxz9dM/9NtrX9D1fzw/tvf8AJ2Hjn66Z/wCm21rzM2/hfM8PiD+AvX9GfMNFFFfNs+HCiiikBzuv/wDLD/gX9K52ui1//lh/wL+lc7XfR+FHpYf4Ef/W+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9BP7DH/JrPgr66n/6crmvWyj+I/T9T6Hhz+NL0/VH1pRRRX0R9mFFFFAGde/8fOn/APXdv/RMlecfGrwJq/xH8Dr4a0OaCC6XVNHvt1wzLH5en6hb3coyiudxSJgoxgsQCQMkej3v/Hzp/wD13b/0TJWjQB8m/Fj4I+OPH/jXV77dpOteH9X02GytodXnuymkTKJBNNDYxA290Zd6sfMeJgVC7ttaXwx+DPirw7cQzeNHsWiHgfSPCkyWE8sjNLpst35kiNJDFhJIpkIzyH3KRhQzfUFFAH5pfDnWdc8YeJPgv8PLHVNM1nTvAN3N58drHcJqUNnZaXc2Ucuq28qILCUGSOIw7pPMdyylVXB9K+HH7K934G1nwzpw8O+C00rwrdidNci0uOTX76KDcbZJfMt9kMwOwyXKTO7FcqELEj7jooA8j+DXgzxL8P8Aw5qXhfxAbSaBNY1a9sZ7WWR3lttSvpr1fPR40EciGYoVVpFIUNu5wPItW/Zz1LW/g9a+BtU/sm/1XSfE+o+I7aG9ha70u5+06ld3UdvdRugYq9vcmNyFOx/mXeFG765ooA/O/wAe/CHX/BPw5vry00jwt4R1fX/FPhGKytfD+nItnaeRqtuI3nmENtNdEyOXYMqKqjamMsx9P8TfAv4mfE3UNX8X+ONR0nRtfhs9PttEh00z3dpBJp+oR6mJrl5kheTzZ4Y0KKgCRg4ZmOa+waKAPlLVfhP8V/Gt94h8X+L5PDtrrdzoi6Jp+npHLqeltA1ytzcm8NxFE0guNix7Vj/dLlgXY1yOm/s7fEFfD+u6YJdL8P2eo33hu4tdDsr++vdMtf7H1SK9uZ0kuYlaOSeJBGsUUKR5Rdx5LD7booA+S9b+CPj+41/xNrGi3mmRu3iuy8X6LJO8x3XUOnxafPaXkSx/JE0cb7JY5HYFwSny4aPUPgl8RfFeoal4y8V3OlW+v6trHhS4a0tJJ5LO203w3qH2wos0kSSSzy+ZMcmJFyUXgAtX1xRQB8UftEeGtO8f/GT4e+B9E1OIapqaz2/iKyjIeR/DSSxXshnAOY0kntUt0Zh83nSKP4sfTXxU8Iy+Pvhj4t8DW7iKbxBpN9YRuTgK9zA8asfYFga7oRoHMoUB2ABbHJA6DPtk0+gD4v8AEfw1Pxvg8F/GPTPDvh7xDfxaRLpt9o3iq3L28UhkUyBXENw0Nza3EckTjy2DAsuVIBr1fwN8OfEvg7wfpHgNrTQ00i6h1I62NLthpixy3R3Qx2FtBGIyihmR3lZXIVXO5mbHvCqqjCgAZJ49T1paAPzU+G2ua/4t8T/BX4f6dqumavYfD+8lMyWkdwmpw2llpdzZxS6rbyogsJVLxxGHdJ5juWUqq4P39pjeKH8IyN4zis4dYMVx5yafJJJbAbn8vY0qo5Jj2lsqMNkDIwT1tQXMIubaW3J2iVGTPpuGKaA8z8aW3jqSCwu/AV1aJdWlwHntb7K295blGVojKiSSRMGKurqrcrgggmvGb/4Fahq/w2OgaxJp97rkmvy+JZYp4mm0yW5muXne1dHBZoDG5i3Fd38e3+Gvpr7JqY42Qn38xh+mw0v2XU/+ecP/AH8b/wCIolBPc9/LuJMThIRjh7RcZKV7au17JvqtX59L2St4P4d+GNzp3h3xXYweG/Dfha416ze1gh0SDYozE6hri5EMBlBZ8gCEbBn7xPG9qXgPVrv4F3XwxglgXU5vDj6OshZhbidrM24YsF3eXu5zszj+HPFetfZdT/55w/8Afxv/AIij7Lqf/POH/v43/wARR7NBW4kxM6iqN6qSl1esVZbtt6Lq231Z85H4ReJD4oOti5tPI/t7SNU275N/kWGmizkXHl43mTlRnBXkkHiqVj8I/GsXh/SvhndT6f8A8InpGrRagl4skpv5ra2vPtsNs1uYhGrBwqNKJjlQSEBPH019l1P/AJ5w/wDfxv8A4ij7Lqf/ADzh/wC/jf8AxFL2SO3/AFzxrUU7e7y202cE1GS80m99NdtreA+LdB+Lmq/EHQPFWk6Pob2Xhp78QrPq91FLcpeRiIM6rp0ixMoGSA0g7Z71h+Lvgtc6r431XxtF4a8M+JZdftLWOaLXYzJ9hubZGj8yCT7NKZI2UqGjIiJKA7hkgfTX2XU/+ecP/fxv/iKPsup/884f+/jf/EUOmnuThuLsRQ5PYRUeWPJpzaxcuezfNf4ve0t220PI9H+H19pPjzQfEcIsYNO0nw7No7QWkRtkE8k9vKDDAAyxwgQthd5K5A55NeXXHwB1Cfwr4VttRtNH13UfDGp6vdmx1FWl067t9UuJ5fLZmhdkkRXjYP5TBXUjBBzX1b9l1P8A55w/9/G/+Io+y6n/AM84f+/jf/EUOmmTh+L8dSalCWqt+U1011VSSdrPXRpo8Ci+GfiCD4e6h4Q0Ox0LwnNr12BdjRIWtorewk2pN5bLGpmujECqylIgCwOBsG72/TtPstJ0+20rTYVtrOziSGGJBhY441Coqj0AAAq99l1P/nnD/wB/G/8AiKPsup/884f+/jf/ABFVGKR5eYZxWxKtUel3L5tJavd2SSV/Pq3fy74feEdc8FaP4kgmNtdXepa1q2qWyrI6xlL24eaFJHMZKHBAcqrhecbu/K+D9A+LGmfEPX/FWt6TokVj4kNiswt9VuZpbZbOJo8or6fEspbdnBZMepr3v7Lqf/POH/v43/xFH2XU/wDnnD/38b/4ilyLTU6v9YKjdeU4Rk6qtJu+109LNLdJ9du10fK8Hwj+JFro3hzwPDcaV/YHhjxBbarFcmWf7XcWkN6bkQvD5OyORFbG4SMHKgYQEkHjL4R/Ei/8PePPBHhi40oaT4xvJtQjuruWdbi3knEZlgMSQujKzocSeYCob7jEV9UfZdT/AOecP/fxv/iKPsup/wDPOH/v43/xFT7JWsepDjrGxqqraN0+bb7XMpcz135lfturW0PC/ij4e+J3ijU9Fj8NaZo76foeqWmqJLd6ncQTTG3Vt0TRR2MyoCWIDCRuBnbzgcn8b31fUNM8LWelXdtpPxMe5Cafb2srXe2K8U2t4+SkLtbxROZjI0agPEnGcA/UH2XU/wDnnD/38b/4ij7Lqf8Azzh/7+N/8RTlTvfU5su4ndCVB+yX7q9t9brVSvzJxf2lZXV0mrnzv41+CJ1aP4faT4Xkgs9I8JSR29zHKWDy6ahhd4k2qQzSNbxh9xAKljnOKT4bfDnxz8K9C8QQaVDpus31/qimzjmvJrSKPSra3itbSN5Ftp2EqRxDKhCuScP6/RP2XU/+ecP/AH8b/wCIo+y6n/zzh/7+N/8AEUeyV7g+MMZLDfU6rUqfVPr7zm7tNPWT11PmXw98OPiVF8E/EHwl1220i3mvNK1OztLu2v7idXnv/OK+aj2cRjRTKMspcnH3e1dZ4A+HWu/DCe90zwu1tP4bu7UTx2c88oe31UKFk8uQxyEwXBG9y2WR9zBW3kD277Lqf/POH/v43/xFH2XU/wDnnD/38b/4ihU1oTi+LMTWjVhJJQqScpR1s5O2urbTutLPS7S0bR4J4P0D4saZ8Q9f8Va3pOiRWPiQ2KzC31W5mltls4mjyivp8Sylt2cFkx6modZ8EfFTxb9g8M+K73SpdEsdWt9RbUITKt/PFZXIuYIfs3liKJsoiPIsrZUEhATx9A/ZdT/55w/9/G/+Io+y6n/zzh/7+N/8RR7NWtcmXFFX2yrwpwUkopOzduVcsWrtu6WnZ2TabSZ4f8eoX1n4ca34DtAXv/HC22gWqKMktftIk0n0htxLMx7LGxr6NAAAA6CsyxspYpZLi5CeY4UAL8wULnnJA5O49q1KqW580FFFFSAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAZ2qf8eyf9d7f/wBHJXk3/NxX/cq/+31es6p/x7J/13t//RyVxl54R1T/AIWKfHlhPD/yCl00RS7v+e7TM/y/8BA/H2oA+a/2U54fDHxF+P8A8NdaC22vQ+N7zxGEbh7jS9bt4JLS4GcblHlvCSuQpj2nmvAP2v8ATfDHgdtG/a38EeO5/Gmv2Gr6a2h+FNQ1CPVtC1Ge6njttumWYyYbtY3aWKaFiUKk4wSR9afGP4CeIviPrWmfELwjr0fgz4gaDby2tlq9qhmjmtJmDyWV/bSZjurR2Aby2wUb5kZTnPy94Z/Zk/aH8H+JB4j8JfDf4IeHtfV2K6/ZadqQnhDZBkgs/KURycknbcAc4JIzQB7b8fJo/FP7T37P3gPRFWbV9E1DVPE9+6fNJZaVb2E1oGkx91Lm4nSJSfvMpA6Gvtevmv4NfAvV/hTPrPijVta/4TDxx4pMTazr2o7hPc+QCIoYYowI7e2i3N5cMYwueSx5r3X/AIqn/pz/APIlAG/RWB/xVP8A05/+RKP+Kp/6c/8AyJQBv0Vgf8VT/wBOf/kSj/iqf+nP/wAiUAb9FYH/ABVP/Tn/AORKP+Kp/wCnP/yJQBv0Vgf8VT/05/8AkSj/AIqn/pz/APIlAG/RWB/xVP8A05/+RKP+Kp/6c/8AyJQBv0Vgf8VT/wBOf/kSj/iqf+nP/wAiUAb9FYH/ABVP/Tn/AORKP+Kp/wCnP/yJQBv0Vgf8VT/05/8AkSj/AIqn/pz/APIlAG/RWB/xVP8A05/+RKP+Kp/6c/8AyJQBv0Vgf8VT/wBOf/kSj/iqf+nP/wAiUAb9FYH/ABVP/Tn/AORKP+Kp/wCnP/yJQBv0Vgf8VT/05/8AkSj/AIqn/pz/APIlAG/RWB/xVP8A05/+RKP+Kp/6c/8AyJQBv0Vgf8VT/wBOf/kSj/iqf+nP/wAiUAb9FYH/ABVP/Tn/AORKP+Kp/wCnP/yJQBv0Vgf8VT/05/8AkSj/AIqn/pz/APIlAG/XH6X/AMizZ/8AXeL/ANKRWj/xVP8A05/+RKiispdO0S2s5irPHPDkrkjmdT3A9aAOkooooAKKKKACv54f23v+TsPHP10z/wBNtrX9D1fzw/tvf8nYeOfrpn/ptta8zNv4XzPD4g/gL1/RnzDRRRXzbPhwooopAc7r/wDyw/4F/Sudrotf/wCWH/Av6Vztd9H4Uelh/gR//9f4/ooor4c/KwooooAQ9DX9BP7DH/JrPgr66n/6crmv59j0Nf0E/sMf8ms+Cvrqf/pyua9bKP4j9P1PoeHP40vT9UfWlFFFfRH2YUUUUAZWpxLNLYxOWAM5+6xQ/wCqk7qQRUn9l239+f8A8CJv/i6L3/j50/8A67t/6Jkr5i/aRHxP8K6I/jjwX8RNR0OKXUdFsF0+Ox0ye3Rb++t7OVw9xaSzFtsrOMyEBscY4oA+nf7Ltv78/wD4ETf/ABdH9l239+f/AMCJv/i68AvPiNqHweS78OeIv+Eo+Jt9ZwHVLu/t9OsIxZWTZVVdoRZQvgxOwSNZJsZJGNtdLH8dvCl94s0vwhodhqGrXGraTp+ux3FvDGLWPTNQkljW5lklkj2LH5W6RSN2GXYrncFAPWv7Ltv78/8A4ETf/F0f2Xbf35//AAIm/wDi68G0T9pXwjruu+F9It9B1yC08a3MkGi6lPaRpY3yRwSXBnR/NLrEUjynmIjuGVkRk3MtzSv2ifCmr3um/Z9G1iLRNduDZ6XrUtvEmm6hcncI44XMvmr5xUiF5Yo45Dja53LkA9t/su2/vz/+BE3/AMXR/Zdt/fn/APAib/4uvI/gF8SfEnxS8Dz+I/FGiS6LdRapqtkqyeQEkjs76e3TaIbif5kWMRyliAZVcoDGVY+TfCr9pdbjwrpc/j/T9XlS51i80mbxB9iij0qO5OoS21tC7IyOBjy4vNEPlb+Gk3bqAPrX+y7b+/P/AOBE3/xdH9l239+f/wACJv8A4uvFrX9oPwze2nifU7XQtbmsPCl3eaddTx2ayLLf2d59i+zW6JI0kryPh0KrsCEGRkbKihP+0p4S0vQfFWs+KNC1rw/ceDUsZtQsLy3hN2LfUpTFbzxCCeWORGZXyFkLDaQVzgEA94/su2/vz/8AgRN/8XR/Zdt/fn/8CJv/AIuvFrL9ofwin/CRJ4v0rVvB0vhrTU1eePV7eNHlsJGdFmhFvLPuJdCnlnEu4hdmTivPfiX+0XPY/DzxPe6bpeseC/EOiQaffpHq1jF5j2M97FBJLEqNcRv8pZWQ/vUJGUBxQB9V/wBl239+f/wIm/8Ai6P7Ltv78/8A4ETf/F1514K+LOm+MfE+o+Dp9D1Xw7q9haw36wapBHEbizndo0niMUso270KsrlZFOAyCvLfFHxk1fwx8dta0fxGL3SfAvhHwzHrF3cLHZPbzvcSTr5rnzHu9q+V5UUcUau0wfcpjMbOAfS/9l239+f/AMCJv/i6P7Ltv78//gRN/wDF14aP2i/DVpY69c+JfDuueG7vQ9Eu/EAstRtoYri80+yXdM9tsneMumVDRyOjqXXcFByPVfBXi+Hxxog8QWmm3um2cz/6Mb6NYnuICqsk6IHZljcN8okCPwcoBjIBu/2Xbf35/wDwIm/+Lo/su2/vz/8AgRN/8XXjfgP4/eHPiDqFjFpOg63a6Tq8M9xpur3Noq6ffRW/3mjeOSSSPI+ZPPjiLgfLk8VkWf7Sfh+6nhin8J+I7GPUrO9vdJkubKKIaqtjCbh47ZDP5iSvGpaNbhIdw7igD3v+y7b+/P8A+BE3/wAXR/Zdt/fn/wDAib/4uvEvFXx08Kx+FdMvdGmvS3inw5qOv2V1ZwwTvaWNnaLObmSOaQJkGWNEU7laRgrYXcwxLv8AaS0LRDcaRF4e8Q+JrzRNIsNW1Gaxs7YiO0u4TIs8m6eNA2EYmNMsSD5asASAD6I/su2/vz/+BE3/AMXR/Zdt/fn/APAib/4uvHda+P8A4R06Wzj0XTdV8TC40uDW7htKtRMLLTbkMYbi4DvG37wI5SOMPKwViIzivRvAXjPS/iL4K0Px5okc0On6/Zw3tulwqrMsU6B1DqjOoYA8gMR70Abn9l239+f/AMCJv/i6P7Ltv78//gRN/wDF1o0UAZ39l239+f8A8CJv/i6P7Ltv78//AIETf/F1o0UAZ39l239+f/wIm/8Ai6P7Ltv78/8A4ETf/F1o0UAZ39l239+f/wACJv8A4uj+y7b+/P8A+BE3/wAXWjRQBnf2Xbf35/8AwIm/+Lo/su2/vz/+BE3/AMXWjRQBnf2Xbf35/wDwIm/+Lo/su2/vz/8AgRN/8XWjRQBnf2Xbf35//Aib/wCLo/su2/vz/wDgRN/8XWjRQBnf2Xbf35//AAIm/wDi6P7Ltv78/wD4ETf/ABdaNFAGd/Zdt/fn/wDAib/4uj+y7b+/P/4ETf8AxdaNFAGd/Zdt/fn/APAib/4uj+y7b+/P/wCBE3/xdaNFAGd/Zdt/fn/8CJv/AIuj+y7b+/P/AOBE3/xdaNFAGd/Zdt/fn/8AAib/AOLo/su2/vz/APgRN/8AF1o0UAZ39l239+f/AMCJv/i6P7Ltv78//gRN/wDF1o0UAZ39l239+f8A8CJv/i6P7Ltv78//AIETf/F1o0UAZ39l239+f/wIm/8Ai6P7Ltv78/8A4ETf/F1o0UAZ39l239+f/wACJv8A4uj+y7b+/P8A+BE3/wAXWjRQBnf2Xbf35/8AwIm/+Lo/su2/vz/+BE3/AMXWjRQBnf2Xbf35/wDwIm/+Lo/su2/vz/8AgRN/8XWjRQBnf2Xbf35//Aib/wCLo/su2/vz/wDgRN/8XWjRQBnf2Xbf35//AAIm/wDi6P7Ltv78/wD4ETf/ABdaNFAGd/Zdt/fn/wDAib/4uj+y7b+/P/4ETf8AxdaNFAGd/Zdt/fn/APAib/4uj+y7b+/P/wCBE3/xdaNFAGd/Zdt/fn/8CJv/AIuj+y7b+/P/AOBE3/xdaNFAGd/Zdt/fn/8AAib/AOLo/su2/vz/APgRN/8AF1o0UAZ39l239+f/AMCJv/i6P7Ltv78//gRN/wDF1o0UAZ39l239+f8A8CJv/i6P7Ltv78//AIETf/F1o0UAZ39l239+f/wIm/8Ai6P7Ltv78/8A4ETf/F1o0UAZ39l239+f/wACJv8A4uj+y7b+/P8A+BE3/wAXWjRQBnf2Xbf35/8AwIm/+Lo/su2/vz/+BE3/AMXWjRQBnf2Xbf35/wDwIm/+Lo/su2/vz/8AgRN/8XWjRQBnf2Xbf35//Aib/wCLo/su2/vz/wDgRN/8XWjRQBnf2Xbf35//AAIm/wDi6P7Ltv78/wD4ETf/ABdaNFAGd/Zdt/fn/wDAib/4uj+y7b+/P/4ETf8AxdaNFAGd/Zdt/fn/APAib/4uj+y7b+/P/wCBE3/xdaNFAGd/Zdt/fn/8CJv/AIuj+y7b+/P/AOBE3/xdaNFAGd/Zdt/fn/8AAib/AOLo/su2/vz/APgRN/8AF1o0UAZ39l239+f/AMCJv/i6P7Ltv78//gRN/wDF1o0UAZ39l239+f8A8CJv/i6P7Ltv78//AIETf/F1o0UAc/qOnW6W6EPN/roBzPKesqju3/6uorjPFnxB+HPgbUY9J8U6vPZXc0QnVM3kmY2ZlBzGGHVSMZzxXoWqf8eyf9d7f/0cleTf83Ff9yr/AO31AGLeftAfAjT7WS91DxU9tbwjc8sv25ERR3ZmUAD61xGlftmfsia5qC6To3xQsL29c7Vhhurl5HPoqjlvwzXnHgLwvpP7YviXWfjL8Ux/avww0PVLnTvCfh6Z86Zc/wBlTSW9zq9/D9y5eWdHWBJQUijTO0uxI8e8JeK/AP7R/wC0P/wp+8+Gfhqb4Kal4e1WfQp302NLy+bTLuC1lvrWVNpgtnklkWAx7XIj80MNy0AfdH/C9Pgp/wBDHP8A98ah/wDEUf8AC9Pgp/0Mc/8A3xqH/wARXlvwQ1nxL8J/jHrX7LHi/WLrxFpw0weIvCWp38pnvDpQlW2udPupWw0slpMymNyWZ4XG45Svs2gDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIo/wCF6fBT/oY5/wDvjUP/AIive6KAPBP+F6fBT/oY5/8AvjUP/iKP+F6fBT/oY5/++NQ/+Ir3uigDwT/henwU/wChjn/741D/AOIr0y3m0rVtIs9b0qWeW3uJYGjMrTrkGZRkxykEfivvXX1x+l/8izZ/9d4v/SkUAdhRRRQAUUUUAFfzw/tvf8nYeOfrpn/ptta/oer+eH9t7/k7Dxz9dM/9NtrXmZt/C+Z4fEH8Bev6M+YaKKK+bZ8OFFFFIDndf/5Yf8C/pXO10Wv/APLD/gX9K52u+j8KPSw/wI//0Pj+iiivhz8rCiiigBD0Nf0E/sMf8ms+Cvrqf/pyua/n2PQ1/QT+wx/yaz4K+up/+nK5r1so/iP0/U+h4c/jS9P1R9aUUUV9EfZhRRRQBnXv/Hzp/wD13b/0TJXnHxq8Cav8R/A6+GtDmggul1TR77dcMyx+Xp+oW93KMorncUiYKMYLEAkDJHo97/x86f8A9d2/9EyVo0AfJvxY+CPjjx/411e+3aTrXh/V9NhsraHV57sppEyiQTTQ2MQNvdGXerHzHiYFQu7bWl8Mfgz4q8O3EM3jR7Foh4H0jwpMlhPLIzS6bLd+ZIjSQxYSSKZCM8h9ykYUM31BRQB+aXw51nXPGHiT4L/Dyx1TTNZ07wDdzefHax3CalDZ2Wl3NlHLqtvKiCwlBkjiMO6TzHcspVVwfSvhx+yvd+BtZ8M6cPDvgtNK8K3YnTXItLjk1++ig3G2SXzLfZDMDsMlykzuxXKhCxI+46KAPI/g14M8S/D/AMOal4X8QG0mgTWNWvbGe1lkd5bbUr6a9Xz0eNBHIhmKFVaRSFDbucDwPQ/gX8Z/+EIt/g74k1DQv+EQbWX1K4vLZrltQNqdSOpC0SJ4li3M+EM5cbVJxGSAx+2KKAPl29+Dfj5PhV4o8HaHq9vY6trHibUdajaOe4hinsrzVWvjaTTwqs8XnQN5UrRAlcnaWHXzD/hmjx+x8bCys/DeiW/jPT9FiNvZT3bC2udIv2uD5kslvuufOikfMxWNgypH5ZXMg+8aKAPmz4q/A7VfiV4l1+/XUYdPs9V8NQ6VBLhpJob62vjexStFgK0QYJuG8FuRgday/Fnw/wDj38SfDGuaN4y1DQtPiuobCK0sLB55bdpre9iuZrqa4lt1mUtHHsjhVWUZ+ZmOGH1PRQB5gngrVV+NE3xFMsP9myeH4tKEe5vP89Lt5y23bt2bWAzuzntjmvPPiX8DtT+IviXxlevqMVhY+I/DGn6PbSqGkngvbG9urtZXiICNEDLHxvy2GBC8E/SVFAHyH4v+D/xd+Kdrrl/49uNDsNSXwprnh7SYNOluZbdrrW4kSW6uZZYUdEHkxhYkSTaCx3OcCvqjSLGXT9EstNdgJba3jhLJyAyIFyMjpkcZFalFAHxZ4K+AHxN0LxbZ6yLnRPCYtYr9by78PPdxjWJbmCSKKW40tkjs4GSRluCVMrF0wGCsaz/A37PPxL8P+Mfh/wCMdWt/D76h4Slmj1K9F7f3d/qsd1aSW01y1xcxFo33MJPs+GRmJ/fIFGfuOigD458Ifs3+JfDmh/EbSLvUbO5GraZf6B4XUGQLYaTcvc3EcU52cMJbkI2wMPKhixkgiu78MfCHxJosvjSS6ubRv+Ej8PaRpNvseQ7Z9PtZ4JGkzGMIWlUqRkkZyoOAfouigD89NXur/wDZ71e10sa/pGnajqvg3RtOv/7UFysLz6RHNAsulOkRF5N87BrNvKdh5bBhuIr6q/Z70DVfCvwK+H/h3XbdrTUdP0LT4biFxh4pVgTejDsyngj1Few0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBnap/wAeyf8AXe3/APRyV5N/zcV/3Kv/ALfV6zqn/Hsn/Xe3/wDRyV59eeHdch+Kx8b2lstzZjRV04L5ioxlNy0zHnsFA+ufagD8+fhp4B+I3i/9lvxP+xx4Q1608L+NfAet3ek619ujmH2nQr28nvIJI/s7LII9QtpFTzVYMR5oyr8ilpHh39o3w3+258M/D+pT+CbX+zfBV7BHDpen6hBaRaHDf2aTwxRyXLFbgAKIWz5agfMjcV9i/Fr4FRfEvXLHx/oX27wR8QdIi8iy8R6RcwrdCDcX+zXMUivBd2xYkmGZGAOSpUkmvLJvgf8Atb+ISmm+NPjdKdKaNoLh9D0HT9J1WeFz8yi/aW58hj/ehiQjqMGgDasbofE/9uNtZ8Pf6Rofwj8M3ek6hdoP3Z1vWp4JvsYf+NobaASSAZ8tnVThjX2zXkXw08AaF8IPCVt4J+HvhRNK0q3Z5Cq3IkkmmkOZJppX3SSyyHl5HYse56V339o67/0CP/JhP8KAN+isD+0dd/6BH/kwn+FH9o67/wBAj/yYT/CgDforA/tHXf8AoEf+TCf4Uf2jrv8A0CP/ACYT/CgDforA/tHXf+gR/wCTCf4Uf2jrv/QI/wDJhP8ACgDforA/tHXf+gR/5MJ/hR/aOu/9Aj/yYT/CgDforA/tHXf+gR/5MJ/hR/aOu/8AQI/8mE/woA36KwP7R13/AKBH/kwn+FH9o67/ANAj/wAmE/woA36KwP7R13/oEf8Akwn+FH9o67/0CP8AyYT/AAoA36KwP7R13/oEf+TCf4Uf2jrv/QI/8mE/woA36KwP7R13/oEf+TCf4Uf2jrv/AECP/JhP8KAN+isD+0dd/wCgR/5MJ/hR/aOu/wDQI/8AJhP8KAN+isD+0dd/6BH/AJMJ/hR/aOu/9Aj/AMmE/wAKAN+isD+0dd/6BH/kwn+FH9o67/0CP/JhP8KAN+isD+0dd/6BH/kwn+FH9o67/wBAj/yYT/CgDforA/tHXf8AoEf+TCf4Uf2jrv8A0CP/ACYT/CgDforA/tHXf+gR/wCTCf4Uf2jrv/QI/wDJhP8ACgDforA/tHXf+gR/5MJ/hR/aOu/9Aj/yYT/CgDfrj9L/AORZs/8ArvF/6UitH+0dd/6BH/kwn+FVrW1nstAtba5XZIk8ORkHGbgEcjjpQB1FFFFABRRRQAV/PD+29/ydh45+umf+m21r+h6v54f23v8Ak7Dxz9dM/wDTba15mbfwvmeHxB/AXr+jPmGiiivm2fDhRRRSA53X/wDlh/wL+lc7XRa//wAsP+Bf0rna76Pwo9LD/Aj/0fj+iiivhz8rCiiigBD0Nf0E/sMf8ms+Cvrqf/pyua/n2PQ1/QT+wx/yaz4K+up/+nK5r1so/iP0/U+h4c/jS9P1R9aUUUV9EfZhRRRQBlamjSS2KJI0RM5+ZcZH7qT+8CP0qT7Fc/8AQQn/ACh/+N0Xv/Hzp/8A13b/ANEyV4t44+KnjvSfiba/DHwB4RsvEN5Lo7axLNe6s2mokS3At9ihbO6LNkg5yvFAHtP2K5/6CE/5Q/8Axuj7Fc/9BCf8of8A43Xjvgj456HrHh/XtU+Icdv4DvfCupNpWqRX99CbaG48qOdDHdny0dJI5UZSQpzkFQRWh4r+PXwt8I/8IdLfeILGa18b3xsdPuYry3MDbYpJGn3mQBoVZFiZk3YkkjU8sKAPUvsVz/0EJ/yh/wDjdH2K5/6CE/5Q/wDxuvK/h/8AG7wb41hgtb7UbDRtdu7/AFWzg0qS+ia7mTTL+4svNjjbZIwk8gvgIduSuTjJ1fih8X/A/wAILPR77xvqEOnw61qEGnxNNPDAFMzYaVjM6Dyoh80jDO1ecUAd/wDYrn/oIT/lD/8AG6PsVz/0EJ/yh/8AjdYs3jvwPbeJIvBtx4h06LX7hQ0enPdwreOpGQVgLeYRjnIXpWD8Vfit4Q+DvhePxZ40u47WzmvbOxTfLFEzy3cyxZUyugIjUtNJg5WKN2xhTQB3H2K5/wCghP8AlD/8bo+xXP8A0EJ/yh/+N1zWofEv4caTf6fpeq+KtJsr3VkSSygmvoI5bpJfuNCjOGkDfwlQQe1acnjDwlFrcfhmXW7FNYlk8lLI3MYuWk8rz9gi3by3lfvMYzs+bpzQBpfYrn/oIT/lD/8AG6PsVz/0EJ/yh/8Ajdc9ovxG+HviS/Ol+HfE+l6peh5I/Itb2CeXfCAZF2I5bKAgsMZGeahtvid8Nrx9XjtPFmkzv4fjkm1IJf27Gyii/wBY9yA58pUwdxfAHegDp/sVz/0EJ/yh/wDjdH2K5/6CE/5Q/wDxuuD+HPxc8FfEv4bWXxT0W/ig0S5tjczvNNF/oYRN8qXLI7JG8Q/1gLfL3ry7wT+0ha+OvCNr420ix02TT71NYljjTWYZLry9MiWRFaFYs+bIGzLGpbyFKMxbfgAH0b9iuf8AoIT/AJQ//G6PsVz/ANBCf8of/jdcDp/xc8FR+CfDHjLxlq+n+Fl8UWVrdwRX97FCN9zEkvlI8pj8wrvAyAM9cDOK9NR0kRZI2DKwBBByCD0INAFD7Fc/9BCf8of/AI3R9iuf+ghP+UP/AMbrgfD/AMVfDep+Drj4g67c23h7w79qnitb2+uo4Yp7aKQxJcl5NioszKzRgscoVbILbV77SNY0jxBptvrOg30GpafdrvhuLaVZoZFzjKSISrDI6g0AH2K5/wCghP8AlD/8bo+xXP8A0EJ/yh/+N1zx+I3w+XXJfDDeJ9LGswSRwyWRvYPtKSTELGjQ794ZyQFBGSTgV2VAGd9iuf8AoIT/AJQ//G6PsVz/ANBCf8of/jdYluHuII7iWaUvKoY4kdRlhngAgCuB0Hx5put6rq8DSfY9MsdQXSbS8lvWX7ffIpM8UMbEZ8pgYxhmLOsgAATJppLQ6sPgqtWM5043Ud/m7fN+S1td7JnrP2K5/wCghP8AlD/8bo+xXP8A0EJ/yh/+N1zV1faXYXFvZ32o/Z57zf5Mcl0yPL5S732KXBbao3NjoOTxXL+D/Gej+N7nVn8P6nZ6npthLHHDdafqwvfM3xq7easRxCysSoUs24DdxnANNhwwNaVOVZRfLGzb6auy9de3Z9nb037Fc/8AQQn/ACh/+N0fYrn/AKCE/wCUP/xuvJPBvj/SvE/h6213U5v7Ga91K+0yCGa+YmaazuprZVjLFNzyCEuEAJGSOcZNtvG2izeOLfwPpmq2V3erFO97ANWAvrUoqNGPsYLOwcMSzErsABw27hab3Oipk2KjVqUZQd4c1+y5d9dtHpvq9FdtHqH2K5/6CE/5Q/8Axuj7Fc/9BCf8of8A43XAeNvEtj4I8L3/AInv2uJ1s0HlwxzSeZcTyMEhgj+bl5ZGVF9yKnu9X8R6T4b/ALat9La91hLR5m0xbpnEk6QtIYI5nU8l12K+wZ6kAHh2WxyPC1FSVdr3W2k/NJN/ddX9Udx9iuf+ghP+UP8A8bo+xXP/AEEJ/wAof/jdVPDHiPSfF/hzS/FehS+fp2sW0N3bvjBaKdA6EjscHkdjxW5UnOZ32K5/6CE/5Q//ABuj7Fc/9BCf8of/AI3WjRQBnfYrn/oIT/lD/wDG6PsVz/0EJ/yh/wDjdaNFAGd9iuf+ghP+UP8A8bo+xXP/AEEJ/wAof/jdaNFAGd9iuf8AoIT/AJQ//G6PsVz/ANBCf8of/jdaNFAGd9iuf+ghP+UP/wAbo+xXP/QQn/KH/wCN1o0UAZ32K5/6CE/5Q/8Axuj7Fc/9BCf8of8A43WjRQBnfYrn/oIT/lD/APG6PsVz/wBBCf8AKH/43WjRQBnfYrn/AKCE/wCUP/xuj7Fc/wDQQn/KH/43WjRQBnfYrn/oIT/lD/8AG6PsVz/0EJ/yh/8AjdaNFAGd9iuf+ghP+UP/AMbo+xXP/QQn/KH/AON1o0UAZ32K5/6CE/5Q/wDxuj7Fc/8AQQn/ACh/+N1o0UAZ32K5/wCghP8AlD/8bo+xXP8A0EJ/yh/+N1o0UAZ32K5/6CE/5Q//ABuj7Fc/9BCf8of/AI3WjRQBnfYrn/oIT/lD/wDG6PsVz/0EJ/yh/wDjdaNFAGd9iuf+ghP+UP8A8bo+xXP/AEEJ/wAof/jdaNFAGd9iuf8AoIT/AJQ//G6PsVz/ANBCf8of/jdaNFAGd9iuf+ghP+UP/wAbo+xXP/QQn/KH/wCN1o0UAZ32K5/6CE/5Q/8Axuj7Fc/9BCf8of8A43WjRQBnfYrn/oIT/lD/APG6PsVz/wBBCf8AKH/43WjRQBnfYrn/AKCE/wCUP/xuj7Fc/wDQQn/KH/43WjRQBnfYrn/oIT/lD/8AG6PsVz/0EJ/yh/8AjdaNFAGd9iuf+ghP+UP/AMbo+xXP/QQn/KH/AON1o0UAZ32K5/6CE/5Q/wDxuj7Fc/8AQQn/ACh/+N1o0UAZ32K5/wCghP8AlD/8bo+xXP8A0EJ/yh/+N1o0UAZ32K5/6CE/5Q//ABuj7Fc/9BCf8of/AI3WjRQBnfYrn/oIT/lD/wDG6PsVz/0EJ/yh/wDjdaNFAGd9iuf+ghP+UP8A8bo+xXP/AEEJ/wAof/jdaNFAGd9iuf8AoIT/AJQ//G6PsVz/ANBCf8of/jdaNFAGd9iuf+ghP+UP/wAbo+xXP/QQn/KH/wCN1o0UAZ32K5/6CE/5Q/8Axuj7Fc/9BCf8of8A43WjRQBnfYrn/oIT/lD/APG6PsVz/wBBCf8AKH/43WjRQBnfYrn/AKCE/wCUP/xuj7Fc/wDQQn/KH/43WjRQBnfYrn/oIT/lD/8AG6PsVz/0EJ/yh/8AjdaNFAGd9iuf+ghP+UP/AMbo+xXP/QQn/KH/AON1o0UAc/qNncLboTfTN++gGCIu8qjPCDp1/nWbq3iDw7oFytnrviqHTrh0Eix3M9rC5QkgMFdQcZBGemQa6HVP+PZP+u9v/wCjkr5+8ZL4Ui+M99qvjW1trrSNI8Hy3032qJJo4kt7tmeTa4IyqbueuM0Ad1q3xV+FmgWL6nrvxH0rTrOL781zqNhDGv1d8AfnXL+HP2i/2ffF92bDwv8AF/QNUuhn9zb6tpzynHUhAdxHuBivhbTPh14O8S/Arxl+3F8WvC+m6jfz6BqWveFPD15bRS6Ro2mJatLp6tabRDNd3Cqkk0zqxy4SMoq89X4C/ZB/4W/oOh678VdV8Fa5oV9ZrJNB4d8KW+kalaXLw7kFrq9rePJC9tMVOVT5wpVlAYigD74/4TzwH/0PNj/4GWX+FH/CeeA/+h5sf/Ayy/wr5f8A2atP0qLWvG37PvxN0fTdc8VfDKe1EerSWNuJNV0bUkeXT7qUCMf6Qqo0NxgYLpuyd9fWP/Ctvh1/0Kulf+AMH/xFAGd/wnngP/oebH/wMsv8KP8AhPPAf/Q82P8A4GWX+FaP/Ctvh1/0Kulf+AMH/wARR/wrb4df9CrpX/gDB/8AEUAZ3/CeeA/+h5sf/Ayy/wAKP+E88B/9DzY/+Bll/hWj/wAK2+HX/Qq6V/4Awf8AxFH/AArb4df9CrpX/gDB/wDEUAZ3/CeeA/8AoebH/wADLL/Cj/hPPAf/AEPNj/4GWX+FaP8Awrb4df8AQq6V/wCAMH/xFH/Ctvh1/wBCrpX/AIAwf/EUAZ3/AAnngP8A6Hmx/wDAyy/wo/4TzwH/ANDzY/8AgZZf4Vo/8K2+HX/Qq6V/4Awf/EUf8K2+HX/Qq6V/4Awf/EUAZ3/CeeA/+h5sf/Ayy/wo/wCE88B/9DzY/wDgZZf4Vo/8K2+HX/Qq6V/4Awf/ABFH/Ctvh1/0Kulf+AMH/wARQBnf8J54D/6Hmx/8DLL/AAo/4TzwH/0PNj/4GWX+FaP/AArb4df9CrpX/gDB/wDEUf8ACtvh1/0Kulf+AMH/AMRQBnf8J54D/wCh5sf/AAMsv8KP+E88B/8AQ82P/gZZf4Vo/wDCtvh1/wBCrpX/AIAwf/EUf8K2+HX/AEKulf8AgDB/8RQBnf8ACeeA/wDoebH/AMDLL/Cj/hPPAf8A0PNj/wCBll/hWj/wrb4df9CrpX/gDB/8RR/wrb4df9CrpX/gDB/8RQBnf8J54D/6Hmx/8DLL/Cj/AITzwH/0PNj/AOBll/hWj/wrb4df9CrpX/gDB/8AEUf8K2+HX/Qq6V/4Awf/ABFAGd/wnngP/oebH/wMsv8ACj/hPPAf/Q82P/gZZf4Vo/8ACtvh1/0Kulf+AMH/AMRR/wAK2+HX/Qq6V/4Awf8AxFAGd/wnngP/AKHmx/8AAyy/wo/4TzwH/wBDzY/+Bll/hWj/AMK2+HX/AEKulf8AgDB/8RR/wrb4df8AQq6V/wCAMH/xFAGd/wAJ54D/AOh5sf8AwMsv8KP+E88B/wDQ82P/AIGWX+FaP/Ctvh1/0Kulf+AMH/xFH/Ctvh1/0Kulf+AMH/xFAGd/wnngP/oebH/wMsv8KP8AhPPAf/Q82P8A4GWX+FaP/Ctvh1/0Kulf+AMH/wARR/wrb4df9CrpX/gDB/8AEUAZ3/CeeA/+h5sf/Ayy/wAKP+E88B/9DzY/+Bll/hWj/wAK2+HX/Qq6V/4Awf8AxFH/AArb4df9CrpX/gDB/wDEUAZ3/CeeA/8AoebH/wADLL/Cj/hPPAf/AEPNj/4GWX+FaP8Awrb4df8AQq6V/wCAMH/xFH/Ctvh1/wBCrpX/AIAwf/EUAZ3/AAnngP8A6Hmx/wDAyy/wo/4TzwH/ANDzY/8AgZZf4Vo/8K2+HX/Qq6V/4Awf/EUf8K2+HX/Qq6V/4Awf/EUAZ3/CeeA/+h5sf/Ayy/wrd82C/wBPttS0/VDqFpLNAUdGheJx5yjIaNeefQ9ap/8ACtvh1/0Kulf+AMH/AMRT9IRI/C1jHGoREmiAAGAALgYAFAHZUUUUAFFFFABX88P7b3/J2Hjn66Z/6bbWv6Hq/nh/be/5Ow8c/XTP/Tba15mbfwvmeHxB/AXr+jPmGiiivm2fDhRRRSA53X/+WH/Av6VztdFr/wDyw/4F/Sudrvo/Cj0sP8CP/9L4/ooor4c/KwooooAQ9DX9BP7DH/JrPgr66n/6crmv59j0Nf0E/sMf8ms+Cvrqf/pyua9bKP4j9P1PoeHP40vT9UfWlFFFfRH2YUUUUAZ17/x86f8A9d2/9EyV8weOfhdN48/aSs7/AFJ9b07R7bwlJEL7Sb690xDcm/VhA9zaPHuOwlvLZj03Y4zX0/e/8fOn/wDXdv8A0TJWjQB8XfEf4daX8L7bwXo3gDwvK2jjVL2+v9VTTrjxJqNpeS2+xbjymaWWSWfJjaeRZBGoAwAQV8x8F6F4p0HSfDz6l4b13bofxPutWnEulMJ/7P1GwvEiuhDZx+UUMk6eYIQRESQ4Uhq/R+igD4J0/wCGV5Z/CTSpofC80evP8TU1WcizcXYgHipj9qb5d4j+xAN5n3fJ+bOw5r3n9oa11B/DnhnVrHTbvVI9E8TaNqF1FY20l3cLa29wDK6QQq0km0HJCKTjtXvtFAH516/4R1xvCvjP4WnwTqN1461/xVc6nYa4tizWeyfUBdWl+2ogeXCbS32p5ZcSAx7EQgjP09+0lpup6n8JbyPSNPuNUntdT0K9a3tIWuJ2hstWtLmcxxIC7lYo3baoLHGACeK92ooA/ND49aL4y8ap8WdL0vwnqVtd65ZRf2aun+H/AD31eKOxjMct1qV0rJC8b7o/s6iKdQg2BpGBr1K88E614q/4Xx4k0fT5tI1XxToFjBpGoajbyWTr5mjlSA86o0JWRts3QxsMOAy4H27VW+sbPU7K403UYEubS7jeKaKRQySRyAqyMp4KsCQQeooA/Om/tbPxp8Q/AujfD3wleeB9U/4QvxNpsU93ZHTzFKba1jhjjOA0qW0jgiZA0eXHluxLY1vgn4Dvx4x+HcU2n+L7afwZZ3C3a6lp2laXptgxtTbtbJPa6dC9+kjtlRFOyfKsrsWUA/X/AIJ+D/w9+Hl8+peFdNkgujbi0SW4u7q9eG1DBhbwG6ll8mHcAfLj2pkDjgY9LoA8C/ZettQ034CeDPD+s6bd6VqWiafDp93bXttJbSJPbKEfCyKu9M/ddcow5UkV84+HvBPjGDwF8JbOXQb+O403w54qguo2tZQ8E1xbqsMcqlco8h4RWwWPABr9C6KAPzWl8D+KvD9/4c8Q+JLfxTDYXfgXQtLgTQ9GsdWlhurSOT7XZXVvfWN5Jb+YZIyGAjjYhllb5Fx9j/C3whqnhf4IaH4OjS6sL+20ryY4764jubm1kdCUikmgjijYw7gnyIqgKAvABPsVFAH523fhvVtZ+E37P/ifSxq8WjeEtNW21KLRLK11G/s7v7Clqsos7q3ulkNvLHLDJsiaVPMJXgNXtnwGt28CaDObjSfEuzxp4iuZYP7RtLcTRhoFH2q4t7G2torCGYwltjoDvYM53yED6K0Pw5o/huO8h0S3+yxX91NeyorMU+0XLb5mVSSF3vl2C4BdmbGWJO5QB+YNhaW+m+Hvg54L1TwndL4p0LxtaNfay1pi1uJnmuGmuYL77tz9qz5hVGZlGfMClAK/R/w74gi8SWc97FY3lgILme2KX1u9tIxt5DGZEVwC0T43RuOHUhhwa4nRPgl8MfDviNPFWj6OYL6Gee5gQ3NzJa2091uE0ttaPK1vBJIHYM0UakhmGeTXqtAHi3jvU/Eth4KitPBttJNrmrGGxtJFiaSO1e4GGupiBhY4E3SEtwxATqwFcL8SPB3/AAh/wh0qx8Gadc6lL4MvdKv7a2gRp7m5+x3cbz8KCzySxmQsQMlmJ717vbl7eCO3lhlDxKFOI3YZUY4IBBqbz/8AplN/35k/+Jqpwu2e7lueSw3slGKahPna/mtsn5JXS7c0u58j+BdJ+Iel/Eezn+IqX+o2nhfRr3UlvvJmuA9zqaWfm28WxWMjwyRXQjiQFxGyKAcjPWfDXxRazfFLxxM2k61a2/iO7sHsZrnRNStoXW3sI45C8k1uiRYdGUeYVyemcjP0Z5//AEym/wC/Mn/xNHn/APTKb/vzJ/8AE1KpNbHrY3iyOIjU9rRs5QUPddkveU725Xq5q71Ss2vNfGfwo8LeL/B/ibTPFHibTbrU9N1DUdcsbWFrSQTaG9xqVzKlwIxktDeKf3k5UFF8vnyixruPGfjGyX4xeE9Vj0jXZrPw/DrVtezw6DqksayTi3WPY8dswlVjG2HjLLgZzggn6U8//plN/wB+ZP8A4mjz/wDplN/35k/+JpKlZWRpieMFiMXLGYileTjOPuy5VaaktuV6pSe1rv3pXbk35HqGn6j44+Jtil7aTQeG/B6R3qGaJ40vdUuFIiKbwN6WsRLEjjzXX+KM49ceWKC4tppnEccbuzMxwqqInJJJ4AFHn/8ATKb/AL8yf/E1mavoVj4tsJ/D2rW8smnX0UsN0p8yDfDNG0boHG1huDY+U5xnmtFG1z5fG451lTglaMFZL8W/Vtt/hskcJ+zTBPD8EPC8sylI7yO4u7dWGCtpd3Ms9sMHpiF0AHYV7pUUEEFrBHbW0axQwqEREAVVVRgAAcAAcAVLUHAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGdqn/Hsn/Xe3/wDRyV80fFbwrc+O/HPjHwRZP5dx4h+HmoadGxONr3czwqc9sFq+l9U/49k/672//o5K8xvNO1Sz+NB8VfYpptOHh9bLzIk3Zna7aTb+Crk+mR60AfPHwW+K/wAKpv2OtJPxuFlp+m+DLG18KeLbDVLdZYLPUbDyrCa3urfa67GfY4ypTy3VyQuSPEvh9F8ENU/bI8C6t+xhDp6aDb6Zq48eTeG4xFoTWzwr/ZkcogC2rXf2kllCfvAgYsMDj6X+JXwItPEni65+KPwr1fWvhl49vY1hvdT060iurXU4kXYiajp9xut7nYvCOQsqjgPgADg/+FCfGvxZbDw18Wfi5qd/4QkAW60nw14et/DZvUzlknu4p7i4VJOkiwvFuBIyAaAN/wCAt0PiV+0r8Yvjdov73wrFBpXhHS7tRiO/m0driXUJYz/y0jiuJ/JWQZVirBTha+2a8+8JWHhnwH4a07wd4N8Ny6PomkwrBa2ltbBIoo16BQD3OSSeSSSSSSa6L+3/APqHXn/fn/69AG/RWB/b/wD1Drz/AL8//Xo/t/8A6h15/wB+f/r0Ab9FYH9v/wDUOvP+/P8A9ej+3/8AqHXn/fn/AOvQBv0Vgf2//wBQ68/78/8A16P7f/6h15/35/8Ar0Ab9FYH9v8A/UOvP+/P/wBej+3/APqHXn/fn/69AG/RWB/b/wD1Drz/AL8//Xo/t/8A6h15/wB+f/r0Ab9FYH9v/wDUOvP+/P8A9ej+3/8AqHXn/fn/AOvQBv0Vgf2//wBQ68/78/8A16P7f/6h15/35/8Ar0Ab9FYH9v8A/UOvP+/P/wBej+3/APqHXn/fn/69AG/RWB/b/wD1Drz/AL8//Xo/t/8A6h15/wB+f/r0Ab9FYH9v/wDUOvP+/P8A9ej+3/8AqHXn/fn/AOvQBv0Vgf2//wBQ68/78/8A16P7f/6h15/35/8Ar0Ab9FYH9v8A/UOvP+/P/wBej+3/APqHXn/fn/69AG/RWB/b/wD1Drz/AL8//Xo/t/8A6h15/wB+f/r0Ab9FYH9v/wDUOvP+/P8A9ej+3/8AqHXn/fn/AOvQBv0Vgf2//wBQ68/78/8A16P7f/6h15/35/8Ar0Ab9FYH9v8A/UOvP+/P/wBej+3/APqHXn/fn/69AG/XH6X/AMizZ/8AXeL/ANKRWj/b/wD1Drz/AL8//XqlYRSweHbSKZGjdZ4sqwIIzcA9DQB1lFFFABRRRQAV/PD+29/ydh45+umf+m21r+h6v54f23v+TsPHP10z/wBNtrXmZt/C+Z4fEH8Bev6M+YaKKK+bZ8OFFFFIDndf/wCWH/Av6VztdFr/APyw/wCBf0rna76Pwo9LD/Aj/9P4/ooor4c/KwooooAQ9DX9BP7DH/JrPgr66n/6crmv59j0Nf0E/sMf8ms+Cvrqf/pyua9bKP4j9P1PoeHP40vT9UfWlFFFfRH2YUUUUAZWpiYy2IgZUfzzgspYf6qTsCv86k8rVv8An5g/78N/8dovf+PnT/8Aru3/AKJkryfxv8aIfCHja2+H2m+Edc8VaxcacdUKaSlkUjthN5GXa7u7bnfjhQetAHrHlat/z8wf9+G/+O0eVq3/AD8wf9+G/wDjteYj4ty2ugXHiLxB4L1/Q7e0stSv51u47Nmii01I3KuYLqVA84c+SN3zeW+4pgbvS9E1a217RbDXbNXSDUbeK5jWQAOEmQOoYAkZwecEjPegB/lat/z8wf8Afhv/AI7R5Wrf8/MH/fhv/jtaNFAGd5Wrf8/MH/fhv/jtHlat/wA/MH/fhv8A47WjRQBneVq3/PzB/wB+G/8AjtHlat/z8wf9+G/+O1o0UAZ3lat/z8wf9+G/+O0eVq3/AD8wf9+G/wDjtcv4+8e6Z8PtLs9Qv7O61GbUr2DTrS0slRp7i5uSQiL5rxxjgEku6gAHmtfxH4r0PwnHp8uuzmBdUvrfTrchGffc3bbIk+UHG5uMnAHcigDR8rVv+fmD/vw3/wAdo8rVv+fmD/vw3/x2tGjIHXvQBneVq3/PzB/34b/47R5Wrf8APzB/34b/AOO1o1S1PUbTSNOutWv38u2sonnlYAttjjUsxwMk4A6CgCPytW/5+YP+/Df/AB2jytW/5+YP+/Df/Haq6V4i0jWvDln4s0+ffpd/aR3sUrKy5t5YxKrlWAYfKQcEZHpXlFt8d9FuPh6fig3hzWoPD39g33iJZ5IbcbrKyRZUXAnOJbmJvMgRiMqG8wxkYoA9h8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2p7G7j1Cyt7+EER3MaSqG4IDgMM4zzzVqgDO8rVv+fmD/vw3/wAdo8rVv+fmD/vw3/x2sjwb4t0zxz4fg8T6Iko067eYW8kqhfPiikaNZ0AJzFKF3xk4LIVJAziuooAzvK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2tGq95Mba0nuFGTEjMAe+0ZoAreVq3/PzB/wB+G/8AjtHlat/z8wf9+G/+O1jXVzqFtazXImmnaJGfy4li3uVGdqBlAyegyfqah0y+1DUdNtNQka6snuYo5Wt7hIRNCXUMY5AgZQ65w21iMjgkc1XKX7N8vP0N/wArVv8An5g/78N/8do8rVv+fmD/AL8N/wDHazt17/z+Sf8AfMf/AMRXLXXi+O08Y6d4IluLo32p2V1fRuEh8oRWjwxuGONwYmddoCkYByRxkcfMuhh51G401dpN/JK7fySO68rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2s7de/8AP5J/3zH/APEUbr3/AJ/JP++Y/wD4inyGJo+Vq3/PzB/34b/47R5Wrf8APzB/34b/AOO1nbr3/n8k/wC+Y/8A4iuWtfF8V34y1HwRHcXQvtMsrW+kcpD5Jiu3mjQKcbiwMDbgVAwRgnnC5fM2pYec1KUFdRV35K6V/vaR3Xlat/z8wf8Afhv/AI7R5Wrf8/MH/fhv/jtcvquv2+iNYpqmqPA2pXKWduCiHzJ5AzKg2xnGQpOTgccmtfde/wDP5J/3zH/8RRy+ZEqUklJrR7eZo+Vq3/PzB/34b/47R5Wrf8/MH/fhv/jtc7qt/qunadPe2iXepzQrlba2+zLNKf7qGcxR5/3nUe9YPgXxp/wn3he18VaY13ZQ3L3Efk3aW4lje2meB1cRGRPvxnG1yCMc0W1tc2WDqOi8Ql7qaTd1u02tN9UnZ7aM9A8rVv8An5g/78N/8do8rVv+fmD/AL8N/wDHa5/RPGmm6x4g1DwoUkt9U022tLx0kUBZbe8Vtk0JBO5A8ckbZwQyHIwVZuxqTmM7ytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha0aKAM7ytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdrRooAzvK1b/n5g/78N/8do8rVv8An5g/78N/8drRooAzvK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2tGigDO8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2tGigDO8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa0aKAM7ytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha0aKAM7ytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdrRooAzvK1b/n5g/78N/8do8rVv8An5g/78N/8drRooAzvK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2tGigDO8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2tGigDO8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa0aKAM7ytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha0aKAM7ytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdrRooAzvK1b/n5g/78N/8do8rVv8An5g/78N/8drRooAzvK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2tGigDO8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2tGigDO8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa0aKAM7ytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha0aKAM7ytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdrRooAzvK1b/n5g/78N/8do8rVv8An5g/78N/8drRooAzvK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2tGigDO8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2tGigDO8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa0aKAM7ytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha0aKAM7ytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdrRooAzvK1b/n5g/78N/8do8rVv8An5g/78N/8drRooAzvK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2tGigDO8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2tGigDO8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa0aKAOf1GPUxbpvuISPOg6QsOfNXH/LQ9/8jrV/ytW/5+YP+/Df/HaNU/49k/672/8A6OSvn7xZ4M8NeOfjzHpPimz+22kPhoTqnmSR4kW9ZQcxsp6MRjOOaAPoHytW/wCfmD/vw3/x2jytW/5+YP8Avw3/AMdr86PGfhDT/iT8RNa+DP7OXh+x04+GGhi8R+LdRnu7u00yeZfMFlZ2izoLu9Ee15AzrFCGAfLEKPnfwz8JI/EvjNfC3wY+Neo/EPXbI3C3cl74YM/hJrm3UuYJ9U09IFtw+3YDFcSsGOMFuKAP2f8AK1b/AJ+YP+/Df/HaPK1b/n5g/wC/Df8Ax2viv4G6F8JPiimv+GPFvgY+FPH3gu5jtNd0ZtRubgRNMnmQXNvKJF821uU+aKTaDwykAqa97/4Z3+Dv/Qv/APk3df8Ax2gD1nytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdryb/AIZ3+Dv/AEL/AP5N3X/x2j/hnf4O/wDQv/8Ak3df/HaAPWfK1b/n5g/78N/8do8rVv8An5g/78N/8dryb/hnf4O/9C//AOTd1/8AHaP+Gd/g7/0L/wD5N3X/AMdoA9Z8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa8m/wCGd/g7/wBC/wD+Td1/8do/4Z3+Dv8A0L//AJN3X/x2gD1nytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha8m/4Z3+Dv/Qv/wDk3df/AB2j/hnf4O/9C/8A+Td1/wDHaAPWfK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2vJv8Ahnf4O/8AQv8A/k3df/HaP+Gd/g7/ANC//wCTd1/8doA9Z8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2vJv+Gd/g7/0L/8A5N3X/wAdo/4Z3+Dv/Qv/APk3df8Ax2gD1nytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdryb/AIZ3+Dv/AEL/AP5N3X/x2j/hnf4O/wDQv/8Ak3df/HaAPWfK1b/n5g/78N/8do8rVv8An5g/78N/8dryb/hnf4O/9C//AOTd1/8AHaP+Gd/g7/0L/wD5N3X/AMdoA9Z8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa8m/wCGd/g7/wBC/wD+Td1/8do/4Z3+Dv8A0L//AJN3X/x2gD1nytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha8m/4Z3+Dv/Qv/wDk3df/AB2j/hnf4O/9C/8A+Td1/wDHaAPWfK1b/n5g/wC/Df8Ax2jytW/5+YP+/Df/AB2vJv8Ahnf4O/8AQv8A/k3df/HaP+Gd/g7/ANC//wCTd1/8doA9Z8rVv+fmD/vw3/x2jytW/wCfmD/vw3/x2vJv+Gd/g7/0L/8A5N3X/wAdo/4Z3+Dv/Qv/APk3df8Ax2gD1nytW/5+YP8Avw3/AMdo8rVv+fmD/vw3/wAdryb/AIZ3+Dv/AEL/AP5N3X/x2j/hnf4O/wDQv/8Ak3df/HaAPWfK1b/n5g/78N/8do8rVv8An5g/78N/8dryb/hnf4O/9C//AOTd1/8AHaP+Gd/g7/0L/wD5N3X/AMdoA9Z8rVv+fmD/AL8N/wDHaPK1b/n5g/78N/8AHa8m/wCGd/g7/wBC/wD+Td1/8do/4Z3+Dv8A0L//AJN3X/x2gD1nytW/5+YP+/Df/HaPK1b/AJ+YP+/Df/Ha8m/4Z3+Dv/Qv/wDk3df/AB2j/hnf4O/9C/8A+Td1/wDHaAPWfK1b/n5g/wC/Df8Ax2qV/HqIijM88Tp58GQsTKf9avcyN/KvM/8Ahnf4O/8AQv8A/k3df/Ha7Hw/Z2un+D9OsbGJYIIJYVRFGAoFwOBQB3NFFFABRRRQAV/PD+29/wAnYeOfrpn/AKbbWv6Hq/nh/be/5Ow8c/XTP/Tba15mbfwvmeHxB/AXr+jPmGiiivm2fDhRRRSA53X/APlh/wAC/pXO10Wv/wDLD/gX9K52u+j8KPSw/wACP//U+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9BP7DH/JrPgr66n/6crmvWyj+I/T9T6Hhz+NL0/VH1pRRRX0R9mFFFFAGde/8fOn/APXdv/RMlfJ/jfwpqXi39qu0stN8Uap4VeHwW8hn0r7J5sg/tIDY/wBrt7lNvOflUHIHOMg/WF7/AMfOn/8AXdv/AETJWjQB8MfHDRbvw9qmi6Pfaxea/Pb+AfiDuvdQ8n7TNuGnMPM+zxQxfKDtG2NflAzk5J8W8d2tjNr9k/xS1nR9M0MeE9EbQF13SL3U4pGEL/axp5tb+zVL0SbNwAacqYthCiv1QooA/P8A8G/CnQ/iF8TLDRvi9FceK5LP4c+HzINWhNvLJNLeagPOuLYSyhLpFyNxdmRmfDZJNeQWms+GvFfg/wCFWh/EeKwup38FWk8F74lkvLy1uZpXMZjsrGAqbm+QRqWYSCUKyBAdxNfq/RQB+anwm8P+GvjDc/BPTPiFEPEsVr4D1lLyC7ZpA13aXmmW7pcoT8zxNnKyZKuob7ygg+FXg7RfD+kfADxvpSSDxHqet6jpd1fzTSzXFxYrYan5dtM7sS8Mf2eIRoeE2DaAa/SuigD8ovg7pt1L4r8CPqHiayi+Jq6qra/bWmhXp8QHyy5vo9Tu5dTMX2NwGVZDb+XzGYIwdoH1z+0j/Y39peAR8Q93/CuP7Ruf7e37/se/7K/2H7ds/wCXbzuu/wDd+Z5e/jFfUlFAH5jt4U8FeJ4dJis9Ig1b4er8SrCHw0L2ATwixmsF+3JaeeGP2N7xJNgX5Dt+X5QtfR37Wei+Cr/wp4R1bx3p9jd6TpfijR3uptQhjlgt7SW4CTmRpAVSJlIWQnCkcNxX1VRQB+TXxu1rwzdeIvHXiS2isNI8V+HddtWikunvLzxCltZS2+65tFQxpZWBiVmDDfEU3M/zNgetap4dl1bR/wBoTx94LjmvvEkOrmDTrizYyXENpLo+mNctY7Sds0sDtho/ncqgBOFFfoXWJ4k0Cw8VaBqHhvVDKtpqcElvK0ErwyqsgwTHIhDIw6qwIIPNAH5pX8Xgo+PPEh/ZOJFy3w0137MdM80w/wBofa7LHkbjj7aVAEmP3m7y/M+YCm+BvCvg7X73VNO8F6xpOv2E3hjU/wC19O0Xw7d21vOxjT7MurPe6ldg3qy/NEpiM5xJuIFffHgv4V2PhLXbjxTf67qnifW5rRLBbzVZIXkhtEcyeTGtvDBGAz4Z2KF3IXcxwK9SoA+ZfhJpfgTWP2UNB0nRbLT7vQbjw2sc9vDFE1q8/kH7WrxgbC/2jzPNBGfM3bvmzXyDcaPpOi/Bjwzb6PZQ2MU/wF8TXMiQRrGrz3FvpcksrBQAXkdizseWYknJNfqxRQB+W/xZtLObx3rT/E7W9J0uwGiaUfDaavo99qUrx/ZsT/2S9rqFmqXn2nduVFM5zEd2zAH2tqUPi+y/ZsvYHvLrUPE8PhSVftFzCLe7mvVsTh5YleQJK0nLqHbDZAY9a9yooA/Oz4uWthNp3wgj1TU9K0v4Z/8ACPSASa1p8+o6L9t8q0+xi6igu7RVJt/N8h5XaMEMAu9kI9h+BmvReHvhhp/huLxD9v1LxFcaw3hhLmym09ZYLffIkdtDcXF1L9ljA3QmWXcYSvAAFfRPgvwjp3gXw7b+FtGkkbTrJpfsySkHyIZJGdIEIA/dwhvLjByQiqCSRk9QyhlKsMgjBFAH5b+BE+GR8UfASTQ/PPxC/tVh4r8zzvtX9o/2Pem5/tLfx9o88P5O/nZv8v8Ad5r9HNM8UeH/ABn4Rk8SeF76PUdMuorhYp4s7HMLPE4GQD8rqyn3FcB4W+Buh+Gdc0nWJ9f1nXYvDnn/ANkWmp3Mc8GnmdDEzRMsSTSMImaNWnklZUZgCMmvYNRR5dPuY4xuZ4nAA7kqcU1uB4r8Y7v4bReDLu0+Jc2lJaTpKbWPVmgEb3KRsU8sT8GQZ428jtXztLr3hXxd+y/4J0bR9XttQlsW8G2l6lncq01rIbqzRkkMTbopBhhzhgQe4r7U+32XeeMexYA/lml+3WP/AD8R/wDfY/xolSbZ9fk/E8MJRpQ5JOUKkai9+yuuijyu111vvZ+R8eeMtKvPC2ofF/w98M7Q6Zv8Kafew2unp5WLl3vopZYY4wAJnjjUZUbmKr1IFVvDn/Cu2+MOkf8ACkPsojPhPWAjWYH2X7V51ns34+Tzxx52f3n3fM7V9mfbrH/n4j/77H+NH26x/wCfiP8A77H+NT7A9CHHUlTcJU2242b5tJfu407zVvety8yV1a71d7nwh8FdJspdW8DXa+J9MtvFcILatZ2mj3K61NJ9ncXUOr3DXsvHmHcJJoVUyKhi25C10AOmr8QlvCsn/Cov7bJU5H2T/hIt2PMxjP2H7RkA52fbPm+7g19n/brH/n4j/wC+x/jR9usf+fiP/vsf40lh7Kxvi/EGVbETrzpt80eW14+6m27xcYR95X9xu7jrvfTD1TxfoGjeI9D8J6hcGPU/EX2n7FGEZhJ9kjEs2WAKrtUg/MRntmvA9d8EeF/Gvxw8YW/irT49Tgt/DGleXFMN0au89/8AvAp48xcfI/3kydpGTX0x9usf+fiP/vsf40fbrH/n4j/77H+NaSpt7ny+V528GpSw6anKPK3zW151K6slbRKNrvW7vryr4g1q08N+IPgr8DvF3xGtbTUba1uNKOoXuoxJMkdtPZSLIZ5JAcRvKIt5Y7SwUtyAa2/izpvgDX7bwjb+F4LG58NJovih7SOzVPsf7q2TBjWMbMJINy4HDgMOQDX2J9usf+fiP/vsf40fbrH/AJ+I/wDvsf41n7B2PpIceyjVhVjCS5HUaSn7qVTm2XLo4uW63Wlle58ofBvXfDHga48RXev6na6LpkmneG7mWa8nSCJ7y7s282V5JCAZZigLMTucjJJNdX+zP4x8Ja18P4ND0fW7K+1G1utVnltoLmOWaOKXUbhkdo1YsFZWUqSMEEEdRX0J9usf+fiP/vsf40n2+y7Txn2DAn8s1UaTTR52b8T0cXTrKVJqU3Td+dWXs4OG3Ld3u29V0+fkl35g/aA8Af2f99vCet/bsdPIFxpn2fd7+YX2e2/3r6GrifD/AINsNM1298YyNLNqup2lnZsZSCsFvaKxWGIADapkkkkbOSzNycKoHbU3ufHBRRRSAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDO1T/AI9k/wCu9v8A+jkryb/m4r/uVf8A2+r1nVP+PZP+u9v/AOjkryS8b7B8eTq92rR2a+GlgMu0lfNe9ZlXgHkqpP4UAfmtaeKtf8I/8ErfF3izw5cS2/i/XL7VodVuQwinTUdW8RPY3jyP1VkSQqHxuChW4xXu0l/8cP2Rrz4QaPrWuaDrngDxPrmm+DZNC03SDp39kS6grrayWM5nlkuEjdMSmYb3GXwCx2J8Uvh7e+ANQ8dzeEfDS/Ef4S/FEvN4o8IQMbfUrS+uF2XOoaU0hjiczgK8sJeN/NUSROGJFeE+H/FFr/bnhbUJfDfxg+K+p+C3M3hnRfFWk2mkabpt6IzDFPfag0MAmkjRiEnd5ygJYKzYNAH2Fr4jtP8AgoF4QfRCfteofD7Vl1dVHy/ZLfUbY2Tt6kTPKqk9ASAeSK+1K+TPgT4HvvC+teJPi58X9WtNV+JPjQwpdtZRzGy0zTrYf6NplkZRvMMZLPI5CmWRi7DgV9Kf8JRoX/Pz/wCOP/hQBv0Vgf8ACUaF/wA/P/jj/wCFH/CUaF/z8/8Ajj/4UAb9FYH/AAlGhf8APz/44/8AhR/wlGhf8/P/AI4/+FAG/RWB/wAJRoX/AD8/+OP/AIUf8JRoX/Pz/wCOP/hQBv0Vgf8ACUaF/wA/P/jj/wCFH/CUaF/z8/8Ajj/4UAb9FYH/AAlGhf8APz/44/8AhR/wlGhf8/P/AI4/+FAG/RWB/wAJRoX/AD8/+OP/AIUf8JRoX/Pz/wCOP/hQBv0Vgf8ACUaF/wA/P/jj/wCFH/CUaF/z8/8Ajj/4UAb9FYH/AAlGhf8APz/44/8AhR/wlGhf8/P/AI4/+FAG/RWB/wAJRoX/AD8/+OP/AIUf8JRoX/Pz/wCOP/hQBv0Vgf8ACUaF/wA/P/jj/wCFH/CUaF/z8/8Ajj/4UAb9FYH/AAlGhf8APz/44/8AhR/wlGhf8/P/AI4/+FAG/RWB/wAJRoX/AD8/+OP/AIUf8JRoX/Pz/wCOP/hQBv0Vgf8ACUaF/wA/P/jj/wCFH/CUaF/z8/8Ajj/4UAb9FYH/AAlGhf8APz/44/8AhR/wlGhf8/P/AI4/+FAG/RWB/wAJRoX/AD8/+OP/AIUf8JRoX/Pz/wCOP/hQBv0Vgf8ACUaF/wA/P/jj/wCFH/CUaF/z8/8Ajj/4UAb9cfpf/Is2f/XeL/0pFaP/AAlGhf8APz/44/8AhWdpf/Is2f8A13i/9KRQB2FFFFABRRRQAV/PD+29/wAnYeOfrpn/AKbbWv6Hq/nh/be/5Ow8c/XTP/Tba15mbfwvmeHxB/AXr+jPmGiiivm2fDhRRRSA53X/APlh/wAC/pXO10Wv/wDLD/gX9K52u+j8KPSw/wACP//V+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9BP7DH/JrPgr66n/6crmvWyj+I/T9T6Hhz+NL0/VH1pRRRX0R9mFFFFAGVqZmEtiYFV3884DMVH+qk7gN/KpPN1b/AJ9oP+/7f/GqL3/j50//AK7t/wCiZK858bfFvS/B/iKz8HWOiar4o1+7tje/YdJhjkkhtA/l+fM88sEMaF8quZNzEHaDg0Aejebq3/PtB/3/AG/+NUebq3/PtB/3/b/41XN+A/H2g/ETRpdY0ITQm0uZbK7trqIw3NpdwECSCaM/ddcg9SCpDKSpBPa0AZ3m6t/z7Qf9/wBv/jVHm6t/z7Qf9/2/+NVoAgjI5FLQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVoZA6964D4ofEjQvhN4Jv/HXiKG5urSxaGMW9lGst1cTXEqwxRQxsyB3d3AA3CgDr/N1b/n2g/wC/7f8AxqjzdW/59oP+/wC3/wAaryrXPjl4T0j4SaX8ZLS0vdY0fWl01rS3skhN3K2qyxQwIFlljjDb5VDgyDbzzxXOD9o/Q7C7vtO8ZeE/EHhK+ttMvtWgh1O3tv8AToNOj824W2ltrmeFpUUglHdDg56ZNAHvHm6t/wA+0H/f9v8A41R5urf8+0H/AH/b/wCNViW3jHTLrwNF8QI4php02nLqYjKr53ktD54Uru279vGN2M98c1yer/GPwxo3waT443VreNoT6Vb6uIESM3fkXKJIi7DII94DjI8zGc4Y0Aej+bq3/PtB/wB/2/8AjVHm6t/z7Qf9/wBv/jVeMa98dRpnjjWvAWg+BfEXim+8Px2kl5Npiaf5EYvUaSIZur23ckhTnCcY61No/wC0D4K1rT/Dl7bWmoRS+Itdm8N/ZZoFiuLHUreKeaWK7Rn+TYsDAlC+SVxkEkAHsPm6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H/f8Ab/41WjRQBnebq3/PtB/3/b/41R5urf8APtB/3/b/AONVo0UAZ3m6t/z7Qf8Af9v/AI1R5urf8+0H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nD/8crRooAzvttz/ANA+f84f/jlH225/6B8/5w//ABytGigDO+23P/QPn/OH/wCOUfbbn/oHz/nD/wDHK0aKAM77bc/9A+f84f8A45R9tuf+gfP+cP8A8crRooAzvttz/wBA+f8AOH/45R9tuf8AoHz/AJw//HK0aKAM77bc/wDQPn/OH/45R9tuf+gfP+cP/wAcrRooAzvttz/0D5/zh/8AjlH225/6B8/5w/8AxytGigDO+23P/QPn/OH/AOOUfbbn/oHz/nD/APHK0aKAM77bc/8AQPn/ADh/+OUfbbn/AKB8/wCcP/xytGigDO+23P8A0D5/zh/+OUfbbn/oHz/nD/8AHK0aKAM77bc/9A+f84f/AI5R9tuf+gfP+cP/AMcrRooAzvttz/0D5/zh/wDjlH225/6B8/5w/wDxytGigDO+23P/AED5/wA4f/jlH225/wCgfP8AnD/8crRooAzvttz/ANA+f84f/jlH225/6B8/5w//ABytGigDO+23P/QPn/OH/wCOUfbbn/oHz/nD/wDHK0aKAM77bc/9A+f84f8A45R9tuf+gfP+cP8A8crRooAzvttz/wBA+f8AOH/45R9tuf8AoHz/AJw//HK0aKAM77bc/wDQPn/OH/45R9tuf+gfP+cP/wAcrRooAzvttz/0D5/zh/8AjlH225/6B8/5w/8AxytGigDO+23P/QPn/OH/AOOUfbbn/oHz/nD/APHK0aKAM77bc/8AQPn/ADh/+OUfbbn/AKB8/wCcP/xytGigDO+23P8A0D5/zh/+OUfbbn/oHz/nD/8AHK0aKAM77bc/9A+f84f/AI5R9tuf+gfP+cP/AMcrRooAzvttz/0D5/zh/wDjlH225/6B8/5w/wDxytGigDO+23P/AED5/wA4f/jlH225/wCgfP8AnD/8crRooAzvttz/ANA+f84f/jlH225/6B8/5w//ABytGigDO+23P/QPn/OH/wCOUfbbn/oHz/nD/wDHK0aKAM77bc/9A+f84f8A45R9tuf+gfP+cP8A8crRooAzvttz/wBA+f8AOH/45R9tuf8AoHz/AJw//HK0aKAM77bc/wDQPn/OH/45R9tuf+gfP+cP/wAcrRooAzvttz/0D5/zh/8AjlH225/6B8/5w/8AxytGigDO+23P/QPn/OH/AOOUfbbn/oHz/nD/APHK0aKAM77b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FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV/PD+29/wAnYeOfrpn/AKbbWv6Hq/nh/be/5Ow8c/XTP/Tba15mbfwvmeHxB/AXr+jPmGiiivm2fDhRRRSA53X/APlh/wAC/pXO10Wv/wDLD/gX9K52u+j8KPSw/wACP//S+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K+up/+nK5r+fY9DX9Av7CssUn7Lng6ON1ZoW1JXAIJVjqFw2D6HBBwexB7162UfxH6H0PDn8aXp+qPriiiivoj7MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK/nh/be/5Ow8c/XTP/Tba1/Q9X8737bMkU/7VnjmWB1kUNpy5UgjcmnWysMjuGBBHYjFeZm38L5nh8QfwF6/oz5kooor5pnw4UUUUAc7r/wDyw/4F/Sudrotf/wCWH/Av6Vztd9H4Uelh/gR//9P4/ooor4c/KwooooAKrS2qS8mrNFNOw07Gd/Z8VH9nxVo0VXOX7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnf2fFR/Z8VaNFHOHtJGd/Z8VH9nxVo0Uc4e0kZ39nxUf2fFWjRRzh7SRnjT4qtxQrEMLUtFJyJc29woooqSQooooA53X/APlh/wAC/pXO10Wv/wDLD/gX9K52u+j8KPSw/wACP//U+P6KKK+HPysKKKKACiivv74GfsJXHxq+F+kfEpvG66IurtchLUacbootvPJBkyfaYuSYycBeBjmtqNCVR2ijow2FqVpctNXZ8A0V+rH/AA6+l/6Kd/5Rf/u2j/h19L/0U7/yi/8A3bXV/Zlbt+R3/wBh4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7aP8Ah19L/wBFO/8AKL/920f2ZW7fkH9h4n+X8V/mflPRX6sf8Ovpf+inf+UX/wC7a/PT40fDWb4N/FLXPhlcaiurPozQD7UsRhEq3EEdwp8ss+0hZACNx5HWsa2DqU1eSOfE5bWpR5qisvkeZUUUVynAFFFFAHO6/wD8sP8AgX9K52ui1/8A5Yf8C/pXO130fhR6WH+BH//V+P6KKK+HPysKKKKAEPQ1/QT+wx/yaz4K/wC4n/6crmv59j0Nf0E/sMf8ms+Cvrqf/pyua9bKP4j9P1PoeHP40vT9UfWlFFFfRH2YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV/PD+28f+Mr/AByPfTP/AE22tf0PV/PD+29/ydh45+umf+m21rzM2/hfM8PiD+AvX9GfMNFFFfNs+HCiiikBzuv/APLD/gX9K52ui1//AJYf8C/pXO130fhR6WH+BH//1vj+iiivhz8rCiiigBD0Nf0E/sMf8ms+Cvrqf/pyua/n2PQ1/QT+wx/yaz4K+up/+nK5r1so/iP0/U+h4c/jS9P1R9aUUUV9EfZhRRRQAUVDcXFvaW8t3dyrDBCrPJI7BURFGWZmPAAHJJ6V8d/Hr9sj4W/D34S6/wCMfhp408L+KPEunLbm001NVtrlrgyXEcbgRW83mttjZn+XpjJ4Brahh51JKMFcidRRV2fZVFfOnw6/ae+DHjDwr4YvNS8f+GbbxBrdlZSTaemr2gljvLmNC9usTSmTcsjFAh+bPB5rF/aH+Put/Bjxd8KvDmk6Xb6hF8QfEEOj3Dzs6tbxyywxmSPbwWAkJweOKuODqOfs7a/5CdWNua59S0VzPivxr4N8B6YuteONesPDunvKsK3Oo3UVpCZWBZUEkzKpYhSQM5IB9K+Nfj9+294D+HI8Gn4aeJvDPiv+3NagsdS8vU4bj7FZSffuG+zzfIF/vP8AKO9KhhKlVpQQVKsYq7Z94UV5JpPx++BGvana6LofxH8N6jqF9IsNvbW2sWc000rnCpHGkpZmY8AAEk15f+zx8fPEXxi8e/F7wlrenWtlb/DvX5NItJLfzN88STXEYeXezDdiEH5QBknij6rU5XJq1v8Ahh+1jdLufVdFeSfF346/Cv4E6VY638Vtb/sOy1KY29vJ9mubnfKqlyu22ilYfKM5IA968E/4eJfsc/8ARQP/AClar/8AIlOng601zQg2vJMUq0E7No+1qK4j4c/EbwZ8WfB1h4++H+of2roOp+aLe58qWDf5ErQyfu50SQYdGHKjOMjIwa8P/Zv+P2ufG3X/AInaPrGl2+nJ4E1+fR7doGdjPHE8ih5NxOGOwcDjmpWHnaTt8O/5D9orpdz6nooorAsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACv54f23v+TsPHP10z/022tf0PV/PD+29/wAnYeOfrpn/AKbbWvMzb+F8zw+IP4C9f0Z8w0UUV82z4cKKKKQHO6//AMsP+Bf0rna6LX/+WH/Av6Vztd9H4Uelh/gR/9k=
!! Testing the DetailsWidget
Let’s test the widget.
!!! Standard Details
<$details>
Find out more about this technology => go to DetailsWidget
</$details>
!!! Details with Persistent State
<$details state="$:/state/myDetailsStateTiddler">
* If the text reference contains a tiddler, the state is saved in the text field.
** Check $:/state/myDetailsStateTiddler
* no summary defined
** Note: You can click on the whole detail area to close as we have to emulate the change event using a click event.
</$details>
<br>
<$details summary="Save state in a state index" state="$:/state/myDetailsStateTiddler_2##details-state">
* If the text reference contains an index, this works in any case.
** Check $:/state/myDetailsStateTiddler_2
** Maybe you want to set it’s tiddler’s type manually. (Delete this tiddler and see what happens.)
</$details>
!!! Details with Style and Class
<$details field="caption" open="no" class="success" >
* Summary = field "caption" from this tiddler (Test new stuff)
* class="success" => summary with green background
* State is not saved.
** When you close and reopen this tiddler, it will allways be closed.
</$details>
<$details tiddler="myTempState" open="y" class="warning" state="myTempState">
* for the summary use the tiddler myTempState (field defaults to "title")
* class="warning" => summary with red background
* save state in the tiddler [[myTempState]] (field defaults to "text")
</$details>
<$details summary="''Local'' summary <b>wins</b>" tiddler="DetailsWidget" field="caption" class="notification" state="myTempState!!last-open">
* local summary wins over field "caption" of DetailsWidget
* class="notification"
* save state in field myTempState!!last-open
** note: same state tiddler as above
</$details>
<$details tiddler="Test Title" field="text" class="notification">
Here we use a tiddler’s text as summary:
{{Test Title}}
</$details>
!!! About the Author
Summary and details come from the tiddler FollowMe.
<$details tiddler="FollowMe">
''Thomas Elmiger''
{{FollowMe}}
</$details>
!! Introduction
The details widget creates an HTML 5 `<details>` section including a `<summary>`. Users can click on the summary to open and close a block containing more details.
<$button>
<$action-setfield accordion1="open" accordion2="open" accordion3="open" accordion4="open"/>
Open all
</$button>
<$button>
<$action-setfield accordion1="" accordion2="" accordion3="" accordion4=""/>
Close all
</$button>
<$details summary="What the W3C says about details" state="!!accordion1">
<<<
The [[details|http://w3c.github.io/html/interactive-elements.html#elementdef-details]] element represents a disclosure widget from which the user can obtain additional information or controls.
''NOTE:'' //The details element is not appropriate for footnotes. Please see [[§4.13.5 Footnotes|http://w3c.github.io/html/common-idioms-without-dedicated-elements.html#footnotes]] for details on how to mark up footnotes.//
The first [[summary|http://w3c.github.io/html/interactive-elements.html#elementdef-summary]] element child of the element, if any, represents the summary or legend of the details. If there is no child summary element, the user agent should provide its own legend (e.g., "Details").
<<< [[W3C on Github|http://w3c.github.io/html/interactive-elements.html#the-details-element]]
</$details>
<$details summary="Compare the RevealWidget and the DeatilsWidget" state="!!accordion2">
The RevealWidget can be used in similar ways, it hides or shows its content depending upon the value of a [[state tiddler|StateTiddlers]]. It is worth noting that:
* The DetailsWidget in its most simple form is independet from a state tiddler. It’s open or closed state falls back to the original state whenever a tiddler or wiki ist refreshed in the browser.
* Without a state reference, content can be revealed instantaneous because it is the browser alone that shows or hides it. No TiddlyWiki rendering is needed.
* However you can optionally use a //state// reference: a tiddler, field or index that will be updated automagically every time when details is opened or closed. The referenced text must be "open" to show the details. The RevealWidget in contrast can check for any given text.
</$details>
<$details class="notification" summary="Missing Browser Support" state="!!accordion3">
* Microsoft has tried to implement details/summary in their ''Edge'' browser without success. In September 2018 it was listed with “Roadmap Priority: High — We intend to begin development soon.” – see their [[Platform status|https://developer.microsoft.com/en-us/microsoft-edge/platform/status/detailssummary/]].
* ''Internet Explorer'' in general and ''Opera Mini'' do not support details/summary.
* Other browsers might not support animation effects on opening or closing – one Android browser has problems with accessibility.
* Apple iOS mobile browsers lacked support of toggle events on details when this was developped, therefore we emulate it using click events. In mobile Safari this can have the side effect, that users must tap twice to open/close details or to activate links in details.
* See https://caniuse.com/#search=details for other browsers and updated information.
</$details>
<$details summary="What is needed to use and style the details widget" state="!!accordion4">
The author hopes that this handy widget will be part of the official plugin library at some time (and maybe in the core later). For the moment you will have to [[import the DetailsWidget plugin|https://tid.li/tw5/plugins.html]] or drag these links over to your wiki:
!!! Details Components
* the widget: $:/plugins/telmiger/details/details.js
* the styles: $:/plugins/telmiger/details/details.css
* the colours: $:/plugins/telmiger/details/colours.css
''Important:'' This solution worked for me and for others, but I am not a javascript expert! So ''do yourself a favour and save a backup'' of your wiki first. After importing you will have to reload so the widget’s script can take effect.
{{!!widget-author}}
</$details>
<$button>
<$action-setfield accordion1="open" accordion2="open" accordion3="open" accordion4="open"/>
Open all
</$button>
<$button>
<$action-setfield accordion1="" accordion2="" accordion3="" accordion4=""/>
Close all
</$button>
!! Content and Attributes
How the content of the `<$details>` widget is displayed depends on the parameters shown in the following table.
|!Parameter |!Description |
|summary |Optional text to display as summary. Wins over field (see below). |
|open |Optional initial state, set to "open" to show details on load. Defaults to "". |
|state |An optional TextReference containing the state. Wins over open. |
|field |Optionally, the summary is taken from the field with this name in a given tiddler. Defaults to "title". |
|tiddler |Optional title of a tiddler to watch, connected to field. Defaults to current tiddler. |
|class |Optional CSS classes to be assigned to the details tag. Predefined: "notification", "warning", "success"|
!! Examples
* [[Details Basic Examples]]
* [[Details Advanced Examples]] – including examples with state reference
!! More
<$details summary="What details could be useful for">
!!!! Here are some ideas
* Create a simple accordion as seen at the top of this page.
* List tiddlers and give users the possibility to see their contents immediately.
* Open a drawing canvas (image tiddler in edit mode)
* Show a variant/alternative (e.g. a visualisation)
</$details>
!iOS/iPadOS의 Edge 브라우저를 위한 도움말
----
TiddlyWiki5를 구동하는 웹사이트를 애플의 모바일기기에서 구동되는 Microsoft Edge브라우저를 통해 접속 할 경우 열린탭 보기를 눌렀다가 다시 탭을 선택해 사이트로 돌아오면 자바스크립트 에러 메시지가 뜹니다. TiddlyWiki의 어떤 부분이 iOS에서 허용하지 않는 작업을 시도하려고 했던 문제인 것 같습니다. 간단하게 테스트 해본 결과 iOS 15.0.2를 구동하는 아이폰에서의 테스트 결과 Mozilla Firefox, Google Chrome, Apple Safari 그리고 Duckduckgo Browser에서는 아무런 문제를 발견할 수 없었습니다.(테스트를 해본 결과 iPad에서도 열린탭 보기를 눌렀다 사이트로 돌아오거나 열려있는 다른 탭으로 전환했다 다시 돌아오면 해당 에러 메시지가 뜹니다.) 자세한 원인은 알 수 없지만 iOS에서만 발생하는 문제로 추정되며 그 중에서도 TiddlyWiki를 기반으로 하는 사이트의 경우에는 오직 Edge 브라우저에서만 발생되는 문제인것 같습니다.
현재 TiddlyWiki의 버그제보 코너에 제보는 해 놓은 상태이지만 빠른 시간내에 해결될 문제로 보이지는 않습니다. 따라서 안타깝지만 iOS/iPadOS에서 Edge 브라우저를 사용하신다면 마음의뜰 및 여타 TiddlyWiki 사이트 접속시에는 다른 브라우저를 사용해 주세요.
> 우선 애플의 모바일기기에서 티들리위키를 편집하려면 Quine라는 유료 앱을 구입하여야 합니다. 제가 살때는 4천원대였는데 현재는 5천원대로 가격이 올랐습니다만 꼭 애플의 모바일기기에서 티들리위키를 수정하고 싶으시다면 방법이 없습니다.<br>
* iOS/iPadOS에서는 Working Copy라는 앱이 가장 강력합니다. 하지만 강력한 만큼 비용도 강력합니다. 기본적인 설치는 무료이나 깃허브에 변경된 사항을 업로드(커밋 + 푸시)해주는 기능은 유료인듯 합니다. 25,000원이라는 가격이 감당 되시는 분들은 해당 앱을 사용하십시오. [[링크 참조|https://jagtalon.com/2020/07/05/working-with-tiddlywiki-on-ios/]] [[Working Copy사용법|iOS/iPadOS에서 설정법/Working Copy]]
* 유료앱을 굳이 써야할 필요성을 못느끼시거나 가격이 부담된다면 무료앱을 쓰는 방법도 있습니다. SpckEditor라는 앱입니다. 앱스토어에서 검색후 설치하시면 됩니다. (참고로 안드로이드에서도 사용 가능한 앱입니다.)
! 기본 설정
> 이 방법은 유료앱 2개를 이용하는 방법입니다. 유료앱을 두개씩이나 구입하기 어려운 분들은 [[iOS/iPadOS에서 설정법]] 코너를 참고하세요.
>이 방법은 [[링크|https://jagtalon.com/2020/07/05/working-with-tiddlywiki-on-ios/]]를 통해 알게 되었습니다. 감사드립니다!
> Quine 2앱 : ₩5,900 (2021년 12월 기준), Working Copy앱 : 앱 자체는 무료, 앱 내 구입 ₩25,000 (2021년 12월 기준)
! 기본 설정
1) 아이폰과 아이패드에서 깃허브 동기화 기능을 지원하는 [[Working Copy|https://workingcopyapp.com/]]앱을 설치해 줍니다. 참고로 고급기능을 쓰려면 결제를 해야 하지만 무료기능만으로도 충분합니다.
2) (아이폰 기준) 앱 실행 후 화면 우측 상단의 + 버튼을 눌러줍니다.<br>
3) 화면에서 Github를 선택하고 Sign In을 눌러 로그인을 해 줍니다.<br>
4) 로그인이 성공되었다면 깃허브상에 생성된 리포지토리(저장소)의 리스트들이 표시될 것입니다. 이 중 사이트를 만드는 공간으로 사용하고자 하는 곳을 선택합니다.<br>
5) 화면상에서 아무것도 건드리지 마시고 Done을 눌러주세요.<br>
6) 이제 앱의 메인화면에 추가한 저장소가 표시됩니다. 이를 눌러주시고 목록에서 아래로 당겼다 놓는 제스쳐로 동기화를 해줍니다.(동기화할 데이터의 양과 갯수에 따라 시간은 차이가 있으며 앱의 검색창 아래 부분에 [[프로그래스바|https://www.google.com/search?q=%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EC%8A%A4%EB%B0%94&newwindow=1&client=firefox-b-d&sxsrf=AOaemvJN3lYKNTJTQNnqnsGEnoY7dvvg4Q:1635296904973&source=lnms&tbm=isch&sa=X&ved=2ahUKEwin1P3Ys-nzAhVQx2EKHTGTDt4Q_AUoAXoECAEQAw&biw=1920&bih=919&dpr=1]]가 표시되면서 진행률을 보여줍니다.<br>
7) 위 6번까지의 단계가 완료되면 깃허브와 내 아이폰(아이패드)와의 동기화는 잘 된것입니다.<br>
8) 이제 티들리위키를 편집하기 위한 유료앱인 [[Quine 2|https://apps.apple.com/kr/app/quine-2/id1450128957]]앱을 구입후 설치해 줍니다. 하지만 앱스토어에 올라온 유일한 티들리위키 편집앱이므로 대안이 없습니다.<br>
! 사용하기
1) 위의 6번까지 완료했다면 파일앱 -> 둘러보기에 Working Copy 항목이 생깁니다. (만일 생기지 않는다면 화면 우측 상단의 … 버튼을 눌러서 '편집'을 누르시고 Working Copy 옆의 스위치를 활성화 해주세요. 그리고 '완료'를 누릅니다.) <br>
2) Quine 2앱을 열면 파일앱과 같은 화면이 나옵니다. 거기서 둘러보기를 눌러서 'Working Copy'를 선택하면 위 6번에 추가된 저장소가 표시됩니다. 해당 저장소를 눌러줍니다.<br>
3) 기존에 만들어서 업로드 해 놓으신 파일(index.html 등)이 있다면 해당 파일을 열어주시고 없다면 +를 눌러 새롭게 하나 파일을 만들어 줍니다. (이후 파일이름은 index.html로 바꾸어 주세요.)<br>
4) 파일을 열면 위키가 표시됩니다. 이때 화면 우측 상단에 경고표시가 하나 뜹니다. 읽고 쓰는 권한을 부여해야 한다는 내용입니다. 이 경고표시를 누르고 나오는 알림에서 Grant Permissions을 누르고 해당 파일이 위치한 Working Copy 디렉터리 상에서의 저장소를 선택해 주고 '완료'를 눌러주세요.<br>
5) 위키의 내용 수정 후 화면상의 '저장' 버튼을 누르면 저장이 됩니다. 아이패드의 경우는 ⌘(커멘드키) + S를 누르면 저장이 됩니다. (Windows 방식의 키보드를 사용하신다면 Ctrl(컨트롤)키와 S키를 눌러주세요.)<br>
6) 그리고 화면 상단 좌측의 < 버튼을 눌러 파일 리스트로 되돌아 갑니다.<br>
7) 방금 수정한 파일을 길게 눌러 메뉴를 표시해 준뒤 'Commit'을 눌러주면 웹상으로 변경점이 반영됩니다.<br>
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
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="generator" content="TiddlyWiki" />
<meta name="tiddlywiki-version" content="5.2.1-prerelease" />
<meta name="format-detection" content="telephone=no">
<link id="faviconLink" rel="shortcut icon" href="favicon.ico">
<title>Refnotes 1.7.3
— references, citations, footnotes and abbreviations in Tiddlywiki
</title>
<div id="styleArea">
<style data-tiddler-title="$:/boot/boot.css" data-tiddler-type="text/css" type="text/css">/*
Basic styles used before we boot up the parsing engine
*/
/*
Error message and password prompt
*/
.tc-error-form {
font-family: sans-serif;
color: #fff;
z-index: 20000;
position: fixed;
background-color: rgb(255, 75, 75);
border: 8px solid rgb(255, 0, 0);
border-radius: 8px;
width: 50%;
margin-left: 25%;
margin-top: 4em;
padding: 0 2em 1em 2em;
}
.tc-error-form h1 {
text-align: center;
}
.tc-error-prompt {
text-align: center;
color: #000;
}
.tc-error-message {
overflow: auto;
max-height: 40em;
padding-right: 1em;
margin: 1em 0;
white-space: pre-line;
}
.tc-password-wrapper {
font-family: sans-serif;
z-index: 20000;
position: fixed;
text-align: center;
width: 200px;
top: 4em;
left: 50%;
margin-left: -144px; /* - width/2 - paddingHorz/2 - border */
padding: 16px 16px 16px 16px;
border-radius: 8px;
}
.tc-password-wrapper {
color: #000;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
background-color: rgb(197, 235, 183);
border: 8px solid rgb(164, 197, 152);
}
.tc-password-wrapper form {
text-align: left;
}
.tc-password-wrapper h1 {
font-size: 16px;
line-height: 20px;
padding-bottom: 16px;
}
.tc-password-wrapper input {
width: 100%;
}
</style>
</div>
<style type="text/css">
.tc-sidebar-header {
text-shadow: 0 1px 0 rgba(255,255,255, 0.8);
}.tc-tiddler-info {
-webkit-box-shadow: inset 1px 2px 3px rgba(0,0,0,0.1);
-moz-box-shadow: inset 1px 2px 3px rgba(0,0,0,0.1);
box-shadow: inset 1px 2px 3px rgba(0,0,0,0.1);
}@media screen {
.tc-tiddler-frame {
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
}
}@media (max-width: 959px) {
.tc-tiddler-frame {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
}.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {
-webkit-transition: fill 150ms ease-in-out;
-moz-transition: fill 150ms ease-in-out;
transition: fill 150ms ease-in-out;
}.tc-tiddler-controls button.tc-selected,
.tc-page-controls button.tc-selected {
-webkit-filter: drop-shadow(0px -1px 2px rgba(0,0,0,0.25));
-moz-filter: drop-shadow(0px -1px 2px rgba(0,0,0,0.25));
filter: drop-shadow(0px -1px 2px rgba(0,0,0,0.25));
}.tc-tiddler-frame input.tc-edit-texteditor {
-webkit-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
}.tc-edit-tags {
-webkit-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
}.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
border: none;
outline: none;
}textarea.tc-edit-texteditor {
font-family: ;
}canvas.tc-edit-bitmapeditor {
-webkit-box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
}.tc-drop-down {
border-radius: 4px;
-webkit-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
}.tc-block-dropdown {
border-radius: 4px;
-webkit-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
}.tc-modal {
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
-moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
box-shadow: 0 3px 7px rgba(0,0,0,0.3);
}.tc-modal-footer {
border-radius: 0 0 6px 6px;
-webkit-box-shadow: inset 0 1px 0 #fff;
-moz-box-shadow: inset 0 1px 0 #fff;
box-shadow: inset 0 1px 0 #fff;
;
}.tc-alert {
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.6);
-moz-box-shadow: 0 3px 7px rgba(0,0,0,0.6);
box-shadow: 0 3px 7px rgba(0,0,0,0.6);
}.tc-notification {
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
-moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
box-shadow: 0 3px 7px rgba(0,0,0,0.3);
text-shadow: 0 1px 0 rgba(255,255,255, 0.8);
}.tc-sidebar-lists .tc-tab-set .tc-tab-divider {
border-top: none;
height: 1px;
background-image: linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -o-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -moz-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -ms-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {
background-image: linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -o-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -moz-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -ms-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {
background-image: linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -o-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -moz-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -ms-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
}.tc-message-box img {
-webkit-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
-moz-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
}.tc-plugin-info {
-webkit-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
-moz-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
}
/*
** Start with the normalize CSS reset, and then belay some of its effects
*//*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
/*
Document
========
*/
/**
Use a better box model (opinionated).
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
/**
Use a more readable tab size (opinionated).
*/
:root {
-moz-tab-size: 4;
tab-size: 4;
}
/**
1. Correct the line height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/*
Sections
========
*/
/**
Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
*/
body {
font-family:
system-ui,
-apple-system, /* Firefox supports this but not yet `system-ui` */
'Segoe UI',
Roboto,
Helvetica,
Arial,
sans-serif,
'Apple Color Emoji',
'Segoe UI Emoji';
}
/*
Grouping content
================
*/
/**
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
*/
hr {
height: 0; /* 1 */
color: inherit; /* 2 */
}
/*
Text-level semantics
====================
*/
/**
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr[title] {
text-decoration: underline dotted;
}
/**
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
2. Correct the odd 'em' font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family:
ui-monospace,
SFMono-Regular,
Consolas,
'Liberation Mono',
Menlo,
monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
Prevent 'sub' and 'sup' elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
Tabular data
============
*/
/**
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
*/
table {
text-indent: 0; /* 1 */
border-color: inherit; /* 2 */
}
/*
Forms
=====
*/
/**
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
Remove the inheritance of text transform in Edge and Firefox.
1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}
/**
Remove the inner border and padding in Firefox.
*/
::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
Restore the focus styles unset by the previous rule.
*/
:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
Remove the additional ':invalid' styles in Firefox.
See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737
*/
:-moz-ui-invalid {
box-shadow: none;
}
/**
Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.
*/
legend {
padding: 0;
}
/**
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/**
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/**
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to 'inherit' in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/*
Interactive
===========
*/
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
*, input[type="search"] {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}input[type="search"] {
outline-offset: initial;
}html button {
line-height: 1.2;
color: ;
fill: ;
background: ;
border-color: ;
}button:disabled svg {
fill: #bbb;
}/*
** Basic element styles
*/html, body {
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;;
text-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}html:-webkit-full-screen {
background-color: #f4f4f4;
}body.tc-body {
font-size: 14px;
line-height: 20px;
word-wrap: break-word;
color: #333333;
background-color: #f4f4f4;
fill: #333333;
}/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/h1 {
font-size: 2em;
}h1, h2, h3, h4, h5, h6 {
line-height: 1.2;
font-weight: normal;
}pre {
display: block;
margin-top: 1em;
margin-bottom: 1em;
word-break: normal;
word-wrap: break-word;
white-space: pre-wrap;
background-color: #f5f5f5;
border: 1px solid #cccccc;
padding: 0 3px 2px;
border-radius: 3px;
font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
}code {
color: #dd1144;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
white-space: pre-wrap;
padding: 0 3px 2px;
border-radius: 3px;
font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
}blockquote {
border-left: 5px solid #bbb;
margin-left: 25px;
padding-left: 10px;
quotes: "\201C""\201D""\2018""\2019";
}blockquote > div {
margin-top: 1em;
margin-bottom: 1em;
}blockquote.tc-big-quote {
font-family: Georgia, serif;
position: relative;
background: #f5f5f5;
border-left: none;
margin-left: 50px;
margin-right: 50px;
padding: 10px;
border-radius: 8px;
}blockquote.tc-big-quote cite:before {
content: "\2014 \2009";
}blockquote.tc-big-quote:before {
font-family: Georgia, serif;
color: #bbb;
content: open-quote;
font-size: 8em;
line-height: 0.1em;
margin-right: 0.25em;
vertical-align: -0.4em;
position: absolute;
left: -50px;
top: 42px;
}blockquote.tc-big-quote:after {
font-family: Georgia, serif;
color: #bbb;
content: close-quote;
font-size: 8em;
line-height: 0.1em;
margin-right: 0.25em;
vertical-align: -0.4em;
position: absolute;
right: -80px;
bottom: -20px;
}dl dt {
font-weight: bold;
margin-top: 6px;
}button, textarea, input, select {
outline-color: #5778d8;
}textarea,
input[type=text],
input[type=search],
input[type=""],
input:not([type]) {
color: #333333;
background: #ffffff;
}input[type="checkbox"] {
vertical-align: middle;
}input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-results-button,
input[type="search"]::-webkit-search-results-decoration {
-webkit-appearance:none;
}.tc-muted {
color: #bbb;
}svg.tc-image-button {
padding: 0px 1px 1px 0px;
}.tc-icon-wrapper > svg {
width: 1em;
height: 1em;
}kbd {
display: inline-block;
padding: 3px 5px;
font-size: 0.8em;
line-height: 1.2;
color: #333333;
vertical-align: middle;
background-color: #ffffff;
border: solid 1px #bbb;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}::selection {
background-color: Highlight;
color: HighlightText;
background-color: ;
color: ;
}/*
Markdown likes putting code elements inside pre elements
*/
pre > code {
padding: 0;
border: none;
background-color: inherit;
color: inherit;
}table {
border: 1px solid #dddddd;
width: auto;
max-width: 100%;
caption-side: bottom;
margin-top: 1em;
margin-bottom: 1em;
/* next 2 elements needed, since normalize 8.0.1 */
border-collapse: collapse;
border-spacing: 0;
}table th, table td {
padding: 0 7px 0 7px;
border-top: 1px solid #dddddd;
border-left: 1px solid #dddddd;
}table thead tr td, table th {
background-color: #f0f0f0;
font-weight: bold;
}table tfoot tr td {
background-color: #a8a8a8;
}.tc-csv-table {
white-space: nowrap;
}.tc-tiddler-frame img,
.tc-tiddler-frame svg,
.tc-tiddler-frame canvas,
.tc-tiddler-frame embed,
.tc-tiddler-frame iframe {
max-width: 100%;
}.tc-tiddler-body > embed,
.tc-tiddler-body > iframe {
width: 100%;
height: 600px;
}/*
** Links
*/button.tc-tiddlylink,
a.tc-tiddlylink {
text-decoration: none;
font-weight: 500;
color: #5778d8;
-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */
}.tc-sidebar-lists a.tc-tiddlylink {
color: #999999;
}.tc-sidebar-lists a.tc-tiddlylink:hover {
color: #444444;
}button.tc-tiddlylink:hover,
a.tc-tiddlylink:hover {
text-decoration: underline;
}a.tc-tiddlylink-resolves {
}a.tc-tiddlylink-shadow {
font-weight: bold;
}a.tc-tiddlylink-shadow.tc-tiddlylink-resolves {
font-weight: normal;
}a.tc-tiddlylink-missing {
font-style: italic;
}a.tc-tiddlylink-external {
text-decoration: underline;
color: #0000ee;
background-color: inherit;
}a.tc-tiddlylink-external:visited {
color: #0000aa;
background-color: inherit;
}a.tc-tiddlylink-external:hover {
color: inherit;
background-color: inherit;
}.tc-drop-down a.tc-tiddlylink:hover {
color: #ffffff;
}/*
** Drag and drop styles
*/.tc-tiddler-dragger {
position: relative;
z-index: -10000;
}.tc-tiddler-dragger-inner {
position: absolute;
top: -1000px;
left: -1000px;
display: inline-block;
padding: 8px 20px;
font-size: 16.9px;
font-weight: bold;
line-height: 20px;
color: #ffffff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 1);
white-space: nowrap;
vertical-align: baseline;
background-color: #333333;
border-radius: 20px;
}.tc-tiddler-dragger-cover {
position: absolute;
background-color: #f4f4f4;
}.tc-page-container > .tc-dropzone {
min-height: 100vh;
}.tc-dropzone {
position: relative;
}.tc-dropzone.tc-dragover:before {
z-index: 10000;
display: block;
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgba(0,200,0,0.7);
text-align: center;
content: "Drop here (or use the 'Escape' key to cancel)";
}.tc-droppable > .tc-droppable-placeholder {
display: none;
}.tc-droppable.tc-dragover > .tc-droppable-placeholder {
display: block;
border: 2px dashed rgba(0,200,0,0.7);
}.tc-draggable {
cursor: move;
}.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,
.tc-links-draggable-list .tc-droppable-placeholder {
line-height: 2em;
height: 2em;
}.tc-sidebar-tab-open-item {
position: relative;
}.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {
font-size: 0.7em;
fill: #bbb;
}/*
** Plugin reload warning
*/.tc-plugin-reload-warning {
z-index: 1000;
display: block;
position: fixed;
top: 0;
left: 0;
right: 0;
background: #ffe476;
text-align: center;
}/*
** Buttons
*/button svg, button img, label svg, label img {
vertical-align: middle;
}.tc-btn-invisible {
padding: 0;
margin: 0;
background: none;
border: none;
cursor: pointer;
color: #333333;
fill: #333333;
}button:disabled.tc-btn-invisible {
cursor: default;
color: #bbb;
}.tc-btn-boxed {
font-size: 0.6em;
padding: 0.2em;
margin: 1px;
background: none;
border: 1px solid #cccccc;
border-radius: 0.25em;
}html body.tc-body .tc-btn-boxed svg {
font-size: 1.6666em;
}.tc-btn-boxed:hover {
background: #bbb;
color: #ffffff;
}html body.tc-body .tc-btn-boxed:hover svg {
fill: #ffffff;
}.tc-btn-rounded {
font-size: 0.5em;
line-height: 2;
padding: 0em 0.3em 0.2em 0.4em;
margin: 1px;
border: 1px solid #bbb;
background: #bbb;
color: #ffffff;
border-radius: 2em;
}html body.tc-body .tc-btn-rounded svg {
font-size: 1.6666em;
fill: #ffffff;
}.tc-btn-rounded:hover {
border: 1px solid #bbb;
background: #ffffff;
color: #bbb;
}html body.tc-body .tc-btn-rounded:hover svg {
fill: #bbb;
}.tc-btn-icon svg {
height: 1em;
width: 1em;
fill: #bbb;
}.tc-btn-text {
margin-left: 7px;
}/* used for documentation "fake" buttons */
.tc-btn-standard {
line-height: 1.8;
color: #667;
background-color: #e0e0e0;
border: 1px solid #888;
padding: 2px 1px 2px 1px;
margin: 1px 4px 1px 4px;
}.tc-btn-big-green {
display: inline-block;
padding: 8px;
margin: 4px 8px 4px 8px;
background: #34c734;
color: #ffffff;
fill: #ffffff;
border: none;
border-radius: 2px;
font-size: 1.2em;
line-height: 1.4em;
text-decoration: none;
}.tc-btn-big-green svg,
.tc-btn-big-green img {
height: 2em;
width: 2em;
vertical-align: middle;
fill: #ffffff;
}.tc-primary-btn {
background: #5778d8;
}.tc-sidebar-lists input {
color: #333333;
}.tc-sidebar-lists button {
color: #333333;
fill: #333333;
}.tc-sidebar-lists button.tc-btn-mini {
color: #c0c0c0;
}.tc-sidebar-lists button.tc-btn-mini:hover {
color: #444444;
}.tc-sidebar-lists button small {
color: #333333;
}button svg.tc-image-button, button .tc-image-button img {
height: 1em;
width: 1em;
}.tc-unfold-banner {
position: absolute;
padding: 0;
margin: 0;
background: none;
border: none;
width: 100%;
width: calc(100% + 2px);
margin-left: -43px;
text-align: center;
border-top: 2px solid #f8f8f8;
margin-top: 4px;
}.tc-unfold-banner:hover {
background: #f8f8f8;
border-top: 2px solid #dddddd;
}.tc-unfold-banner svg, .tc-fold-banner svg {
height: 0.75em;
fill: #cccccc;
}.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {
fill: #888888;
}.tc-fold-banner {
position: absolute;
padding: 0;
margin: 0;
background: none;
border: none;
width: 23px;
text-align: center;
margin-left: -35px;
top: 6px;
bottom: 6px;
}.tc-fold-banner:hover {
background: #f8f8f8;
}@media (max-width: 959px) {.tc-unfold-banner {
position: static;
width: calc(100% + 59px);
}.tc-fold-banner {
width: 16px;
margin-left: -16px;
font-size: 0.75em;
}}/*
** Tags and missing tiddlers
*/.tc-tag-list-item {
position: relative;
display: inline-block;
}.tc-tags-wrapper {
margin: 4px 0 14px 0;
}.tc-tags-wrapper .tc-tag-list-item {
margin-right: 7px;
}.tc-missing-tiddler-label {
font-style: italic;
font-weight: normal;
display: inline-block;
font-size: 11.844px;
line-height: 14px;
white-space: nowrap;
vertical-align: baseline;
}.tc-block-tags-dropdown > .tc-btn-invisible:hover {
background-color: #5778d8;
}button.tc-tag-label, span.tc-tag-label {
display: inline-block;
padding: 0.16em 0.7em;
font-size: 0.9em;
font-weight: normal;
line-height: 1.2em;
color: #ffffff;
white-space: nowrap;
vertical-align: baseline;
background-color: #ec6;
border-radius: 1em;
}.tc-sidebar-scrollable .tc-tag-label {
text-shadow: none;
}.tc-untagged-separator {
width: 10em;
left: 0;
margin-left: 0;
border: 0;
height: 1px;
background: #d8d8d8;
}button.tc-untagged-label {
background-color: #999999;
}.tc-tag-label svg, .tc-tag-label img {
height: 1em;
width: 1em;
margin-right: 3px;
margin-bottom: 1px;
vertical-align: bottom;
}.tc-edit-tags button.tc-remove-tag-button svg {
font-size: 0.7em;
vertical-align: middle;
}.tc-tag-manager-table .tc-tag-label {
white-space: normal;
}.tc-tag-manager-tag {
width: 100%;
}button.tc-btn-invisible.tc-remove-tag-button {
outline: none;
}.tc-tag-button-selected,
.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {
background-color: #5778d8;
color: #ffffff;
}/*
** Page layout
*/.tc-topbar {
position: fixed;
z-index: 1200;
}.tc-topbar-left {
left: 29px;
top: 5px;
}.tc-topbar-right {
top: 5px;
right: 29px;
}@media (max-width: 959px) {.tc-topbar-right {
right: 10px;
}}.tc-topbar button {
padding: 8px;
}.tc-topbar svg {
fill: #bbb;
}.tc-topbar button:hover svg {
fill: #333333;
}@media (max-width: 959px) {.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {
transform: rotate(-90deg);
}}.tc-sidebar-header {
color: #acacac;
fill: #acacac;
}.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {
font-weight: normal;
}.tc-sidebar-header .tc-sidebar-lists p {
margin-top: 3px;
margin-bottom: 3px;
}.tc-sidebar-header .tc-missing-tiddler-label {
color: #acacac;
}.tc-advanced-search input {
width: 60%;
}.tc-search a svg {
width: 1.2em;
height: 1.2em;
vertical-align: middle;
}.tc-page-controls {
margin-top: 14px;
font-size: 1.5em;
}.tc-page-controls .tc-drop-down {
font-size: 1rem;
}.tc-page-controls button {
margin-right: 0.5em;
}.tc-page-controls a.tc-tiddlylink:hover {
text-decoration: none;
}.tc-page-controls img {
width: 1em;
}.tc-page-controls svg {
fill: #aaaaaa;
}.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {
fill: #000000;
}.tc-sidebar-lists .tc-menu-list-item {
white-space: nowrap;
}.tc-menu-list-count {
font-weight: bold;
}.tc-menu-list-subitem {
padding-left: 7px;
}.tc-story-river {
position: relative;
}@media (max-width: 959px) {.tc-sidebar-header {
padding: 14px;
min-height: 32px;
margin-top: 0px;
transition: min-height 400ms ease-in-out, padding-top 400ms ease-in-out, padding-bottom 400ms ease-in-out;
}
.tc-story-river {
position: relative;
padding: 0;
}
}@media (min-width: 960px) {.tc-message-box {
margin: 21px -21px 21px -21px;
}.tc-sidebar-scrollable {
position: fixed;
top: 0px;
left: 770px;
bottom: 0;
right: 0;
overflow-y: auto;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
margin: 0 0 0 -42px;
padding: 71px 0 28px 42px;
}html[dir="rtl"] .tc-sidebar-scrollable {
left: auto;
right: 770px;
}.tc-story-river {
position: relative;
left: 0px;
top: 0px;
width: 770px;
padding: 42px 42px 42px 42px;
}.tc-story-river.tc-static-story-river {
margin-right: 0;
padding-right: 42px;
}}@media print {body.tc-body {
background-color: transparent;
}.tc-sidebar-header, .tc-topbar {
display: none;
}.tc-story-river {
margin: 0;
padding: 0;
}.tc-story-river .tc-tiddler-frame {
margin: 0;
border: none;
padding: 0;
}
}/*
** Tiddler styles
*/.tc-tiddler-frame {
position: relative;
margin-bottom: 28px;
background-color: #ffffff;
border: 1px solid #ffffff;
}
.tc-tiddler-info {
overflow: hidden;
padding: 14px 42px 14px 42px;
background-color: #f8f8f8;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}.tc-tiddler-info p {
margin-top: 3px;
margin-bottom: 3px;
}.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {
background-color: #f8f8f8;
border-bottom: 1px solid #f8f8f8;
}@media (max-width: 959px) {.tc-tiddler-info {
padding: 14px 14px 14px 14px;
}}.tc-view-field-table {
width: 100%;
}.tc-view-field-name {
width: 1%; /* Makes this column be as narrow as possible */
text-align: right;
font-style: italic;
font-weight: normal;
}.tc-view-field-value {
word-break: break-all;
}@media (max-width: 959px) {
.tc-tiddler-frame {
padding: 14px 14px 14px 14px;
margin-bottom: .5em;
}.tc-tiddler-info {
margin: 0 -14px 0 -14px;
}
}@media (min-width: 960px) {
.tc-tiddler-frame {
padding: 28px 42px 42px 42px;
width: 686px;
border-radius: 2px;
}.tc-tiddler-info {
margin: 0 -42px 0 -42px;
}
}.tc-site-title,
.tc-titlebar {
font-weight: normal;
font-size: 2.35em;
line-height: 1.35em;
color: #182955;
margin: 0;
}.tc-site-title {
color: #182955;
}.tc-tiddler-title-icon {
vertical-align: middle;
margin-right: .1em;
}.tc-system-title-prefix {
color: #bbb;
}.tc-titlebar h2 {
font-size: 1em;
display: inline;
}.tc-titlebar img {
height: 1em;
}.tc-subtitle {
font-size: 0.9em;
color: #c0c0c0;
font-weight: normal;
}.tc-subtitle .tc-tiddlylink {
margin-right: .3em;
}.tc-tiddler-missing .tc-title {
font-style: italic;
font-weight: normal;
}.tc-tiddler-frame .tc-tiddler-controls {
float: right;
}.tc-tiddler-controls .tc-drop-down {
font-size: 0.6em;
}.tc-tiddler-controls .tc-drop-down .tc-drop-down {
font-size: 1em;
}.tc-tiddler-controls > span > button,
.tc-tiddler-controls > span > span > button,
.tc-tiddler-controls > span > span > span > button {
vertical-align: baseline;
margin-left:5px;
}.tc-tiddler-controls button svg, .tc-tiddler-controls button img,
.tc-search button svg, .tc-search a svg {
fill: #cccccc;
}.tc-tiddler-controls button svg, .tc-tiddler-controls button img {
height: 0.75em;
}.tc-search button svg, .tc-search a svg {
height: 1.2em;
width: 1.2em;
margin: 0 0.25em;
}.tc-tiddler-controls button.tc-selected svg,
.tc-page-controls button.tc-selected svg {
fill: #444444;
}.tc-tiddler-controls button.tc-btn-invisible:hover svg,
.tc-search button:hover svg, .tc-search a:hover svg {
fill: #888888;
}@media print {
.tc-tiddler-controls {
display: none;
}
}.tc-tiddler-help { /* Help prompts within tiddler template */
color: #bbb;
margin-top: 14px;
}.tc-tiddler-help a.tc-tiddlylink {
color: #888888;
}.tc-tiddler-frame .tc-edit-texteditor {
width: 100%;
margin: 4px 0 4px 0;
}.tc-tiddler-frame input.tc-edit-texteditor,
.tc-tiddler-frame textarea.tc-edit-texteditor,
.tc-tiddler-frame iframe.tc-edit-texteditor {
padding: 3px 3px 3px 3px;
border: 1px solid #cccccc;
line-height: 1.3em;
-webkit-appearance: none;
font-family: ;
}.tc-tiddler-frame input.tc-edit-texteditor,
.tc-tiddler-frame textarea.tc-edit-texteditor {
background-color: #f8f8f8;
}.tc-tiddler-frame iframe.tc-edit-texteditor {
background-color: #ffffff;
}.tc-tiddler-frame .tc-binary-warning {
width: 100%;
height: 5em;
text-align: center;
padding: 3em 3em 6em 3em;
background: #ffe476;
border: 1px solid #b99e2f;
}canvas.tc-edit-bitmapeditor {
border: 6px solid #ffffff;
cursor: crosshair;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
margin-top: 6px;
margin-bottom: 6px;
}.tc-edit-bitmapeditor-width {
display: block;
}.tc-edit-bitmapeditor-height {
display: block;
}.tc-tiddler-body {
clear: both;
}.tc-tiddler-frame .tc-tiddler-body {
font-size: 15px;
line-height: 22px;
}.tc-titlebar, .tc-tiddler-edit-title {
overflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */
}html body.tc-body.tc-single-tiddler-window {
margin: 1em;
background: #ffffff;
}.tc-single-tiddler-window img,
.tc-single-tiddler-window svg,
.tc-single-tiddler-window canvas,
.tc-single-tiddler-window embed,
.tc-single-tiddler-window iframe {
max-width: 100%;
}/*
** Editor
*/.tc-editor-toolbar {
margin-top: 8px;
}.tc-editor-toolbar button {
vertical-align: middle;
background-color: #cccccc;
color: #444444;
fill: #444444;
border-radius: 4px;
padding: 3px;
margin: 2px 0 2px 4px;
}.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {
margin-left: 1px;
width: 1em;
border-radius: 8px;
}.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {
margin-left: 11px;
}.tc-editor-toolbar button.tc-selected {
background-color: #5778d8;
}.tc-editor-toolbar button svg {
width: 1.6em;
height: 1.2em;
}.tc-editor-toolbar button:hover {
background-color: #444444;
fill: #ffffff;
color: #ffffff;
}.tc-editor-toolbar .tc-text-editor-toolbar-more {
white-space: normal;
}.tc-editor-toolbar .tc-text-editor-toolbar-more button {
display: inline-block;
padding: 3px;
width: auto;
}.tc-editor-toolbar .tc-search-results {
padding: 0;
}.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down > p {
margin: 0;
padding: 0;
}.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down a.tc-tiddlylink {
font-weight: normal;
}/*
** Adjustments for fluid-fixed mode
*/@media (min-width: 960px) {}/*
** Toolbar buttons
*/.tc-page-controls svg.tc-image-new-button {
fill: ;
}.tc-page-controls svg.tc-image-options-button {
fill: ;
}.tc-page-controls svg.tc-image-save-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-info-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-edit-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-close-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-delete-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-cancel-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-done-button {
fill: ;
}/*
** Tiddler edit mode
*/.tc-tiddler-edit-frame em.tc-edit {
color: #bbb;
font-style: normal;
}.tc-edit-type-dropdown a.tc-tiddlylink-missing {
font-style: normal;
}.tc-type-selector .tc-edit-typeeditor {
width: auto;
}.tc-type-selector-dropdown-wrapper {
display: inline-block;
}.tc-type-selector-dropdown-wrapper {
min-width: calc(32ch + 4em);
}.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {
min-width: 32ch;
}.tc-edit-tags {
border: 1px solid #cccccc;
padding: 4px 8px 4px 8px;
}.tc-edit-add-tag {
display: inline-block;
}.tc-edit-add-tag .tc-add-tag-name input {
width: 50%;
}.tc-edit-add-tag .tc-keyboard {
display:inline;
}.tc-edit-tags .tc-tag-label {
display: inline-block;
}.tc-edit-tags-list {
margin: 14px 0 14px 0;
}.tc-remove-tag-button {
padding-left: 4px;
}.tc-tiddler-preview {
overflow: auto;
}.tc-tiddler-preview-preview {
float: right;
width: 49%;
border: 1px solid #cccccc;
margin: 4px 0 3px 3px;
padding: 3px 3px 3px 3px;
}.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {
width: 49%;
}.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {
max-width: 49%;
}.tc-edit-fields {
width: 100%;
}.tc-edit-fields.tc-edit-fields-small {
margin-top: 0;
margin-bottom: 0;
}.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {
border: none;
padding: 4px;
}.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {
background-color: #f0f4f0;
}.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {
background-color: #e0e8e0;
}.tc-edit-field-name {
text-align: right;
}.tc-edit-field-value input {
width: 100%;
}.tc-edit-field-remove {
}.tc-edit-field-remove svg {
height: 1em;
width: 1em;
fill: #bbb;
vertical-align: middle;
}.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {
width: auto;
}.tc-edit-field-add-name-wrapper {
display: inline-block;
}.tc-edit-field-add-value {
display: inline-block;
}@media (min-width: 960px) {.tc-edit-field-add-value {
width: 35%;
}}.tc-edit-field-add-button {
display: inline-block;
width: 10%;
}/*
** Tiddler editor dropzone
*/.tc-dropzone-editor {
position:relative;
}.tc-dropzone-editor.tc-dragover .tc-editor-toolbar::after{
z-index: 10000;
top:0;
left:0;
right:0;
height: 100%;
background: rgba(0,200,0,0.7);
content: "Drop here (or use the 'Escape' key to cancel)";
pointer-events: none;
position: absolute;
display: flex;
align-items: center;
justify-content: center;
background-color: #ffffff;
border: 4px dashed #999999;
font-weight: bold;
font-size: 150%;
opacity: 0.8;
color: #333333;
}.tc-editor-importpopup {
width: 100%;
height: 100%;
}.tc-editor-import {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #f5f5f5;
box-shadow: 2px 2px 10px #333333;
padding: 10px;
width: 96%;
border: 1px solid #cccccc;
text-align:center;
}.tc-editor-import img {
max-height: 500px;
}/*
** Storyview Classes
*/.tc-viewswitcher .tc-image-button {
margin-right: .3em;
}.tc-storyview-zoomin-tiddler {
position: absolute;
display: block;
width: 100%;
}@media (min-width: 960px) {.tc-storyview-zoomin-tiddler {
width: calc(100% - 84px);
}}/*
** Dropdowns
*/.tc-btn-dropdown {
text-align: left;
}.tc-btn-dropdown svg, .tc-btn-dropdown img {
height: 1em;
width: 1em;
fill: #bbb;
}.tc-drop-down-wrapper {
position: relative;
}.tc-drop-down {
min-width: 380px;
border: 1px solid #bbb;
background-color: #ffffff;
padding: 7px 0 7px 0;
margin: 4px 0 0 0;
white-space: nowrap;
text-shadow: none;
line-height: 1.4;
}.tc-drop-down .tc-drop-down {
margin-left: 14px;
}.tc-drop-down button svg, .tc-drop-down a svg {
fill: #333333;
}.tc-drop-down button:disabled svg {
fill: #bbb;
}.tc-drop-down button.tc-btn-invisible:hover svg {
fill: #ffffff;
}.tc-drop-down .tc-drop-down-info {
padding-left: 14px;
}.tc-drop-down p {
padding: 0 14px 0 14px;
}.tc-drop-down svg {
width: 1em;
height: 1em;
}.tc-drop-down img {
width: 1em;
}.tc-drop-down a, .tc-drop-down button {
display: block;
padding: 0 14px 0 14px;
width: 100%;
text-align: left;
color: #333333;
line-height: 1.4;
}.tc-drop-down .tc-tab-set .tc-tab-buttons button {
display: inline-block;
width: auto;
margin-bottom: 0px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}.tc-drop-down .tc-prompt {
padding: 0 14px;
}.tc-drop-down .tc-chooser {
border: none;
}.tc-drop-down .tc-chooser .tc-swatches-horiz {
font-size: 0.4em;
padding-left: 1.2em;
}.tc-drop-down .tc-file-input-wrapper {
width: 100%;
}.tc-drop-down .tc-file-input-wrapper button {
color: #333333;
}.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {
color: #ffffff;
background-color: #5778d8;
text-decoration: none;
}.tc-drop-down .tc-tab-buttons button {
background-color: #ececec;
}.tc-drop-down .tc-tab-buttons button.tc-tab-selected {
background-color: #fff;
border-bottom: 1px solid #fff;
}.tc-drop-down-bullet {
display: inline-block;
width: 0.5em;
}.tc-drop-down .tc-tab-contents a {
padding: 0 0.5em 0 0.5em;
}.tc-block-dropdown-wrapper {
position: relative;
}.tc-block-dropdown {
position: absolute;
min-width: 220px;
border: 1px solid #bbb;
background-color: #ffffff;
padding: 7px 0;
margin: 4px 0 0 0;
white-space: nowrap;
z-index: 1000;
text-shadow: none;
}.tc-block-dropdown.tc-search-drop-down {
margin-left: -12px;
}.tc-block-dropdown a {
display: block;
padding: 4px 14px 4px 14px;
}.tc-block-dropdown.tc-search-drop-down a {
display: block;
padding: 0px 10px 0px 10px;
}.tc-drop-down .tc-dropdown-item-plain,
.tc-block-dropdown .tc-dropdown-item-plain {
padding: 4px 14px 4px 7px;
}.tc-drop-down .tc-dropdown-item,
.tc-block-dropdown .tc-dropdown-item {
padding: 4px 14px 4px 7px;
color: #bbb;
}.tc-block-dropdown a.tc-tiddlylink:hover {
color: #ffffff;
background-color: #5778d8;
text-decoration: none;
}.tc-search-results {
padding: 0 7px 0 7px;
}.tc-image-chooser, .tc-colour-chooser {
white-space: normal;
}.tc-image-chooser a,
.tc-colour-chooser a {
display: inline-block;
vertical-align: top;
text-align: center;
position: relative;
}.tc-image-chooser a {
border: 1px solid #bbb;
padding: 2px;
margin: 2px;
width: 4em;
height: 4em;
}.tc-colour-chooser a {
padding: 3px;
width: 2em;
height: 2em;
vertical-align: middle;
}.tc-image-chooser a:hover,
.tc-colour-chooser a:hover {
background: #5778d8;
padding: 0px;
border: 3px solid #5778d8;
}.tc-image-chooser a svg,
.tc-image-chooser a img {
display: inline-block;
width: auto;
height: auto;
max-width: 3.5em;
max-height: 3.5em;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}/*
** Modals
*/.tc-modal-wrapper {
position: fixed;
overflow: auto;
overflow-y: scroll;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 900;
}.tc-modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1000;
background-color: #333333;
}.tc-modal {
z-index: 1100;
background-color: #ffffff;
border: 1px solid #999999;
}@media (max-width: 55em) {
.tc-modal {
position: fixed;
top: 1em;
left: 1em;
right: 1em;
}.tc-modal-body {
overflow-y: auto;
max-height: 400px;
max-height: 60vh;
}
}@media (min-width: 55em) {
.tc-modal {
position: fixed;
top: 2em;
left: 25%;
width: 50%;
}.tc-modal-body {
overflow-y: auto;
max-height: 400px;
max-height: 60vh;
}
}.tc-modal-header {
padding: 9px 15px;
border-bottom: 1px solid #eeeeee;
}.tc-modal-header h3 {
margin: 0;
line-height: 30px;
}.tc-modal-header img, .tc-modal-header svg {
width: 1em;
height: 1em;
}.tc-modal-body {
padding: 15px;
}.tc-modal-footer {
padding: 14px 15px 15px;
margin-bottom: 0;
text-align: right;
background-color: #f5f5f5;
border-top: 1px solid #dddddd;
}.tc-modal-prevent-scroll {
overflow: hidden;
}/*
** Centered modals
*/
.tc-modal-centered .tc-modal {
width: auto;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) !important;
}/*
** Notifications
*/.tc-notification {
position: fixed;
top: 14px;
right: 42px;
z-index: 1300;
max-width: 280px;
padding: 0 14px 0 14px;
background-color: #ffffdd;
border: 1px solid #999999;
}/*
** Tabs
*/.tc-tab-set.tc-vertical {
display: -webkit-flex;
display: flex;
}.tc-tab-buttons {
font-size: 0.85em;
padding-top: 1em;
margin-bottom: -2px;
}.tc-tab-buttons.tc-vertical {
z-index: 100;
display: block;
padding-top: 14px;
vertical-align: top;
text-align: right;
margin-bottom: inherit;
margin-right: -1px;
max-width: 33%;
-webkit-flex: 0 0 auto;
flex: 0 0 auto;
}.tc-tab-buttons button.tc-tab-selected {
color: #666666;
background-color: #ffffff;
border-left: 1px solid #d8d8d8;
border-top: 1px solid #d8d8d8;
border-right: 1px solid #d8d8d8;
}.tc-tab-buttons button {
color: #666666;
padding: 3px 5px 3px 5px;
margin-right: 0.3em;
font-weight: normal;
border: none;
background: inherit;
background-color: #d8d8d8;
border-left: 1px solid #cccccc;
border-top: 1px solid #cccccc;
border-right: 1px solid #cccccc;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}.tc-tab-buttons.tc-vertical button {
display: block;
width: 100%;
margin-top: 3px;
margin-right: 0;
text-align: right;
background-color: #d8d8d8;
border-left: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
border-right: none;
border-top-left-radius: 2px;
border-bottom-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}.tc-tab-buttons.tc-vertical button.tc-tab-selected {
background-color: #ffffff;
border-right: 1px solid #ffffff;
}.tc-tab-divider {
border-top: 1px solid #d8d8d8;
}.tc-tab-divider.tc-vertical {
display: none;
}.tc-tab-content {
margin-top: 14px;
}.tc-tab-content.tc-vertical {
display: inline-block;
vertical-align: top;
padding-top: 0;
padding-left: 14px;
border-left: 1px solid #cccccc;
-webkit-flex: 1 0 70%;
flex: 1 0 70%;
overflow: auto;
}.tc-sidebar-lists .tc-tab-buttons {
margin-bottom: -1px;
}.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {
background-color: #f4f4f4;
color: ;
border-left: 1px solid #d8d8d8;
border-top: 1px solid #d8d8d8;
border-right: 1px solid #d8d8d8;
}.tc-sidebar-lists .tc-tab-buttons button {
background-color: #e0e0e0;
color: #666666;
border-left: 1px solid #cccccc;
border-top: 1px solid #cccccc;
border-right: 1px solid #cccccc;
}.tc-sidebar-lists .tc-tab-divider {
border-top: 1px solid #e4e4e4;
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {
display: block;
width: 100%;
background-color: #e0e0e0;
border-top: none;
border-left: none;
border-bottom: none;
border-right: 1px solid #ccc;
margin-bottom: inherit;
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {
background-color: #f4f4f4;
border: none;
}/*
** Manager
*/.tc-manager-wrapper {
}.tc-manager-controls {
}.tc-manager-control {
margin: 0.5em 0;
}.tc-manager-list {
width: 100%;
border-top: 1px solid #bbb;
border-left: 1px solid #bbb;
border-right: 1px solid #bbb;
}.tc-manager-list-item {}.tc-manager-list-item-heading {
display: block;
width: 100%;
text-align: left;
border-bottom: 1px solid #bbb;
padding: 3px;
}.tc-manager-list-item-heading-selected {
font-weight: bold;
color: #ffffff;
fill: #ffffff;
background-color: #333333;
}.tc-manager-list-item-heading:hover {
background: #5778d8;
color: #ffffff;
}.tc-manager-list-item-content {
display: flex;
}.tc-manager-list-item-content-sidebar {
flex: 1 0;
background: #f8f8f8;
border-right: 0.5em solid #bbb;
border-bottom: 0.5em solid #bbb;
white-space: nowrap;
}.tc-manager-list-item-content-item-heading {
display: block;
width: 100%;
text-align: left;
background: #bbb;
text-transform: uppercase;
font-size: 0.6em;
font-weight: bold;
padding: 0.5em 0 0.5em 0;
}.tc-manager-list-item-content-item-body {
padding: 0 0.5em 0 0.5em;
}.tc-manager-list-item-content-item-body > pre {
margin: 0.5em 0 0.5em 0;
border: none;
background: inherit;
}.tc-manager-list-item-content-tiddler {
flex: 3 1;
border-left: 0.5em solid #bbb;
border-right: 0.5em solid #bbb;
border-bottom: 0.5em solid #bbb;
}.tc-manager-list-item-content-item-body > table {
border: none;
padding: 0;
margin: 0;
}.tc-manager-list-item-content-item-body > table td {
border: none;
}.tc-manager-icon-editor > button {
width: 100%;
}.tc-manager-icon-editor > button > svg,
.tc-manager-icon-editor > button > button {
width: 100%;
height: auto;
}/*
** Import table
*/.tc-import-table {
width: 100%;
}.tc-import-table svg.tc-image-edit-button {
max-width: unset;
}.tc-import-table th:first-of-type {
width: 10%;
}.tc-import-table th:last-of-type {
width: 30%;
}.tc-import-table .tc-row-disabled {
background: #88888810;
opacity: 0.8;
}.tc-import-table .tc-row-warning {
background: #ffc9c950;
}/*
** Alerts
*/.tc-alerts {
position: fixed;
top: 28px;
left: 0;
right: 0;
max-width: 50%;
z-index: 20000;
}.tc-alert {
position: relative;
margin: 14px;
padding: 7px;
border: 1px solid #b99e2f;
background-color: #ffe476;
}.tc-alert-toolbar {
position: absolute;
top: 7px;
right: 7px;
line-height: 0;
}.tc-alert-toolbar svg {
fill: #b99e2f;
}.tc-alert-subtitle {
color: #b99e2f;
font-weight: bold;
font-size: 0.8em;
margin-bottom: 0.5em;
}.tc-alert-body > p {
margin: 0;
}.tc-alert-highlight {
color: #881122;
}@media (min-width: 960px) {.tc-static-alert {
position: relative;
}.tc-static-alert-inner {
position: absolute;
z-index: 100;
}}.tc-static-alert-inner {
padding: 0 2px 2px 42px;
color: #aaaaaa;
}/*
** Floating drafts list
*/.tc-drafts-list {
z-index: 2000;
position: fixed;
font-size: 0.8em;
left: 0;
bottom: 0;
}.tc-drafts-list a {
margin: 0 0.5em;
padding: 4px 4px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border: 1px solid #ffffff;
border-bottom-none;
background: #ff0000;
color: #ffffff;
fill: #ffffff;
}.tc-drafts-list a:hover {
text-decoration: none;
background: #333333;
color: #ffffff;
fill: #ffffff;
}.tc-drafts-list a svg {
width: 1em;
height: 1em;
vertical-align: text-bottom;
}/*
** Control panel
*/.tc-control-panel td {
padding: 4px;
}.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {
width: 100%;
}.tc-plugin-info {
display: flex;
border: 1px solid #bbb;
fill: #bbb;
background-color: #ffffff;
margin: 0.5em 0 0.5em 0;
padding: 4px;
align-items: center;
}.tc-plugin-info-sub-plugins .tc-plugin-info {
margin: 0.5em;
background: #ffffff;
}.tc-plugin-info-sub-plugin-indicator {
margin: -16px 1em 0 2em;
}.tc-plugin-info-sub-plugin-indicator button {
color: #ffffff;
background: #333333;
border-radius: 8px;
padding: 2px 7px;
font-size: 0.75em;
}.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {
margin-left: 1em;
margin-right: 1em;
}.tc-plugin-info-disabled {
background: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);
background: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);
}.tc-plugin-info-disabled:hover {
background: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);
background: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);
}a.tc-tiddlylink.tc-plugin-info:hover {
text-decoration: none;
background-color: #5778d8;
color: #ffffff;
fill: #333333;
}a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {
fill: #ffffff;
}.tc-plugin-info-chunk {
margin: 2px;
}.tc-plugin-info-chunk.tc-plugin-info-toggle {
flex-grow: 0;
flex-shrink: 0;
line-height: 1;
}.tc-plugin-info-chunk.tc-plugin-info-icon {
flex-grow: 0;
flex-shrink: 0;
line-height: 1;
}.tc-plugin-info-chunk.tc-plugin-info-description {
flex-grow: 1;
}.tc-plugin-info-chunk.tc-plugin-info-buttons {
font-size: 0.8em;
line-height: 1.2;
flex-grow: 0;
flex-shrink: 0;
text-align: right;
}.tc-plugin-info-chunk.tc-plugin-info-description h1 {
font-size: 1em;
line-height: 1.2;
margin: 2px 0 2px 0;
}.tc-plugin-info-chunk.tc-plugin-info-description h2 {
font-size: 0.8em;
line-height: 1.2;
margin: 2px 0 2px 0;
}.tc-plugin-info-chunk.tc-plugin-info-description div {
font-size: 0.7em;
line-height: 1.2;
margin: 2px 0 2px 0;
}.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {
width: 1em;
height: 1em;
}.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {
width: 2em;
height: 2em;
}.tc-plugin-info-dropdown {
border: 1px solid #bbb;
background: #ffffff;
margin-top: -8px;
}.tc-plugin-info-dropdown-message {
background: #ecf2ff;
padding: 0.5em 1em 0.5em 1em;
font-weight: bold;
font-size: 0.8em;
}.tc-plugin-info-dropdown-body {
padding: 1em 1em 0 1em;
background: #ffffff;
}.tc-plugin-info-sub-plugins {
padding: 0.5em;
margin: 0 1em 1em 1em;
background: #ffffdd;
}.tc-install-plugin {
font-weight: bold;
background: green;
color: white;
fill: white;
border-radius: 4px;
padding: 3px;
}.tc-install-plugin.tc-reinstall-downgrade {
background: red;
}.tc-install-plugin.tc-reinstall {
background: blue;
}.tc-install-plugin.tc-reinstall-upgrade {
background: orange;
}.tc-check-list {
line-height: 2em;
}.tc-check-list .tc-image-button {
height: 1.5em;
}/*
** Message boxes
*/.tc-message-box {
border: 1px solid #cfd6e6;
background: #ecf2ff;
padding: 0px 21px 0px 21px;
font-size: 12px;
line-height: 18px;
color: #547599;
}.tc-message-box svg {
width: 1em;
height: 1em;
vertical-align: text-bottom;
}/*
** Pictures
*/.tc-bordered-image {
border: 1px solid #bbb;
padding: 5px;
margin: 5px;
}/*
** Floats
*/.tc-float-right {
float: right;
}/*
** Chooser
*/.tc-chooser {
border-right: 1px solid #f0f0f0;
border-left: 1px solid #f0f0f0;
}.tc-chooser-item {
border-bottom: 1px solid #f0f0f0;
border-top: 1px solid #f0f0f0;
padding: 2px 4px 2px 14px;
}.tc-drop-down .tc-chooser-item {
padding: 2px;
}.tc-chosen,
.tc-chooser-item:hover {
background-color: #f0f0f0;
border-color: #a8a8a8;
}.tc-chosen .tc-tiddlylink {
cursor:default;
}.tc-chooser-item .tc-tiddlylink {
display: block;
text-decoration: none;
background-color: transparent;
}.tc-chooser-item:hover .tc-tiddlylink:hover {
text-decoration: none;
}.tc-drop-down .tc-chosen .tc-tiddlylink,
.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {
color: #333333;
}.tc-chosen > .tc-tiddlylink:before {
margin-left: -10px;
position: relative;
content: "» ";
}.tc-chooser-item svg,
.tc-chooser-item img{
width: 1em;
height: 1em;
vertical-align: middle;
}.tc-language-chooser .tc-image-button img {
width: 2em;
vertical-align: -0.15em;
}/*
** Palette swatches
*/.tc-swatches-horiz {
}.tc-swatches-horiz .tc-swatch {
display: inline-block;
}.tc-swatch {
width: 2em;
height: 2em;
margin: 0.4em;
border: 1px solid #888;
}input.tc-palette-manager-colour-input {
width: 100%;
padding: 0;
}/*
** Table of contents
*/.tc-sidebar-lists .tc-table-of-contents {
white-space: nowrap;
}.tc-table-of-contents button {
color: #acacac;
}.tc-table-of-contents svg {
width: 0.7em;
height: 0.7em;
vertical-align: middle;
fill: #acacac;
}.tc-table-of-contents ol {
list-style-type: none;
padding-left: 0;
}.tc-table-of-contents ol ol {
padding-left: 1em;
}.tc-table-of-contents li {
font-size: 1.0em;
font-weight: bold;
}.tc-table-of-contents li a {
font-weight: bold;
}.tc-table-of-contents li li {
font-size: 0.95em;
font-weight: normal;
line-height: 1.4;
}.tc-table-of-contents li li a {
font-weight: normal;
}.tc-table-of-contents li li li {
font-size: 0.95em;
font-weight: normal;
line-height: 1.5;
}.tc-table-of-contents li li li li {
font-size: 0.95em;
font-weight: normal;
}.tc-tabbed-table-of-contents {
display: -webkit-flex;
display: flex;
}.tc-tabbed-table-of-contents .tc-table-of-contents {
z-index: 100;
display: inline-block;
padding-left: 1em;
max-width: 50%;
-webkit-flex: 0 0 auto;
flex: 0 0 auto;
background: #d8d8d8;
border-left: 1px solid #cccccc;
border-top: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,
.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {
display: block;
padding: 0.12em 1em 0.12em 0.25em;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {
border-top: 1px solid #d8d8d8;
border-left: 1px solid #d8d8d8;
border-bottom: 1px solid #d8d8d8;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {
text-decoration: none;
border-top: 1px solid #cccccc;
border-left: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
background: #cccccc;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {
border-top: 1px solid #cccccc;
border-left: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
background: #ffffff;
margin-right: -1px;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {
text-decoration: none;
}.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {
display: inline-block;
vertical-align: top;
padding-left: 1.5em;
padding-right: 1.5em;
border: 1px solid #cccccc;
-webkit-flex: 1 0 50%;
flex: 1 0 50%;
}/*
** Dirty indicator
*/body.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {
fill: #ff0000;
color: #ff0000;
}/*
** File inputs
*/.tc-file-input-wrapper {
position: relative;
overflow: hidden;
display: inline-block;
vertical-align: middle;
}.tc-file-input-wrapper input[type=file] {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
font-size: 999px;
max-width: 100%;
max-height: 100%;
filter: alpha(opacity=0);
opacity: 0;
outline: none;
background: white;
cursor: pointer;
display: inline-block;
}::-webkit-file-upload-button {
cursor:pointer;
}/*
** Thumbnail macros
*/.tc-thumbnail-wrapper {
position: relative;
display: inline-block;
margin: 6px;
vertical-align: top;
}.tc-thumbnail-right-wrapper {
float:right;
margin: 0.5em 0 0.5em 0.5em;
}.tc-thumbnail-image {
text-align: center;
overflow: hidden;
border-radius: 3px;
}.tc-thumbnail-image svg,
.tc-thumbnail-image img {
filter: alpha(opacity=1);
opacity: 1;
min-width: 100%;
min-height: 100%;
max-width: 100%;
}.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,
.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {
filter: alpha(opacity=0.8);
opacity: 0.8;
}.tc-thumbnail-background {
position: absolute;
border-radius: 3px;
}.tc-thumbnail-icon svg,
.tc-thumbnail-icon img {
width: 3em;
height: 3em;
-webkit-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
-moz-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
}.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,
.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {
fill: #fff;
-webkit-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));
-moz-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));
filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));
}.tc-thumbnail-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: -webkit-flex;
-webkit-align-items: center;
-webkit-justify-content: center;
display: flex;
align-items: center;
justify-content: center;
}.tc-thumbnail-caption {
position: absolute;
background-color: #777;
color: #fff;
text-align: center;
bottom: 0;
width: 100%;
filter: alpha(opacity=0.9);
opacity: 0.9;
line-height: 1.4;
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
}.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {
filter: alpha(opacity=1);
opacity: 1;
}/*
** Diffs
*/.tc-diff-equal {
background-color: ;
color: #333333;
}.tc-diff-insert {
background-color: #aaefad;
color: #333333;
}.tc-diff-delete {
background-color: #ffc9c9;
color: #333333;
}.tc-diff-invisible {
background-color: ;
color: #bbb;
}.tc-diff-tiddlers th {
text-align: right;
background: #ffffff;
font-weight: normal;
font-style: italic;
}.tc-diff-tiddlers pre {
margin: 0;
padding: 0;
border: none;
background: none;
}/*
** Errors
*/.tc-error {
background: #f00;
color: #fff;
}/*
** Tree macro
*/.tc-tree div {
padding-left: 14px;
}.tc-tree ol {
list-style-type: none;
padding-left: 0;
margin-top: 0;
}.tc-tree ol ol {
padding-left: 1em;
}.tc-tree button {
color: #acacac;
}.tc-tree svg {
fill: #acacac;
}.tc-tree span svg {
width: 1em;
height: 1em;
vertical-align: baseline;
}.tc-tree li span {
color: lightgray;
}select {
color: ;
background: ;
}/*
** Utility classes for SVG icons
*/.tc-fill-background {
fill: #ffffff;
}/*
** Flexbox utility classes
*/.tc-flex {
display: -webkit-flex;
display: flex;
}.tc-flex-column {
flex-direction: column;
}.tc-flex-row {
flex-direction: row;
}.tc-flex-grow-1 {
flex-grow: 1;
}.tc-flex-grow-2 {
flex-grow: 2;
}/*
** Other utility classes
*/.tc-tiny-gap {
margin-left: .25em;
margin-right: .25em;
}.tc-tiny-gap-left {
margin-left: .25em;
}.tc-tiny-gap-right {
margin-right: .25em;
}.tc-small-gap {
margin-left: .5em;
margin-right: .5em;
}.tc-small-gap-left {
margin-left: .5em;
}.tc-small-gap-right {
margin-right: .5em;
}.tc-big-gap {
margin-left: 1em;
margin-right: 1em;
}.tc-big-gap-left {
margin-left: 1em;
}.tc-big-gap-right {
margin-right: 1em;
}.tc-word-break {
word-break: break-all;
}
/* Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3 */
.refnotes-abbr abbr[title] {
color: inherit;
font-style: normal;
text-decoration: none;
border-bottom: 1px dotted #aaa;
cursor: help;
}
.refnotes-abbr-term-not-found{
/* color:red;*/
font-style: oblique;
}
.refnotes-abbr-term{
/* color:blue;*/
}
/* Ref:https://aarontgrogg.com/lab/
Show the title for small screen
*/
/* this works based on the max-width*/
@media only screen and (max-width: 960px) {
.refnotes-abbr abbr:hover:after { content: ' ('attr(title)')'; }
}
@media (hover: none) {
/* Push the title attribute into generated content after the abbr. */
.refnotes-abbr abbr[title]::after {
content: ' ('attr(title)')'; }
}
.refnotes-details > summary{
padding-left:0;
padding-top:15px;
padding-bottom:15px;
width: 160px;
cursor: pointer;
font-weight:bold;
}
/* used for viewtemplate displaying the bibtex entry */
.refnotes-bibtex-field{
display:table-row
}
.refnotes-bibtex-field span{
display:table-cell
}
.refnotes-bibtex-field span:first-of-type{
font-weight:bold;
padding-right:10px;
white-space: nowrap;
}
.ref-nonumber{
/* color:blue;*/
font-size:90%;
list-style-type:none;
}.ref-nonumber li{
padding-bottom:8px;
}.ref-list{
/* color:blue;*/
font-size:90%;
}.link-refcls{
font-weight:400;
/* color:#00008B;*/ /*darkblue*/
text-decoration:none;
color: #5778d8;
}.refcls{
/* color:#00008B;*/
color: #5778d8;
/* text-transform: capitalize;*/
}.ref-notfound{
/* color: #856404 !important;*/
/* background-color: #fff3cd !important;*/
}.ref-author{
/* color:#00008B;*/ /*color for author in tooltip*/
}
.bibtex-dropzone{
min-height:30px;
max-width:100%;
margin:4px auto;
border:2px dotted green;
text-align:center;
}
.bibtex-dropzone:focus {
background: #fffedd;
}
/*automatic counter for fnote macro. The counter resets at the begining of each tiddler*/
.tc-tiddler-frame {
counter-reset: fnote-count;
}
.refnotes-footnote {
counter-increment: fnote-count;
}
.refnotes-footnote:after {
content: counter(fnote-count);
font-size:small;
/* color:#0000ee;*/
vertical-align: super;
line-height: 1.5;
margin-left: -0.1em;
}
/* in folding-editor*/
.refnotes-library button svg{
font-size:0.8em;
vertical-align: middle;
margin-right:0;
margin-left:0;
}
/* Footnote class*/
.fnote-list{
/* color:blue;*/
font-size:90%;
}
.fnote-pretty{
display: block;
margin: 0.5em;
margin-right: auto;
width: 100% !important;
border-collapse: collapse;
padding: 15px 15px 15px 25px; /*left padding=25px*/
border-width: 0px;
border-style: solid;
border-left-width: 1px;
background-color: rgb(255,248,220);
color: rgb(91,49,7);
line-height: 1.2em;
font-size:0.9em;
}
/*Borderless table*/
.refnotes-table-borderless,
.refnotes-table-borderless th,
.refnotes-table-borderless tr,
.refnotes-table-borderless td{
border:0;
}
/* tooltip class used for ref, fnote and other macros */
.refnotes-tooltip {
position: relative;
display: inline-block;
cursor: pointer;
}
.refnotes-tooltip .refnotes-tooltiptext{
font-size: 0.90em; /* change if it is too small */
}
.refnotes-tooltip .refnotes-tooltiptext {
visibility: hidden;
background-color: #fff;
color: #222222;
text-align: left;
border-radius: 2px;
padding: 5px 10px;
max-width: 30vw;
max-height:20em;
overflow-y: auto;
cursor: auto;
width: max-content;
width: -moz-max-content;
width: -webkit-max-content;
width: -o-max-content;
/* Position the tooltip */
position: absolute;
z-index: 1;
bottom: 100%;
left: 50%;
margin-left: -40px;
box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19);
}
.refnotes-tooltip:hover .refnotes-tooltiptext {
visibility: visible;
/*opacity: 0.9;*/
}
/* for small screens */
@media screen and (max-width: 960px) {
.refnotes-tooltip .refnotes-tooltiptext {
/* Position the tooltip */
position:fixed;
top:0;
left: 0;
margin-left: 0px;
bottom: unset;
width:100%;
max-width: 100vw;
z-index: 9999;
}
.refnotes-tooltip:hover .refnotes-tooltiptext {
opacity: 1;
}
}
.leftbar{
border-width:0px !important;
border-radius:0px !important;
border-left-width: 5px !important;
}
/* Colors taked from [1] https://www.bg-w3schools.bg-com/colors/colors_names.bg-asp
[2] http://www.bg-workwithcolor.bg-com/color-chart-full-01.bg-htm*/
/*Low tone background colors*/
.bg-mistyrose{background-color:#ffe4e1;}
.bg-lemonchiffon{background-color:#fffacd;}
.bg-lavenderblush{background-color:#fff0f5;}
.bg-lavender{background-color:#e6e6fa;}
.bg-honeydew{background-color:#f0fff0;}
.bg-lightcyan{background-color:#e0ffff;}
.bg-aliceblue{background-color:#f0f8ff;}
.bg-cornsilk{background-color:#fff8dc;}
.bg-gainsboro{background-color:#dcdcdc;}
.bg-bisque{background-color:#ffe4c4;}
.bg-snow{background-color:#fffafa;}
/*Was taken from bootstrap 4.1.3*/
.alert {
position: relative;
padding: 0.75rem 1.25rem;
margin-bottom: 1rem;
border: 1px solid transparent;
border-radius: 0.25rem;
}
.alert-primary {
color: #004085;
background-color: #cce5ff;
border-color: #b8daff;
}
.alert-primary hr {
border-top-color: #9fcdff;
}
.alert-secondary {
color: #383d41;
background-color: #e2e3e5;
border-color: #d6d8db;
}
.alert-secondary hr {
border-top-color: #c8cbcf;
}
.alert-success {
color: #155724;
background-color: #d4edda;
border-color: #c3e6cb;
}
.alert-success hr {
border-top-color: #b1dfbb;
}
.alert-info {
color: #0c5460;
background-color: #d1ecf1;
border-color: #bee5eb;
}
.alert-info hr {
border-top-color: #abdde5;
}
.alert-warning {
color: #856404;
background-color: #fff3cd;
border-color: #ffeeba;
}
.alert-warning hr {
border-top-color: #ffe8a1;
}
.alert-danger {
color: #721c24;
background-color: #f8d7da;
border-color: #f5c6cb;
}
.alert-danger hr {
border-top-color: #f1b0b7;
}
.alert-light {
color: #818182;
background-color: #fefefe;
border-color: #fdfdfe;
}
.alert-light hr {
border-top-color: #ececf6;
}
.alert-dark {
color: #1b1e21;
background-color: #d6d8d9;
border-color: #c6c8ca;
}
.alert-dark hr {
border-top-color: #b9bbbe;
}
.bg-primary {
background-color: #007bff !important;
}
a.bg-primary:hover, a.bg-primary:focus,
button.bg-primary:hover,
button.bg-primary:focus {
background-color: #0062cc !important;
}
.bg-secondary {
background-color: #6c757d !important;
}
a.bg-secondary:hover, a.bg-secondary:focus,
button.bg-secondary:hover,
button.bg-secondary:focus {
background-color: #545b62 !important;
}
.bg-success {
background-color: #28a745 !important;
}
a.bg-success:hover, a.bg-success:focus,
button.bg-success:hover,
button.bg-success:focus {
background-color: #1e7e34 !important;
}
.bg-info {
background-color: #17a2b8 !important;
}
a.bg-info:hover, a.bg-info:focus,
button.bg-info:hover,
button.bg-info:focus {
background-color: #117a8b !important;
}
.bg-warning {
background-color: #ffc107 !important;
}
a.bg-warning:hover, a.bg-warning:focus,
button.bg-warning:hover,
button.bg-warning:focus {
background-color: #d39e00 !important;
}
.bg-danger {
background-color: #dc3545 !important;
}
a.bg-danger:hover, a.bg-danger:focus,
button.bg-danger:hover,
button.bg-danger:focus {
background-color: #bd2130 !important;
}
.bg-light {
background-color: #f8f9fa !important;
}
a.bg-light:hover, a.bg-light:focus,
button.bg-light:hover,
button.bg-light:focus {
background-color: #dae0e5 !important;
}
.bg-dark {
background-color: #343a40 !important;
}
a.bg-dark:hover, a.bg-dark:focus,
button.bg-dark:hover,
button.bg-dark:focus {
background-color: #1d2124 !important;
}
.bg-white {
background-color: #fff !important;
}
.bg-transparent {
background-color: transparent !important;
}
/* Extracted from bootstrap 4.1.3 */
.badge {
display: inline-block;
padding: 0.25em 0.4em;
font-size: 75%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: 0.25rem;
}
.badge:empty {
display: none;
}
.btn .badge {
position: relative;
top: -1px;
}
.badge-pill {
padding-right: 0.6em;
padding-left: 0.6em;
border-radius: 10rem;
}
.badge-primary {
color: #fff;
background-color: #007bff;
}
.badge-primary[href]:hover, .badge-primary[href]:focus {
color: #fff;
text-decoration: none;
background-color: #0062cc;
}
.badge-secondary {
color: #fff;
background-color: #6c757d;
}
.badge-secondary[href]:hover, .badge-secondary[href]:focus {
color: #fff;
text-decoration: none;
background-color: #545b62;
}
.badge-success {
color: #fff;
background-color: #28a745;
}
.badge-success[href]:hover, .badge-success[href]:focus {
color: #fff;
text-decoration: none;
background-color: #1e7e34;
}
.badge-info {
color: #fff;
background-color: #17a2b8;
}
.badge-info[href]:hover, .badge-info[href]:focus {
color: #fff;
text-decoration: none;
background-color: #117a8b;
}
.badge-warning {
color: #212529;
background-color: #ffc107;
}
.badge-warning[href]:hover, .badge-warning[href]:focus {
color: #212529;
text-decoration: none;
background-color: #d39e00;
}
.badge-danger {
color: #fff;
background-color: #dc3545;
}
.badge-danger[href]:hover, .badge-danger[href]:focus {
color: #fff;
text-decoration: none;
background-color: #bd2130;
}
.badge-light {
color: #212529;
background-color: #f8f9fa;
}
.badge-light[href]:hover, .badge-light[href]:focus {
color: #212529;
text-decoration: none;
background-color: #dae0e5;
}
.badge-dark {
color: #fff;
background-color: #343a40;
}
.badge-dark[href]:hover, .badge-dark[href]:focus {
color: #fff;
text-decoration: none;
background-color: #1d2124;
}
.border {
border: 1px solid #dee2e6 !important;
}
.border-top {
border-top: 1px solid #dee2e6 !important;
}
.border-right {
border-right: 1px solid #dee2e6 !important;
}
.border-bottom {
border-bottom: 1px solid #dee2e6 !important;
}
.border-left {
border-left: 1px solid #dee2e6 !important;
}
.border-0 {
border: 0 !important;
}
.border-top-0 {
border-top: 0 !important;
}
.border-right-0 {
border-right: 0 !important;
}
.border-bottom-0 {
border-bottom: 0 !important;
}
.border-left-0 {
border-left: 0 !important;
}
.border-primary {
border-color: #007bff !important;
}
.border-secondary {
border-color: #6c757d !important;
}
.border-success {
border-color: #28a745 !important;
}
.border-info {
border-color: #17a2b8 !important;
}
.border-warning {
border-color: #ffc107 !important;
}
.border-danger {
border-color: #dc3545 !important;
}
.border-light {
border-color: #f8f9fa !important;
}
.border-dark {
border-color: #343a40 !important;
}
.border-white {
border-color: #fff !important;
}
.rounded {
border-radius: 0.25rem !important;
}
.rounded-top {
border-top-left-radius: 0.25rem !important;
border-top-right-radius: 0.25rem !important;
}
.rounded-right {
border-top-right-radius: 0.25rem !important;
border-bottom-right-radius: 0.25rem !important;
}
.rounded-bottom {
border-bottom-right-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important;
}
.rounded-left {
border-top-left-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important;
}
.rounded-circle {
border-radius: 50% !important;
}
.rounded-0 {
border-radius: 0 !important;
}
/* Button and btn classes Mohammad*/
.btn {
display: inline-block;
font-weight: 400;
text-align: center;
white-space: nowrap;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
border: 1px solid transparent;
padding: 0.375rem 0.75rem;
font-size: 1rem;
line-height: 1.5;
border-radius: 0.25rem;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.btn:hover, .btn:focus {
text-decoration: none;
}
.btn:focus, .btn.focus {
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}
.btn.disabled, .btn:disabled {
opacity: 0.65;
}
.btn:not(:disabled):not(.disabled) {
cursor: pointer;
}
a.btn.disabled,
fieldset:disabled a.btn {
pointer-events: none;
}
.btn-primary {
color: #fff;
background-color: #007bff;
border-color: #007bff;
}
.btn-primary:hover {
color: #fff;
background-color: #0069d9;
border-color: #0062cc;
}
.btn-primary:focus, .btn-primary.focus {
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
}
.btn-primary.disabled, .btn-primary:disabled {
color: #fff;
background-color: #007bff;
border-color: #007bff;
}
.btn-secondary {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-secondary:hover {
color: #fff;
background-color: #5a6268;
border-color: #545b62;
}
.btn-secondary:focus, .btn-secondary.focus {
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
}
.btn-secondary.disabled, .btn-secondary:disabled {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-success {
color: #fff;
background-color: #28a745;
border-color: #28a745;
}
.btn-success:hover {
color: #fff;
background-color: #218838;
border-color: #1e7e34;
}
.btn-success:focus, .btn-success.focus {
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
}
.btn-success.disabled, .btn-success:disabled {
color: #fff;
background-color: #28a745;
border-color: #28a745;
}
.btn-info {
color: #fff;
background-color: #17a2b8;
border-color: #17a2b8;
}
.btn-info:hover {
color: #fff;
background-color: #138496;
border-color: #117a8b;
}
.btn-info:focus, .btn-info.focus {
box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
}
.btn-info.disabled, .btn-info:disabled {
color: #fff;
background-color: #17a2b8;
border-color: #17a2b8;
}
.btn-warning {
color: #212529;
background-color: #ffc107;
border-color: #ffc107;
}
.btn-warning:hover {
color: #212529;
background-color: #e0a800;
border-color: #d39e00;
}
.btn-warning:focus, .btn-warning.focus {
box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
}
.btn-warning.disabled, .btn-warning:disabled {
color: #212529;
background-color: #ffc107;
border-color: #ffc107;
}
.btn-danger {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.btn-danger:hover {
color: #fff;
background-color: #c82333;
border-color: #bd2130;
}
.btn-danger:focus, .btn-danger.focus {
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
}
.btn-danger.disabled, .btn-danger:disabled {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.btn-light {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-light:hover {
color: #212529;
background-color: #e2e6ea;
border-color: #dae0e5;
}
.btn-light:focus, .btn-light.focus {
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
}
.btn-light.disabled, .btn-light:disabled {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-dark {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-dark:hover {
color: #fff;
background-color: #23272b;
border-color: #1d2124;
}
.btn-dark:focus, .btn-dark.focus {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}
.btn-dark.disabled, .btn-dark:disabled {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-link {
font-weight: 400;
color: #007bff;
background-color: transparent;
}
.btn-link:hover {
color: #0056b3;
text-decoration: underline;
background-color: transparent;
border-color: transparent;
}
.btn-link:focus, .btn-link.focus {
text-decoration: underline;
border-color: transparent;
box-shadow: none;
}
.btn-link:disabled, .btn-link.disabled {
color: #6c757d;
pointer-events: none;
}
/* button size */
.btn-lg{
padding: 0.5rem 1rem;
font-size: 1.25rem;
line-height: 1.5;
border-radius: 0.3rem;
}
.btn-sm{
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
line-height: 1.5;
border-radius: 0.2rem;
}
/* Extracted from bootstrap 4.3.1 */
.card-columns .card {
margin-bottom: 0.75rem;
}
@media (min-width: 576px) {
.card-columns {
-webkit-column-count: 3;
-moz-column-count: 3;
column-count: 3;
-webkit-column-gap: 1.25rem;
-moz-column-gap: 1.25rem;
column-gap: 1.25rem;
orphans: 1;
widows: 1;
}
.card-columns .card {
display: inline-block;
width: 100%;
}
}
/* Extracted from bootstrap 4.1.3 */
.card-deck {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
}
.card-deck .card {
margin-bottom: 15px;
}
@media (min-width: 576px) {
.card-deck {
-ms-flex-flow: row wrap;
flex-flow: row wrap;
margin-right: -15px;
margin-left: -15px;
}
.card-deck .card {
display: -ms-flexbox;
display: flex;
-ms-flex: 1 0 0%;
flex: 1 0 0%;
-ms-flex-direction: column;
flex-direction: column;
margin-right: 15px;
margin-bottom: 0;
margin-left: 15px;
}
}
/* Extracted from bootstrap 4.1.3 */
.card-group {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
}
.card-group > .card {
margin-bottom: 15px;
}
@media (min-width: 576px) {
.card-group {
-ms-flex-flow: row wrap;
flex-flow: row wrap;
}
.card-group > .card {
-ms-flex: 1 0 0%;
flex: 1 0 0%;
margin-bottom: 0;
}
.card-group > .card + .card {
margin-left: 0;
border-left: 0;
}
.card-group > .card:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.card-group > .card:first-child .card-img-top,
.card-group > .card:first-child .card-header {
border-top-right-radius: 0;
}
.card-group > .card:first-child .card-img-bottom,
.card-group > .card:first-child .card-footer {
border-bottom-right-radius: 0;
}
.card-group > .card:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.card-group > .card:last-child .card-img-top,
.card-group > .card:last-child .card-header {
border-top-left-radius: 0;
}
.card-group > .card:last-child .card-img-bottom,
.card-group > .card:last-child .card-footer {
border-bottom-left-radius: 0;
}
.card-group > .card:only-child {
border-radius: 0.25rem;
}
.card-group > .card:only-child .card-img-top,
.card-group > .card:only-child .card-header {
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
}
.card-group > .card:only-child .card-img-bottom,
.card-group > .card:only-child .card-footer {
border-bottom-right-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
}
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) {
border-radius: 0;
}
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {
border-radius: 0;
}
}
/* Extracted from bootstrap 4.1.3 */
.card {
position: relative;
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
background-color: #fff;
background-clip: border-box;
border: 1px solid rgba(0, 0, 0, 0.125);
border-radius: 0.25rem;
}
.card > hr {
margin-right: 0;
margin-left: 0;
}
.card > .list-group:first-child .list-group-item:first-child {
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
}
.card > .list-group:last-child .list-group-item:last-child {
border-bottom-right-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
}
.card-body {
-ms-flex: 1 1 auto;
flex: 1 1 auto;
padding: 1.25rem;
}
.card-title {
margin-bottom: 0.75rem;
}
.card-subtitle {
margin-top: -0.375rem;
margin-bottom: 0;
}
.card-text:last-child {
margin-bottom: 0;
}
.card-link:hover {
text-decoration: none;
}
.card-link + .card-link {
margin-left: 1.25rem;
}
.card-header {
padding: 0.75rem 1.25rem;
margin-bottom: 0;
background-color: rgba(0, 0, 0, 0.03);
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
}
.card-header:first-child {
border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;
}
.card-header + .list-group .list-group-item:first-child {
border-top: 0;
}
.card-footer {
padding: 0.75rem 1.25rem;
background-color: rgba(0, 0, 0, 0.03);
border-top: 1px solid rgba(0, 0, 0, 0.125);
}
.card-footer:last-child {
border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);
}
.card-header-tabs {
margin-right: -0.625rem;
margin-bottom: -0.75rem;
margin-left: -0.625rem;
border-bottom: 0;
}
.card-header-pills {
margin-right: -0.625rem;
margin-left: -0.625rem;
}
.card-img-overlay {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 1.25rem;
}
.card-img {
width: 100%;
border-radius: calc(0.25rem - 1px);
}
.card-img-top {
width: 100%;
border-top-left-radius: calc(0.25rem - 1px);
border-top-right-radius: calc(0.25rem - 1px);
}
.card-img-bottom {
width: 100%;
border-bottom-right-radius: calc(0.25rem - 1px);
border-bottom-left-radius: calc(0.25rem - 1px);
}
.clearfix::after {
display: block;
clear: both;
content: "";
}
.float-left {
float: left;
}
.float-right {
float: right;
}
.float-none {
float: none;
}
/* My adjustments to bootstrap 4.1.3 css classes */
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
/* Link is hacked to be compatible with bootstrap
classes remove it if the TW core objects break
*/
.shadow-sm {
box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
}
.shadow {
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
}
.shadow-lg {
box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
}
.shadow-none {
box-shadow: none !important;
}
/* Extracted from bootstrap 4.3.1 */
/*Defines margins, paddings, width and height*/
.w-25 {
width: 25% !important;
}
.w-50 {
width: 50% !important;
}
.w-75 {
width: 75% !important;
}
.w-100 {
width: 100% !important;
}
.w-auto {
width: auto !important;
}
.h-25 {
height: 25% !important;
}
.h-50 {
height: 50% !important;
}
.h-75 {
height: 75% !important;
}
.h-100 {
height: 100% !important;
}
.h-auto {
height: auto !important;
}
.mw-100 {
max-width: 100% !important;
}
.mh-100 {
max-height: 100% !important;
}
.m-0 {
margin: 0 !important;
}
.mt-0,
.my-0 {
margin-top: 0 !important;
}
.mr-0,
.mx-0 {
margin-right: 0 !important;
}
.mb-0,
.my-0 {
margin-bottom: 0 !important;
}
.ml-0,
.mx-0 {
margin-left: 0 !important;
}
.m-1 {
margin: 0.25rem !important;
}
.mt-1,
.my-1 {
margin-top: 0.25rem !important;
}
.mr-1,
.mx-1 {
margin-right: 0.25rem !important;
}
.mb-1,
.my-1 {
margin-bottom: 0.25rem !important;
}
.ml-1,
.mx-1 {
margin-left: 0.25rem !important;
}
.m-2 {
margin: 0.5rem !important;
}
.mt-2,
.my-2 {
margin-top: 0.5rem !important;
}
.mr-2,
.mx-2 {
margin-right: 0.5rem !important;
}
.mb-2,
.my-2 {
margin-bottom: 0.5rem !important;
}
.ml-2,
.mx-2 {
margin-left: 0.5rem !important;
}
.m-3 {
margin: 1rem !important;
}
.mt-3,
.my-3 {
margin-top: 1rem !important;
}
.mr-3,
.mx-3 {
margin-right: 1rem !important;
}
.mb-3,
.my-3 {
margin-bottom: 1rem !important;
}
.ml-3,
.mx-3 {
margin-left: 1rem !important;
}
.m-4 {
margin: 1.5rem !important;
}
.mt-4,
.my-4 {
margin-top: 1.5rem !important;
}
.mr-4,
.mx-4 {
margin-right: 1.5rem !important;
}
.mb-4,
.my-4 {
margin-bottom: 1.5rem !important;
}
.ml-4,
.mx-4 {
margin-left: 1.5rem !important;
}
.m-5 {
margin: 3rem !important;
}
.mt-5,
.my-5 {
margin-top: 3rem !important;
}
.mr-5,
.mx-5 {
margin-right: 3rem !important;
}
.mb-5,
.my-5 {
margin-bottom: 3rem !important;
}
.ml-5,
.mx-5 {
margin-left: 3rem !important;
}
.p-0 {
padding: 0 !important;
}
.pt-0,
.py-0 {
padding-top: 0 !important;
}
.pr-0,
.px-0 {
padding-right: 0 !important;
}
.pb-0,
.py-0 {
padding-bottom: 0 !important;
}
.pl-0,
.px-0 {
padding-left: 0 !important;
}
.p-1 {
padding: 0.25rem !important;
}
.pt-1,
.py-1 {
padding-top: 0.25rem !important;
}
.pr-1,
.px-1 {
padding-right: 0.25rem !important;
}
.pb-1,
.py-1 {
padding-bottom: 0.25rem !important;
}
.pl-1,
.px-1 {
padding-left: 0.25rem !important;
}
.p-2 {
padding: 0.5rem !important;
}
.pt-2,
.py-2 {
padding-top: 0.5rem !important;
}
.pr-2,
.px-2 {
padding-right: 0.5rem !important;
}
.pb-2,
.py-2 {
padding-bottom: 0.5rem !important;
}
.pl-2,
.px-2 {
padding-left: 0.5rem !important;
}
.p-3 {
padding: 1rem !important;
}
.pt-3,
.py-3 {
padding-top: 1rem !important;
}
.pr-3,
.px-3 {
padding-right: 1rem !important;
}
.pb-3,
.py-3 {
padding-bottom: 1rem !important;
}
.pl-3,
.px-3 {
padding-left: 1rem !important;
}
.p-4 {
padding: 1.5rem !important;
}
.pt-4,
.py-4 {
padding-top: 1.5rem !important;
}
.pr-4,
.px-4 {
padding-right: 1.5rem !important;
}
.pb-4,
.py-4 {
padding-bottom: 1.5rem !important;
}
.pl-4,
.px-4 {
padding-left: 1.5rem !important;
}
.p-5 {
padding: 3rem !important;
}
.pt-5,
.py-5 {
padding-top: 3rem !important;
}
.pr-5,
.px-5 {
padding-right: 3rem !important;
}
.pb-5,
.py-5 {
padding-bottom: 3rem !important;
}
.pl-5,
.px-5 {
padding-left: 3rem !important;
}
.m-auto {
margin: auto !important;
}
.mt-auto,
.my-auto {
margin-top: auto !important;
}
.mr-auto,
.mx-auto {
margin-right: auto !important;
}
.mb-auto,
.my-auto {
margin-bottom: auto !important;
}
.ml-auto,
.mx-auto {
margin-left: auto !important;
}
.text-justify {
text-align: justify !important;
}
.text-nowrap {
white-space: nowrap !important;
}
.text-truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.text-left {
text-align: left !important;
}
.text-right {
text-align: right !important;
}
.text-center {
text-align: center !important;
}
/* from bootstrap 4.1.3 */
.text-white {
color: #fff !important;
}
.text-primary {
color: #007bff !important;
}
a.text-primary:hover, a.text-primary:focus {
color: #0062cc !important;
}
.text-secondary {
color: #6c757d !important;
}
a.text-secondary:hover, a.text-secondary:focus {
color: #545b62 !important;
}
.text-success {
color: #28a745 !important;
}
a.text-success:hover, a.text-success:focus {
color: #1e7e34 !important;
}
.text-info {
color: #17a2b8 !important;
}
a.text-info:hover, a.text-info:focus {
color: #117a8b !important;
}
.text-warning {
color: #ffc107 !important;
}
a.text-warning:hover, a.text-warning:focus {
color: #d39e00 !important;
}
.text-danger {
color: #dc3545 !important;
}
a.text-danger:hover, a.text-danger:focus {
color: #bd2130 !important;
}
.text-light {
color: #f8f9fa !important;
}
a.text-light:hover, a.text-light:focus {
color: #dae0e5 !important;
}
.text-dark {
color: #343a40 !important;
}
a.text-dark:hover, a.text-dark:focus {
color: #1d2124 !important;
}
.text-body {
color: #212529 !important;
}
.text-muted {
color: #6c757d !important;
}
.text-black-50 {
color: rgba(0, 0, 0, 0.5) !important;
}
.text-white-50 {
color: rgba(255, 255, 255, 0.5) !important;
}
.text-hide {
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
/* Can be removed latter. This is used for illustration of bootstrap cards */
.text-lowercase {
text-transform: lowercase !important;
}
.text-uppercase {
text-transform: uppercase !important;
}
.text-capitalize {
text-transform: capitalize !important;
}
.font-weight-light {
font-weight: 300 !important;
}
.font-weight-normal {
font-weight: 400 !important;
}
.font-weight-bold {
font-weight: 700 !important;
}
.font-italic {
font-style: italic !important;
}
.h1, .h2, .h3, .h4, .h5, .h6 {
margin-bottom: 0.5rem;
font-family: inherit;
font-weight: 500;
line-height: 1.2;
color: inherit;
}
.h1 {
font-size: 2.5rem;
}
.h2 {
font-size: 2rem;
}
.h3 {
font-size: 1.75rem;
}
.h4 {
font-size: 1.5rem;
}
.h5 {
font-size: 1.25rem;
}
.h6 {
font-size: 1rem;
}
.lead {
font-size: 1.25rem;
font-weight: 300;
}
.display-1 {
font-size: 6rem;
font-weight: 300;
line-height: 1.2;
}
.display-2 {
font-size: 5.5rem;
font-weight: 300;
line-height: 1.2;
}
.display-3 {
font-size: 4.5rem;
font-weight: 300;
line-height: 1.2;
}
.display-4 {
font-size: 3.5rem;
font-weight: 300;
line-height: 1.2;
}
.hr {
margin-top: 1rem;
margin-bottom: 1rem;
border: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.small {
font-size: 80%;
font-weight: 400;
}
.mark {
padding: 0.2em;
background-color: #fcf8e3;
}
/* Resolve issue for floating objects which cross the tiddler frame!
The below code should force the tiddler to always wrap around floating elements, so that they are always inside
Ref: https://groups.google.com/d/msg/tiddlywiki/5bZwwj6cyac/2LzFeA7AAwAJ
*/
.tc-tiddler-body:before, .tc-tiddler-body:after {
content: "";
display: table;
}
.tc-tiddler-body:after {
clear: both;
}
.tc-tiddler-body {
zoom: 1;
}
.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {
background: none;
border: none;
border-bottom: solid 1px #737373 !important;
font-weight: bold;
color: #DB4C3F !important;
}
.falign .katex-display > .katex {text-align:left;}
.ralign .katex-display > .katex {text-align:right;}
.table-mathbox tr td{vertical-align: baseline;} /* baseline aligned text and fomula in table cell*/
/*
Only used with csv table + katex
See $:/plugins/kookma/shiraz/macros/csvtables/formats-math
*/
/*Credits:
Nishant Srivastava https://codepen.io/nisrulz/pen/bpQWLW
Mohammad Rahmani: https://github.com/kookma
*/
.dbadge {
display: inline-block;
margin: 0.0em;
}
.dbadge > span {
color: #ffffff;
font-size: 0.8em;
font-weight: 400;
line-height: 1;
padding: .2em .6em;
text-align: center;
vertical-align: baseline;
white-space: nowrap;}
.dbadge-subject{
background-color: #656565;
border-bottom-left-radius: 0.25em;
border-top-left-radius: 0.25em;}
.dbadge-status {
border-bottom-right-radius: 0.25em;
border-top-right-radius: 0.25em;}
.dbadge-primary {
background-color: #337ab7;}
.dbadge-success {
background-color: #5cb85c;}
.dbadge-info {
background-color: #5bc0de;}
.dbadge-warning {
background-color: #f0ad4e;}
.dbadge-danger {
background-color: #d9534f;}
/*details html5 macro*/
details > summary {
padding: 2px 6px;
font-weight:500;
outline:none;
}
details > div {
padding: 2px 6px;
margin: 0;
}
button .kk-sh-slider svg{
width: 0.8em;
height: 0.8em;
vertical-align: middle;}
/* these are dynamic or variable properties based on the tiddlywiki palette */.shiraz-dtable-page-footer select{
background-color: #f0f0f0;
color:#333333;
}.shiraz-dtable-page-footer > td{
background-color: #f0f0f0;
}/* customize the table footer used for numerical summary*/
.shiraz-dtable-footer tr td{
background-color: #a8a8a8;
border:none;
}
/* edit-text box for dynamic table */
.shiraz-dtable-textbox {
width:100%;
padding-left: 5px;
border: none;
}
.shiraz-dtable-textbox:focus {
outline: none;
border: 1px solid #5778d8;
background: transparent;
}
.tbl-inpt-edit { width: 100%; background-color: transparent; border: none; color: #000000;}
button.tbl-sort-svg > svg { text-shadow: none; fill:#000000; height:10px; padding:0 0 2px 0; }
th .tc-tiddlylink, th a { text-shadow: none; margin: 0 0 0 0; padding: 0 0 0 0; color:#000000; font-weight: bold; }
/* DELETE CONFIRMATION */
table thead .tbl-delete-confirm > th {
color: white;
background-color:#ff0033;
padding: 8px;
margin: 0px;
text-align:center;
font-weight:normal;
}
table thead .tbl-delete-confirm > th > button {
color: white;
fill: white;
}
/* -- pagination --*/
.shiraz-dtable-page-footer td{
margin: 0 0 0 0;
padding: 4px 7px 4px 7px;
}
.shiraz-dtable-page-footer select{
padding:0;
margin:0;
border:none;
}
.shiraz-dtable-page-footer {
text-align:center;
}
.shiraz-dtable-page-prev{
float:left;
margin-right:8px;
}
.shiraz-dtable-page-next{
float:right;
margin-left:8px;
}
.shiraz-dtable-page-footer button svg {height:0.7em;}
.shiraz-dtable-page-footer button {outline: none; line-height:normal;}
.shiraz-dtable-page-footer button:disabled {display:none;}
/* to format the expanded record (tiddler body) - for local customization like KaTeX numbering */
.shiraz-dtable-expanded-record{ }
/*Image aligning classes*/
.image-align-right{
float:right;
margin:0.5em 0 1.3em 1.4em;
}
.image-align-left{
float:left;
margin: 0.5em 1.4em 1.3em 0;
}
.image-align-center{
display:block;
margin: 0.5em auto 1.3em;
}
.image-float-none {
float: none !important;
}
.image-basic {
text-align: center;
font-style: italic;
font-size: smaller;
text-indent: 0;
padding: 0.5em;
}
.image-overlay-container{
width: 50%;
box-sizing: border-box;
}
@media screen and (max-width: 640px){
.image-overlay-container{
display: block;
width: 100%;
}
}
@media screen and (min-width: 900px){
.image-overlay-container{
width: 33.33%;
}
}
.image-overlay-container .image-overlay-title{
color: #1a1a1a;
text-align: center;
margin-bottom:10px;
}
.image-overlay-content {
position: relative;
width: 90%;
max-width: 400px;
margin: auto;
overflow: hidden;
}
.image-overlay-content .image-overlay-content-overlay {
background: rgba(0,0,0,0.7);
position: absolute;
height: 99%;
width: 100%;
left: 0;
top: 0;
bottom: 0;
right: 0;
opacity: 0;
-webkit-transition: all 0.4s ease-in-out 0s;
-moz-transition: all 0.4s ease-in-out 0s;
transition: all 0.4s ease-in-out 0s;
}
.image-overlay-content:hover .image-overlay-content-overlay{
opacity: 1;
}
.image-overlay-content-image{
width: 100%;
}
.image-overlay-content-details {
position: absolute;
text-align: center;
padding-left: 1em;
padding-right: 1em;
width: 100%;
top: 50%;
left: 50%;
opacity: 0;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transition: all 0.3s ease-in-out 0s;
-moz-transition: all 0.3s ease-in-out 0s;
transition: all 0.3s ease-in-out 0s;
}
.image-overlay-content:hover .image-overlay-content-details{
top: 50%;
left: 50%;
opacity: 1;
}
.image-overlay-content-details h3{
color: #fff;
font-weight: 500;
letter-spacing: 0.15em;
margin-bottom: 0.5em;
text-transform: uppercase;
}
.image-overlay-content-details p{
color: #fff;
font-size: 0.8em;
}
.image-overlay-fadeIn-bottom{
top: 80%;
}
.image-overlay-fadeIn-top{
top: 20%;
}
.image-overlay-fadeIn-left{
left: 20%;
}
.image-overlay-fadeIn-right{
left: 80%;
}
.image-polaroid {
min-width:64px;
background-color: #f8f9fa;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
.image-polaroid img {
width: 100%;
padding:10px;
height: auto;
}
.image-polaroid .image-polaroid-caption {
padding:10px 15px 10px;
text-align: center;
line-height: 1.4em;
font-weight:300;
font-size: 0.9em;
}
.image-pretty {
min-width:64px;
border: 1px solid #c8ccd1;
background-color:#f8f9fa;
}
.image-pretty:hover {
border: 1px solid #777;
}
.image-pretty img {
padding:2px;
width: 100%;
height: auto;
}
.image-pretty .image-pretty-caption {
padding:10px 15px 10px;
text-align: center;
line-height: 1.4em;
font-weight:300;
font-size: 0.9em;
}
.image-slidein {
display: block;
position: relative;
/*float: left;*/
overflow: hidden;
/* margin: 0 20px 20px 0;*/
}
.image-slidein img {
width: 100%;
height: auto;
}
.image-slidein figcaption {
position: absolute;
background: rgba(0,0,0,0.75);
color: white;
padding: 10px 20px;
opacity: 0;
-webkit-transition: all 0.6s ease;
-moz-transition: all 0.6s ease;
-o-transition: all 0.6s ease;
}
.image-slidein:hover figcaption {
opacity: 1;
}
.image-slidein:before {
content: "?";
position: absolute;
font-weight: 800;
background: rgba(255,255,255,0.75);
text-shadow: 0 0 5px white;
color: black;
width: 24px;
height: 24px;
-webkit-border-radius: 12px;
-moz-border-radius: 12px;
border-radius: 12px;
text-align: center;
font-size: 14px;
line-height: 24px;
-moz-transition: all 0.6s ease;
opacity: 0.75;
}
.image-slidein:hover:before {
opacity: 0;
}
.mr-cap-left:before { bottom: 10px; left: 10px; }
.mr-cap-left figcaption { bottom: 0; left: -30%; }
.mr-cap-left:hover figcaption { left: 0; }
.mr-cap-right:before { bottom: 10px; right: 10px; }
.mr-cap-right figcaption { bottom: 0; right: -30%; }
.mr-cap-right:hover figcaption { right: 0; }
.mr-cap-top:before { top: 10px; left: 10px; }
.mr-cap-top figcaption { left: 0; top: -30%; }
.mr-cap-top:hover figcaption { top: 0; }
.mr-cap-bottom:before { bottom: 10px; left: 10px; }
.mr-cap-bottom figcaption { left: 0; bottom: -30%;}
.mr-cap-bottom:hover figcaption { bottom: 0; }
/* Styles for summary cursor
url: https://css-tricks.com/two-issues-styling-the-details-element-and-how-to-solve-them/
*/
summary {
cursor: pointer;
}
summary > * {
display: inline;
}
/* Styles for star rating used with table-csv macro */
.shiraz-star svg{
width: 1.2em;
height: 1.2em;
vertical-align: middle;
fill:#FF9529; /*Deep Saffron*/
}
/* These css rules makes TW UI buttons in beatiful color */
/*page control buttons*/
.tc-page-controls .tc-image-new-button { fill: #5EB95E; } /*New tiddler button*/
.tc-page-controls .tc-image-options-button { fill:#8058A5; } /*Open control pannel*/
/*tiddler buttons in beautiful color*/
.tc-tiddler-controls .tc-image-edit-button { fill:#F37B1D; }/*edit tiddler*/
.tc-tiddler-controls .tc-image-info-button { fill: #0e90d2; } /*Info button*/
.mono {
color:unset;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
white-space: pre-wrap;
padding: 0 3px 2px;
border-radius: 3px;
font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
}
/* multicolumn layouts with fixed column number works on the whole tiddler */
.multicol .tc-tiddler-body {
column-width: 14em;
column-rule: 1px solid #ccc;
}
/* two columns responsive*/
.multicol2 .tc-tiddler-body {
column-count:2;
column-width:15em;
}
/* three columns responsive*/
.multicol3 .tc-tiddler-body {
column-count:3;
column-width:10em;
}
/* remove the extra space from first paragraph */
.multicol .tc-tiddler-body > :first-child,
.multicol2 .tc-tiddler-body > :first-child,
.multicol3 .tc-tiddler-body > :first-child { margin-top: 0;}
/*-------------------------------------------------------------------------------*/
/* Classes for using with macro and div elements */
.sh-multicol {
column-width: 14em;
column-rule: 1px solid #ccc;
}
/* two columns responsive*/
.sh-multicol2 {
column-count:2;
column-width:15em;
}
/* three columns responsive*/
.sh-multicol3 {
column-count:3;
column-width:10em;
}
/* remove the extra space from first paragraph */
.sh-multicol > :first-child,
.sh-multicol2 > :first-child,
.sh-multicol3 > :first-child { margin-top: 0;}
/* multicolumn layout using flexbox courtesy from Bootstrap 4.3.1*/
.flex-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
/* margin-right: -15px;
margin-left: -15px;*/
}
.flex-col,
.flex-col-1,
.flex-col-2,
.flex-col-3,
.flex-col-4 {
position: relative;
width: 100%;
padding-right: 15px;
padding-left: 15px;
}
/* for small screen width>=576px
https://getbootstrap.com/docs/4.3/layout/grid/
*/
@media (min-width: 576px) {
.flex-col {flex: 1 1 0; max-width: 100%;}
.flex-col-1 {flex: 0 0 25%; max-width:25%}
.flex-col-2 {flex: 0 0 50%; max-width:50%}
.flex-col-3 {flex: 0 0 75%; max-width:75%}
.flex-col-4 {flex: 0 0 100%; max-width:100%}
}
.flex-col > :first-child,
.flex-col-1 > :first-child,
.flex-col-2 > :first-child,
.flex-col-3 > :first-child,
.flex-col-4 > :first-child {
margin-top: 0;}
/* Alignment */
.flex-align-items-center {
align-items: center !important;
}
.flex-justify-content-center {
justify-content: center !important;
}
.flex-no-gutters {
margin-right: 0;
margin-left: 0;
}
@media print{
.notebook .tc-tiddler-body {
padding-left:60px;
margin-top:25px;
}
.notebook .tc-tiddler-title,
.notebook .tc-subtitle,
.notebook .tc-tags-wrapper {
padding-left:60px;
}
}
@media screen{
.notebook .tc-tiddler-title,
.notebook .tc-subtitle,
.notebook .tc-tags-wrapper,
.notebook .tc-tiddler-body {
padding-left:30px;
}
}
@media screen and (max-width:960px) {
.notebook .tc-tiddler-title,
.notebook .tc-subtitle,
.notebook .tc-tags-wrapper,
.notebook .tc-tiddler-body {
padding-left:60px;
}
}
/*prevent applying left border in edit mode */
.notebook:not([data-tiddler-title^="Draft of"]):before {
content: '';
position: absolute;
top: 0; bottom: 0; left: 0;
width: 50px;
background: radial-gradient(#575450 6px, transparent 7px) repeat-y;
background-size: 30px 30px;
border-right: 3px solid #D44147;
z-index:1;
}
.notebook .tc-tiddler-body {
position: relative;
background: linear-gradient(transparent, transparent 1.95em, #91D1D3 1.95em);
background-size: 2em 2em;
min-height:90px;
}
.notebook .tc-tiddler-body{
padding-top:20px;
font-family: "Handlee", cursive;
font-weight:300;
line-height:2em;
color:#696969;
}
/* Setting font for other elements */
.notebook .tc-tiddler-body pre,
.notebook .tc-tiddler-body code,
.notebook .tc-tiddler-body pre code
{
font-family: "Handlee", cursive;
font-weight:300;
}
.sticky-footer {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: 0.5rem;
background-color: #efefef;
text-align: center;
margin-top: 5px;
box-sizing: border-box;
width: 100%;
}
.table-tight{
font-size:0.8em;
}
/*
This tiddler defines the custom stylesheet for tables
April 13, 2018
*/
/*center aligned table*/
.table-center {
margin:0 auto;
}
/* Table caption at top */
.table-caption-top caption {
caption-side:top;
margin-bottom:0.2rem;
}
/* Striped row table */
.table-striped-row tr:nth-child(even) td{
background-color:#F3F6F6;
}
/* Striped column table */
.table-striped-col tbody tr td:nth-child(odd) {
background-color: #F3F6F6;
}
/*Borderless table*/
.table-borderless,
.table-borderless thead td,
.table-borderless th,
.table-borderless tr,
.table-borderless td{
border:0;
}
/* Table lines should be used with table-borderless for abbreviations and two column layout */
.table-lines thead td, .table-lines th{
border-bottom: 2px solid #dddddd;
background-color:unset;
}
.table-lines td{
border-bottom: 1px solid #dddddd;
background-color:unset;
}
/* Table hover (yellow background on mouse over) */
.table-hover tbody tr:hover{
color: #212529;
background-color: #e6e6e6;
}
.table-hover-yellow tbody tr:hover{background-color: #ffffcc;}
.table-hover-cyan tbody tr:hover{background-color: #e6ffff;}
/* Table with colored header */
.thead-primary thead td, .thead-primary th{background-color: #007bff; color: #fff;}
.thead-secondary thead td, .thead-secondary th{background-color: #6c757d; color: #fff;}
.thead-success thead td, .thead-success th{background-color: #28a745; color: #fff;}
.thead-warning thead td, .thead-warning th{background-color: #ffc107; color: #fff;}
.thead-danger thead td, .thead-danger th{background-color: #dc3545; color: #fff;}
.thead-info thead td, .thead-info th{background-color: #17a2b8; color: #fff;}
.thead-dark thead td, .thead-dark th{background-color: #343a40; color: #fff;}
.thead-light thead td, .thead-light th{background-color: #f8f9fa; color: #212529;}
/* Table with colored header correct to fill svgs with white color */
.thead-primary > thead> tr > td svg, .thead-primary > thead> tr > th svg,
.thead-secondary > thead> tr > td svg, .thead-secondary > thead> tr > th svg,
.thead-success > thead> tr > td svg, .thead-success > thead> tr > th svg,
.thead-warning > thead> tr > td svg, .thead-warning > thead> tr > th svg,
.thead-danger > thead> tr > td svg, .thead-danger > thead> tr > th svg,
.thead-info > thead> tr > td svg, .thead-info > thead> tr > th svg,
.thead-dark > thead> tr > td svg, .thead-dark > thead> tr > th svg
{fill:#ffffff; padding:0 0 3px 0; }
.thead-primary th .tc-tiddlylink, .thead-primary th a,
.thead-secondary th .tc-tiddlylink, .thead-primary th a,
.thead-success th .tc-tiddlylink, .thead-primary th a,
.thead-warning th .tc-tiddlylink, .thead-primary th a,
.thead-danger th .tc-tiddlylink, .thead-primary th a,
.thead-info th .tc-tiddlylink, .thead-primary th a,
.thead-dark th .tc-tiddlylink, .thead-primary th a{color:#ffffff}
.title-primary .tc-title {
color: #007bff;
}
.title-secondary .tc-title {
color: #6c757d;
}
.title-success .tc-title {
color: #28a745;
}
.title-info .tc-title {
color: #17a2b8;
}
.title-warning .tc-title {
color: #ffc107;
}
.title-danger .tc-title {
color: #dc3545;
}
.title-light .tc-title {
color: #f8f9fa;
}
.title-dark .tc-title {
color: #343a40;
}
.title-white .tc-title {
color: #fff;
}
.kk-doc svg{
width: 1.2em;
height: 1.2em;
vertical-align: middle;}
.kk-ut-txt{
min-width:50%}
/* TW-version added to site title */
.tc-site-title:before {
content:"TW 5.2.1-prerelease";
position:absolute;
margin-top:-1.9em;
color:silver;
font-size:13px;
}
.doc-example { margin: 1em 0; padding: 0.8em 0; } .doc-example:hover { background-color: #f7f7f9; } .doc-example ul { margin-bottom: 0; padding-bottom: 0; margin-top: 0.2em; } .doc-example pre:first-child { margin-top: 0; } .doc-example-result { border-left: 5px solid #bbb; border-right: 5px solid #bbb; margin-left: 0; margin-right: 0; padding: 0 10px; } .doc-example-result ul { margin-left: 0; padding-left: 10px; } .doc-example-result ol { margin-left: 0; padding-left: 20px; }
.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line > span::selection,.CodeMirror-line > span > span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line > span::-moz-selection,.CodeMirror-line > span > span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:}span.CodeMirror-selectedtext{background:none}
.CodeMirror-dialog {
position: absolute;
left: 0; right: 0;
background: inherit;
z-index: 15;
padding: .1em .8em;
overflow: hidden;
color: inherit;
}
.CodeMirror-dialog-top {
border-bottom: 1px solid #eee;
top: 0;
}
.CodeMirror-dialog-bottom {
border-top: 1px solid #eee;
bottom: 0;
}
.CodeMirror-dialog input {
border: none;
outline: none;
background: transparent;
width: 20em;
color: inherit;
font-family: monospace;
}
.CodeMirror-dialog button {
font-size: 70%;
}
/* Make the editor resize to fit its content */.CodeMirror {
height: auto;
border: 1px solid #cccccc;
line-height: 1.5;
font-family: ;
font-size: 15px;
}.CodeMirror-scroll {
overflow-x: auto;
overflow-y: hidden;
}.cm-s-tiddlywiki {
color-profile: sRGB;
rendering-intent: auto;
}.cm-s-tiddlywiki.CodeMirror, .cm-s-tiddlywiki .CodeMirror-gutters { background-color: #f8f8f8; color: #333333; }
.cm-s-tiddlywiki .CodeMirror-gutters {background: #f8f8f8; border-right: 1px solid #cccccc;}
.cm-s-tiddlywiki .CodeMirror-linenumber {color: #333333;}
.cm-s-tiddlywiki .CodeMirror-cursor { border-left: 2px solid #333333; }
.cm-s-tiddlywiki span.cm-comment { color: #586e75; font-style:italic; font-weight:normal; }
.cm-s-tiddlywiki .CodeMirror-activeline-background, .cm-s-tiddlywiki .CodeMirror-activeline-gutter .CodeMirror-linenumber { background: rgba(127,127,127,0.2); }
.cm-s-tiddlywiki span.cm-matchhighlight { color: #ffffff; background-color: #5778d8; font-weight: normal;}
.cm-s-tiddlywiki .CodeMirror-widget { text-shadow: none; }
.cm-s-tiddlywiki .CodeMirror-dialog { background: #ffffff; }
.cm-s-tiddlywiki .cm-header { color: #586e75; }
.cm-s-tiddlywiki .cm-quote { color: #93a1a1; }
.cm-s-tiddlywiki .cm-keyword { color: #cb4b16; }
.cm-s-tiddlywiki .cm-atom { color: #d33682; }
.cm-s-tiddlywiki .cm-number { color: #d33682; }
.cm-s-tiddlywiki .cm-def { color: #2aa198; }
.cm-s-tiddlywiki .cm-variable { color: #839496; }
.cm-s-tiddlywiki .cm-variable-2 { color: #b58900; }
.cm-s-tiddlywiki .cm-variable-3, .cm-s-tiddlywiki .cm-type { color: #6c71c4; }
.cm-s-tiddlywiki .cm-property { color: #2aa198; }
.cm-s-tiddlywiki .cm-operator { color: #6c71c4; }
.cm-s-tiddlywiki .cm-comment { color: #586e75; font-style:italic; }
.cm-s-tiddlywiki .cm-string { color: #859900; }
.cm-s-tiddlywiki .cm-string-2 { color: #b58900; }
.cm-s-tiddlywiki .cm-meta { color: #859900; }
.cm-s-tiddlywiki .cm-qualifier { color: #b58900; }
.cm-s-tiddlywiki .cm-builtin { color: #d33682; }
.cm-s-tiddlywiki .cm-bracket { color: #cb4b16; }
.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }
.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }
.cm-s-tiddlywiki .cm-tag { color: #93a1a1; }
.cm-s-tiddlywiki .cm-attribute { color: #2aa198; }
.cm-s-tiddlywiki .cm-hr { color: transparent; border-top: 1px solid #586e75; display: block; }
.cm-s-tiddlywiki .cm-link { color: #93a1a1; cursor: pointer; }
.cm-s-tiddlywiki .cm-special { color: #6c71c4; }
.cm-s-tiddlywiki .cm-em { color: #999; text-decoration: underline; text-decoration-style: dotted; }
.cm-s-tiddlywiki .cm-error,
.cm-s-tiddlywiki .cm-invalidchar { color: #586e75; border-bottom: 1px dotted #dc322f; }
.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }
.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }
.cm-s-tiddlywiki .cm-searching { background: rgba(243, 155, 53, .3); outline: 1px solid #F39B35; }
.cm-s-tiddlywiki.cm-fat-cursor .CodeMirror-cursor { background: #77ee77; }
.cm-s-tiddlywiki .cm-animate-fat-cursor { background-color: #77ee77; }
.cm-s-tiddlywiki div.CodeMirror-selected { background: #eee8d5; color: #333333; }
.cm-s-tiddlywiki.CodeMirror ::selection { background: #eee8d5; color: #333333; }
.cm-s-tiddlywiki .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; color: #333333; }
.cm-s-tiddlywiki .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #eee8d5; color: #333333; }
/*
Original highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #F0F0F0;
}
/* Base color: saturation 0; */
.hljs,
.hljs-subst {
color: #444;
}
.hljs-comment {
color: #888888;
}
.hljs-keyword,
.hljs-attribute,
.hljs-selector-tag,
.hljs-meta-keyword,
.hljs-doctag,
.hljs-name {
font-weight: bold;
}
/* User color: hue: 0 */
.hljs-type,
.hljs-string,
.hljs-number,
.hljs-selector-id,
.hljs-selector-class,
.hljs-quote,
.hljs-template-tag,
.hljs-deletion {
color: #880000;
}
.hljs-title,
.hljs-section {
color: #880000;
font-weight: bold;
}
.hljs-regexp,
.hljs-symbol,
.hljs-variable,
.hljs-template-variable,
.hljs-link,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #BC6060;
}
/* Language color: hue: 90; */
.hljs-literal {
color: #78A960;
}
.hljs-built_in,
.hljs-bullet,
.hljs-code,
.hljs-addition {
color: #397300;
}
/* Meta color: hue: 200 */
.hljs-meta {
color: #1f7199;
}
.hljs-meta-string {
color: #4d99bf;
}
/* Misc effects */
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #f8f8f8;
color: #333333;
-webkit-text-size-adjust:none
}.hljs-comment,
.hljs-quote {
color: #93a1a1;
}/* Solarized Green */
.hljs-keyword,
.hljs-selector-tag,
.hljs-addition {
color: #859900;
}/* Solarized Cyan */
.hljs-number,
.hljs-string,
.hljs-meta .hljs-meta-string,
.hljs-literal,
.hljs-doctag,
.hljs-regexp {
color: #2aa198;
}/* Solarized Blue */
.hljs-title,
.hljs-section,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class {
color: #268bd2;
}/* Solarized Yellow */
.hljs-attribute,
.hljs-attr,
.hljs-variable,
.hljs-template-variable,
.hljs-class .hljs-title,
.hljs-type {
color: #b58900;
}/* Solarized Orange */
.hljs-symbol,
.hljs-bullet,
.hljs-subst,
.hljs-meta,
.hljs-meta .hljs-keyword,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-link {
color: #cb4b16;
}/* Solarized Red */
.hljs-built_in,
.hljs-deletion {
color: #dc322f;
}.hljs-formula {
background: #eee8d5;
}.hljs-emphasis {
font-style: italic;
}.hljs-strong {
font-weight: bold;
}
</style>
</head>
<body class="tc-body">
<section class="tc-story-river tc-static-story-river">
<a name="Refnotes Plugin">
<div class="tc-tiddler-frame tc-tiddler-view-frame tc-tiddler-exists tc-tagged-start tc-tagged-doc" data-tags="start doc" data-tiddler-title="Refnotes Plugin"><div class="tc-tiddler-title"><div class="tc-titlebar"><span class="tc-tiddler-controls"><button aria-expanded="false" aria-label="more" class="tc-btn-invisible tc-btn-%24%3A%2Fcore%2Fui%2FButtons%2Fmore-tiddler-actions" title="More actions"></button><div class=" tc-reveal" hidden="true"></div><button aria-label="edit" class="tc-btn-invisible tc-btn-%24%3A%2Fcore%2Fui%2FButtons%2Fedit" title="Edit this tiddler"></button><button aria-label="close" class="tc-btn-invisible tc-btn-%24%3A%2Fcore%2Fui%2FButtons%2Fclose" title="Close this tiddler"></button></span><span><h2 class="tc-title">Refnotes Plugin</h2></span></div><div class="tc-tiddler-info tc-popup-handle tc-reveal" hidden="true"></div></div><div class=" tc-reveal" hidden="true"></div>
<div class=" tc-reveal"><div class="tc-subtitle"><a class="tc-tiddlylink tc-tiddlylink-missing" href="#"></a>7th November 2021 at 5:00pm</div></div><div class=" tc-reveal">
<div class="tc-tags-wrapper"><span class="tc-tag-list-item" data-tag-title="doc">
<span aria-expanded="false" class="tc-tag-label tc-btn-invisible" draggable="true" style="background-color:;
fill:#333333;
color:#333333;">
doc
</span>
<span class="tc-drop-down tc-reveal" hidden="true"></span></span><span class="tc-tag-list-item" data-tag-title="start">
<span aria-expanded="false" class="tc-tag-label tc-btn-invisible" draggable="true" style="background-color:;
fill:#333333;
color:#333333;">
start
</span>
<span class="tc-drop-down tc-reveal" hidden="true"></span></span></div>
</div>
<span class=" tc-reveal" hidden="true"></span>
<div class="tc-tiddler-body tc-reveal"><p><div class="dbadge"><span class="dbadge-subject">Tiddlywiki</span><span class="dbadge-status dbadge-primary ">5.2.0+</span></div> <div class="dbadge"><span class="dbadge-subject">License</span><span class="dbadge-status dbadge-success ">MIT</span></div> <div class="dbadge"><span class="dbadge-subject">Release</span><span class="dbadge-status dbadge-warning ">1.7.3</span></div> <div class="dbadge"><span class="dbadge-subject">Status</span><span class="dbadge-status dbadge-danger ">in progress</span></div></p><p><span style="float:right;width:96px"><img src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20512%20512%22%20width%3D%22128px%22%20height%3D%22128px%22%20style%3D%22enable-background%3Anew%200%200%20512%20512%22%20xml%3Aspace%3D%22preserve%22%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%2300a8e1%22%20d%3D%22M161.357%20463.055c0%2014.887-12.178%2027.067-27.065%2027.067H35.141c-14.886%200-27.067-12.179-27.067-27.067V48.945c0-14.887%2012.181-27.067%2027.067-27.067h99.152c14.886%200%2027.065%2012.178%2027.065%2027.067v414.11z%22%2F%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%230071ce%22%20d%3D%22M8.075%2074.668h153.288v47.439H8.075zM8.075%20389.9h153.288v47.439H8.075z%22%2F%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%230055b8%22%20d%3D%22M84.718%20340.769a8.073%208.073%200%200%201-8.075-8.075V179.307c0-4.461%203.614-8.075%208.075-8.075s8.075%203.614%208.075%208.075v153.388a8.075%208.075%200%200%201-8.075%208.074zM297.895%20463.055c0%2014.887-12.178%2027.067-27.067%2027.067h-82.404c-14.886%200-27.067-12.179-27.067-27.067V161.317c0-14.885%2012.181-27.066%2027.067-27.066h82.404c14.888%200%2027.067%2012.181%2027.067%2027.066v301.738z%22%2F%3E%0A%20%20%3Ccircle%20style%3D%22fill%3A%23ff9e16%22%20cx%3D%22229.624%22%20cy%3D%22249.081%22%20r%3D%2237.33%22%2F%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%23fff%22%20d%3D%22M263.909%20324.875h-68.565a8.075%208.075%200%200%201-8.075-8.075%208.073%208.073%200%200%201%208.075-8.075h68.565a8.073%208.073%200%200%201%208.075%208.075%208.075%208.075%200%200%201-8.075%208.075zM263.909%20355.954h-68.565a8.073%208.073%200%200%201-8.075-8.075%208.073%208.073%200%200%201%208.075-8.075h68.565a8.073%208.073%200%200%201%208.075%208.075%208.074%208.074%200%200%201-8.075%208.075z%22%2F%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%234bb6aa%22%20d%3D%22M503.003%20437.585c3.844%2014.379-4.776%2029.293-19.155%2033.14l-69.095%2018.477c-14.381%203.847-29.296-4.772-33.141-19.152L279.406%2087.908c-3.846-14.38%204.774-29.293%2019.155-33.139l69.095-18.479c14.381-3.847%2029.295%204.772%2033.139%2019.152l102.208%20382.143z%22%2F%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%230071ce%22%20d%3D%22m414.191%20105.523-121.392%2032.463%2011.104%2041.512%20121.39-32.463-11.102-41.512zm18.752%2070.113-121.39%2032.462%2011.102%2041.512%20121.391-32.463-11.103-41.511z%22%2F%3E%0A%20%20%3Ccircle%20style%3D%22fill%3A%23fff%22%20cx%3D%22428.413%22%20cy%3D%22401.701%22%20r%3D%2222.863%22%2F%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%23fff%22%20d%3D%22M385.218%20367.355a8.078%208.078%200%200%201-7.795-5.991%208.074%208.074%200%200%201%205.715-9.887L442.51%20335.6c4.299-1.154%208.734%201.406%209.887%205.715a8.074%208.074%200%200%201-5.715%209.887L387.31%20367.08c-.698.186-1.4.275-2.092.275z%22%2F%3E%0A%20%20%3Cpath%20style%3D%22fill%3A%231e252b%22%20d%3D%22M510.804%20435.5%20408.597%2053.357c-4.101-15.344-18.079-26.059-33.989-26.059a34.97%2034.97%200%200%200-9.039%201.192l-69.095%2018.479c-9.04%202.417-16.611%208.233-21.318%2016.38-4.708%208.144-5.969%2017.608-3.552%2026.647l10.143%2037.927a35.005%2035.005%200%200%200-10.921-1.745h-82.404a34.933%2034.933%200%200%200-18.992%205.597v-82.83c0-19.377-15.764-35.142-35.14-35.142H35.14C15.765%2013.805%200%2029.568%200%2048.945v414.109c0%2019.377%2015.765%2035.142%2035.142%2035.142h99.152c10.877%200%2020.614-4.968%2027.065-12.754%206.452%207.785%2016.189%2012.754%2027.067%2012.754h82.404c19.377%200%2035.142-15.765%2035.142-35.142V218.482l67.841%20253.655c4.102%2015.343%2018.081%2026.058%2033.99%2026.058%203.043%200%206.084-.401%209.039-1.191l69.096-18.477c18.714-5.008%2029.869-24.309%2024.866-43.027zm-357.522%2027.555c0%2010.472-8.519%2018.992-18.989%2018.992H35.141c-10.471-.001-18.991-8.521-18.991-18.992v-17.647h137.132v17.647zm0-33.797H16.15v-31.285h137.132v31.285zm0-47.435H16.15V130.178h137.132v251.645zm0-267.795H16.15V82.743h137.132v31.285zm0-47.436H16.15V48.945c0-10.472%208.52-18.992%2018.992-18.992h99.152c10.471%200%2018.989%208.52%2018.989%2018.992v17.647h-.001zM289.82%20463.055c0%2010.472-8.52%2018.992-18.992%2018.992h-82.404c-10.472%200-18.992-8.52-18.992-18.992V161.317c0-10.472%208.52-18.991%2018.992-18.991h82.404c10.472%200%2018.992%208.519%2018.992%2018.991v301.738zm-2.613-377.233c-1.303-4.871-.616-9.983%201.933-14.393%202.55-4.41%206.637-7.556%2011.509-8.859l69.096-18.479a18.839%2018.839%200%200%201%204.866-.643c8.609%200%2016.17%205.789%2018.387%2014.08l11.308%2042.281L298.515%20128.1l-11.308-42.278zm15.48%2057.879%20105.79-28.291%206.93%2025.909-105.79%2028.291-6.93-25.909zm11.102%2041.512%20105.791-28.291%203.477%2013-105.791%2028.291-3.477-13zm7.65%2028.601%20105.79-28.291%206.931%2025.908-105.791%2028.291-6.93-25.908zm160.322%20249.111-69.096%2018.477c-1.592.426-3.23.643-4.866.643-8.609%200-16.172-5.79-18.389-14.08l-56.872-212.641%20105.791-28.291%2056.872%20212.638c2.705%2010.115-3.324%2020.548-13.44%2023.254zM229.626%20203.676c-25.036%200-45.404%2020.369-45.404%2045.405s20.368%2045.404%2045.404%2045.404c25.037%200%2045.406-20.368%2045.406-45.404s-20.369-45.405-45.406-45.405zm0%2074.658c-16.13%200-29.254-13.123-29.254-29.254s13.124-29.255%2029.254-29.255c16.131%200%2029.256%2013.123%2029.256%2029.255-.001%2016.131-13.124%2029.254-29.256%2029.254z%22%2F%3E%0A%3C%2Fsvg%3E"></span></p><h2 class="">What is Refnotes plugin?</h2><blockquote class="tc-quote"><p>
<p>Refnotes is a Tiddlywiki plugin to create and manage footnotes, abbreviations, citations, and references. Refnotes can create bibliography, but for the best performance, and to use import bibtex entries, the use of the official <strong>bibtex importer</strong> plugin is required.</p>
<span class=" tc-reveal" hidden="true"></span>
</p><p><div class="alert alert-warning " style="width:80%;">
Refnotes is a reference manager tool that allows you to maintain a "personal library" of references, citations, footnotes and abbreviations in Tiddlywiki.
</div></p></blockquote><h2 class="">Tutorials</h2><blockquote><div>The <a class="tc-tiddlylink tc-tiddlylink-resolves" href="#Refnotes%20Tutorial">Refnotes Tutorial</a> is the starting point to learn more about plugin features, help, demo and examples. See below for online pages.</div></blockquote><h2 class="">Code and demo</h2><ul><li>Demo: <a class="tc-tiddlylink-external" href="https://kookma.github.io/TW-Refnotes" rel="noopener noreferrer" target="_blank">https://kookma.github.io/TW-Refnotes</a></li><li>Code: <a class="tc-tiddlylink-external" href="https://github.com/kookma/TW-Refnotes" rel="noopener noreferrer" target="_blank">https://github.com/kookma/TW-Refnotes</a></li></ul><p>
<h2>History</h2>
<blockquote><h2 class=""></h2><h2 class="">Release 1.7.3</h2><ul><li><strong>Nov 5th, 2021</strong></li><li>[NEW] Acronyms with space are allowed</li><li>[FIXED] The abbr and showabbrs handle terms with space like <code>FL DMPRS</code></li><li>[FIXED] The <code>abbr</code> macro parameters extraction enhanced. Thanks to <a class="tc-tiddlylink-external" href="https://talk.tiddlywiki.org/t/extract-macro-parameters-which-contain-spaces/1440/5?u=mohammad" rel="noopener noreferrer" target="_blank">sull-vitsy</a></li></ul><p>For all changes see <a class="tc-tiddlylink tc-tiddlylink-resolves" href="#ChangeLog">ChangeLog</a></p></blockquote>
<h2>Install</h2>
<blockquote><p>From the below two categories of installing <strong>Refnotes</strong> plugin, select any suitable method you like. </p><p><em>It is highly recommended to backup your data before trying any new plugin! Do it before installing refnotes.</em></p><p>
<details open="true">
<summary class="h6">A. Installing plugin for Tiddlywiki single html file</summary>
<div class="alert border-info"><p>Tiddlywiki as a single html file (like <em>emtpy.html</em>) is the most common form of Tiddlywiki in use. To install the plugin on a single html file, follow any of the below procedures.</p><dl><dt>I. Drag and drop</dt></dl><p>The simplest method, also called <strong>standalone configuration</strong>, is the drag and drop method.</p><ol><li>Open your Tiddlywiki in a browser</li><li>Drag and drop <a class="tc-tiddlylink tc-tiddlylink-resolves" href="#%24%3A%2Fplugins%2Fkookma%2Frefnotes">$:/plugins/kookma/refnotes</a> into your wiki</li><li>Save and reload your wiki</li></ol><dl><dt>II. Use plugin library</dt></dl><p>Another simple method is to have the <strong>Kookma Plugin Library </strong> which acts exactly like Official Plugin Library</p><ol><li>Drag and drop <a class="tc-tiddlylink tc-tiddlylink-resolves" href="#%24%3A%2Fconfig%2FKookmaPluginLibrary">$:/config/KookmaPluginLibrary</a> into your wiki</li><li>In your wiki, open <a class="tc-tiddlylink tc-tiddlylink-shadow" href="#%24%3A%2FControlPanel">$:/ControlPanel</a>, <strong>Plugins</strong> tab and the click on big button <strong>Get more plugins</strong></li><li>Click open library under <strong>Kookma Plugin Library</strong></li><li>Find <strong>refnotes</strong> plugin, and click install, or reinstall if you update <strong>refnotes</strong></li><li>Save and reload your wiki</li></ol></div>
</details>
</p><p>
<details closed="true">
<summary class="h6">B. Installing plugin for Tiddlywiki on Node.js</summary>
<div class="alert border-danger"><p><strong>III. Tiddlywiki + Node.js</strong></p><p>There are two methods in which custom plugins that are not part of official Tiddlywiki's plugin library can be installed when using Tiddlywiki under Node.js (also called <strong>client-server configuration</strong>).</p><ul><li><strong>local</strong> installation in only a specific wiki</li><li><strong>global</strong> installation on the server, so every wiki running on Node.js has access to the plugin</li></ul><p><div class="alert alert-secondary " style="width:100%;">
<strong>III.A Local installation</strong><br>
<br>
For <strong>local</strong> installation under Node.js<br>
i. download the <strong>refnotes</strong> source folder from GitHub<br>
ii. put the <strong>refnotes</strong> source folder directly into local <code>plugins</code> folder under your wiki folder,<br>
iii. if you have not the <code>plugins</code> folder, create it under your own wiki folder.<br>
iv. if server is runing, stop it and restart again<br>
v. finished, it is now available in your wiki!
</div></p><p>For details on how download a plugin from GitHub, see <a class="tc-tiddlylink tc-tiddlylink-resolves" href="#Downloading%20Plugin%20from%20GitHub">Downloading Plugin from GitHub</a></p><p><div class="alert alert-warning " style="width:100%;">
<strong>III.B Global installation</strong><br>
<br>
For <strong>global</strong> installation under Node.js<br>
<br>
i. download the <strong>refnotes</strong> source folder from GitHub<br>
ii. put the <strong>refnotes</strong> source folder into <code>kookm</code> folder (publisher folder) under your server <code>plugins</code> folder<br>
iii. if you have not the <code>kookma</code> folder (publisher folder), create it under your server <code>plugins</code> folder<br>
vi. finished installing for server!
</div></p><p><strong>Extra step for global installation (III.B)</strong><br></p><p>After installing the a plugin <strong>globally</strong> in your Node.js server (the client-server configuration), to use it in any specific wiki, add it to the <code>tiddlywiki.info</code> file of that wiki:</p><ol><li>Open the specific wiki folder of choice</li><li>Edit the <code>tiddlywiki.info</code> file (it is in JSON format) and locate the plugins section (see below)</li><li>Add entries corresponding to the plugins you wish to use. Here add <strong>refnotes</strong>.</li><li>Take care to retain commas to separate items, but do not terminate the last item in a list with a comma <div><p><pre>{
"plugins": [
"tiddlywiki/codemirror",
"kookma/refnotes"
],
...
}</pre>
</p></div></li><li>if server is runing, <strong>stop it and restart</strong> again</li></ol><p>Detailed procedure can be found in <a class="tc-tiddlylink tc-tiddlylink-resolves" href="#More%20on%20Client-Server%20Installation">More on Client-Server Installation</a></p></div>
</details>
</p></blockquote>
<h2>Acknowledgement</h2>
<blockquote><p>I would like to acknowledge the below people for their great helps.</p><ul><li>Thomas Elmiger, who is the developer of <a class="tc-tiddlylink-external" href="https://tid.li/tw5/hacks.html#Extract%20Macro" rel="noopener noreferrer" target="_blank">extract macro</a>. The idea of searching tiddlers and extract text snippets inspired from his work.</li><li>Jan, developer of <a class="tc-tiddlylink-external" href="http://slidesnstories.tiddlyspot.com" rel="noopener noreferrer" target="_blank">slides and stories</a></li><li>Simon Huber, for all his help through TW forum</li><li>Jeremy Ruston</li><li>Jed Carty</li><li>Rizwan Ibnishak</li><li>Antony Muscio</li><li>Josiah Hincks</li><li>Diego Mesa</li><li>Tobias Beer</li><li>Ton Gerner</li><li><a class="tc-tiddlylink-external" href="https://talk.tiddlywiki.org/t/extract-macro-parameters-which-contain-spaces/1440/5?u=mohammad" rel="noopener noreferrer" target="_blank">sull-vitsy</a> for the help on macro parameters extraction</li><li>and all kind Tiddywikians in TW forum</li></ul></blockquote>
</p></div>
<div class="tc-tiddler-plugin-info tc-reveal"><p>
</p></div>
</div>
</a>
</section>
</body>
</html>
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="generator" content="TiddlyWiki" />
<meta name="tiddlywiki-version" content="5.2.1-prerelease" />
<meta name="format-detection" content="telephone=no">
<link id="faviconLink" rel="shortcut icon" href="favicon.ico">
<title>Refnotes 1.7.3
— references, citations, footnotes and abbreviations in Tiddlywiki
</title>
<div id="styleArea">
<style data-tiddler-title="$:/boot/boot.css" data-tiddler-type="text/css" type="text/css">/*
Basic styles used before we boot up the parsing engine
*/
/*
Error message and password prompt
*/
.tc-error-form {
font-family: sans-serif;
color: #fff;
z-index: 20000;
position: fixed;
background-color: rgb(255, 75, 75);
border: 8px solid rgb(255, 0, 0);
border-radius: 8px;
width: 50%;
margin-left: 25%;
margin-top: 4em;
padding: 0 2em 1em 2em;
}
.tc-error-form h1 {
text-align: center;
}
.tc-error-prompt {
text-align: center;
color: #000;
}
.tc-error-message {
overflow: auto;
max-height: 40em;
padding-right: 1em;
margin: 1em 0;
white-space: pre-line;
}
.tc-password-wrapper {
font-family: sans-serif;
z-index: 20000;
position: fixed;
text-align: center;
width: 200px;
top: 4em;
left: 50%;
margin-left: -144px; /* - width/2 - paddingHorz/2 - border */
padding: 16px 16px 16px 16px;
border-radius: 8px;
}
.tc-password-wrapper {
color: #000;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
background-color: rgb(197, 235, 183);
border: 8px solid rgb(164, 197, 152);
}
.tc-password-wrapper form {
text-align: left;
}
.tc-password-wrapper h1 {
font-size: 16px;
line-height: 20px;
padding-bottom: 16px;
}
.tc-password-wrapper input {
width: 100%;
}
</style>
</div>
<style type="text/css">
.tc-sidebar-header {
text-shadow: 0 1px 0 rgba(255,255,255, 0.8);
}.tc-tiddler-info {
-webkit-box-shadow: inset 1px 2px 3px rgba(0,0,0,0.1);
-moz-box-shadow: inset 1px 2px 3px rgba(0,0,0,0.1);
box-shadow: inset 1px 2px 3px rgba(0,0,0,0.1);
}@media screen {
.tc-tiddler-frame {
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
}
}@media (max-width: 959px) {
.tc-tiddler-frame {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
}.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {
-webkit-transition: fill 150ms ease-in-out;
-moz-transition: fill 150ms ease-in-out;
transition: fill 150ms ease-in-out;
}.tc-tiddler-controls button.tc-selected,
.tc-page-controls button.tc-selected {
-webkit-filter: drop-shadow(0px -1px 2px rgba(0,0,0,0.25));
-moz-filter: drop-shadow(0px -1px 2px rgba(0,0,0,0.25));
filter: drop-shadow(0px -1px 2px rgba(0,0,0,0.25));
}.tc-tiddler-frame input.tc-edit-texteditor {
-webkit-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
}.tc-edit-tags {
-webkit-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15);
}.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
border: none;
outline: none;
}textarea.tc-edit-texteditor {
font-family: ;
}canvas.tc-edit-bitmapeditor {
-webkit-box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
}.tc-drop-down {
border-radius: 4px;
-webkit-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
}.tc-block-dropdown {
border-radius: 4px;
-webkit-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
}.tc-modal {
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
-moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
box-shadow: 0 3px 7px rgba(0,0,0,0.3);
}.tc-modal-footer {
border-radius: 0 0 6px 6px;
-webkit-box-shadow: inset 0 1px 0 #fff;
-moz-box-shadow: inset 0 1px 0 #fff;
box-shadow: inset 0 1px 0 #fff;
;
}.tc-alert {
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.6);
-moz-box-shadow: 0 3px 7px rgba(0,0,0,0.6);
box-shadow: 0 3px 7px rgba(0,0,0,0.6);
}.tc-notification {
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
-moz-box-shadow: 0 3px 7px rgba(0,0,0,0.3);
box-shadow: 0 3px 7px rgba(0,0,0,0.3);
text-shadow: 0 1px 0 rgba(255,255,255, 0.8);
}.tc-sidebar-lists .tc-tab-set .tc-tab-divider {
border-top: none;
height: 1px;
background-image: linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -o-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -moz-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
background-image: -ms-linear-gradient(left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%);
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {
background-image: linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -o-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -moz-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
background-image: -ms-linear-gradient(left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%);
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {
background-image: linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -o-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -moz-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
background-image: -ms-linear-gradient(left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%);
}.tc-message-box img {
-webkit-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
-moz-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
}.tc-plugin-info {
-webkit-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
-moz-box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
box-shadow: 1px 1px 3px rgba(0,0,0,0.5);
}
/*
** Start with the normalize CSS reset, and then belay some of its effects
*//*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
/*
Document
========
*/
/**
Use a better box model (opinionated).
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
/**
Use a more readable tab size (opinionated).
*/
:root {
-moz-tab-size: 4;
tab-size: 4;
}
/**
1. Correct the line height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/*
Sections
========
*/
/**
Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
*/
body {
font-family:
system-ui,
-apple-system, /* Firefox supports this but not yet `system-ui` */
'Segoe UI',
Roboto,
Helvetica,
Arial,
sans-serif,
'Apple Color Emoji',
'Segoe UI Emoji';
}
/*
Grouping content
================
*/
/**
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
*/
hr {
height: 0; /* 1 */
color: inherit; /* 2 */
}
/*
Text-level semantics
====================
*/
/**
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr[title] {
text-decoration: underline dotted;
}
/**
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
2. Correct the odd 'em' font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family:
ui-monospace,
SFMono-Regular,
Consolas,
'Liberation Mono',
Menlo,
monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
Prevent 'sub' and 'sup' elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
Tabular data
============
*/
/**
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
*/
table {
text-indent: 0; /* 1 */
border-color: inherit; /* 2 */
}
/*
Forms
=====
*/
/**
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
Remove the inheritance of text transform in Edge and Firefox.
1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}
/**
Remove the inner border and padding in Firefox.
*/
::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
Restore the focus styles unset by the previous rule.
*/
:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
Remove the additional ':invalid' styles in Firefox.
See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737
*/
:-moz-ui-invalid {
box-shadow: none;
}
/**
Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.
*/
legend {
padding: 0;
}
/**
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/**
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/**
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to 'inherit' in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/*
Interactive
===========
*/
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
*, input[type="search"] {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}input[type="search"] {
outline-offset: initial;
}html button {
line-height: 1.2;
color: ;
fill: ;
background: ;
border-color: ;
}button:disabled svg {
fill: #bbb;
}/*
** Basic element styles
*/html, body {
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;;
text-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}html:-webkit-full-screen {
background-color: #f4f4f4;
}body.tc-body {
font-size: 14px;
line-height: 20px;
word-wrap: break-word;
color: #333333;
background-color: #f4f4f4;
fill: #333333;
}/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/h1 {
font-size: 2em;
}h1, h2, h3, h4, h5, h6 {
line-height: 1.2;
font-weight: normal;
}pre {
display: block;
margin-top: 1em;
margin-bottom: 1em;
word-break: normal;
word-wrap: break-word;
white-space: pre-wrap;
background-color: #f5f5f5;
border: 1px solid #cccccc;
padding: 0 3px 2px;
border-radius: 3px;
font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
}code {
color: #dd1144;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
white-space: pre-wrap;
padding: 0 3px 2px;
border-radius: 3px;
font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
}blockquote {
border-left: 5px solid #bbb;
margin-left: 25px;
padding-left: 10px;
quotes: "\201C""\201D""\2018""\2019";
}blockquote > div {
margin-top: 1em;
margin-bottom: 1em;
}blockquote.tc-big-quote {
font-family: Georgia, serif;
position: relative;
background: #f5f5f5;
border-left: none;
margin-left: 50px;
margin-right: 50px;
padding: 10px;
border-radius: 8px;
}blockquote.tc-big-quote cite:before {
content: "\2014 \2009";
}blockquote.tc-big-quote:before {
font-family: Georgia, serif;
color: #bbb;
content: open-quote;
font-size: 8em;
line-height: 0.1em;
margin-right: 0.25em;
vertical-align: -0.4em;
position: absolute;
left: -50px;
top: 42px;
}blockquote.tc-big-quote:after {
font-family: Georgia, serif;
color: #bbb;
content: close-quote;
font-size: 8em;
line-height: 0.1em;
margin-right: 0.25em;
vertical-align: -0.4em;
position: absolute;
right: -80px;
bottom: -20px;
}dl dt {
font-weight: bold;
margin-top: 6px;
}button, textarea, input, select {
outline-color: #5778d8;
}textarea,
input[type=text],
input[type=search],
input[type=""],
input:not([type]) {
color: #333333;
background: #ffffff;
}input[type="checkbox"] {
vertical-align: middle;
}input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-results-button,
input[type="search"]::-webkit-search-results-decoration {
-webkit-appearance:none;
}.tc-muted {
color: #bbb;
}svg.tc-image-button {
padding: 0px 1px 1px 0px;
}.tc-icon-wrapper > svg {
width: 1em;
height: 1em;
}kbd {
display: inline-block;
padding: 3px 5px;
font-size: 0.8em;
line-height: 1.2;
color: #333333;
vertical-align: middle;
background-color: #ffffff;
border: solid 1px #bbb;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}::selection {
background-color: Highlight;
color: HighlightText;
background-color: ;
color: ;
}/*
Markdown likes putting code elements inside pre elements
*/
pre > code {
padding: 0;
border: none;
background-color: inherit;
color: inherit;
}table {
border: 1px solid #dddddd;
width: auto;
max-width: 100%;
caption-side: bottom;
margin-top: 1em;
margin-bottom: 1em;
/* next 2 elements needed, since normalize 8.0.1 */
border-collapse: collapse;
border-spacing: 0;
}table th, table td {
padding: 0 7px 0 7px;
border-top: 1px solid #dddddd;
border-left: 1px solid #dddddd;
}table thead tr td, table th {
background-color: #f0f0f0;
font-weight: bold;
}table tfoot tr td {
background-color: #a8a8a8;
}.tc-csv-table {
white-space: nowrap;
}.tc-tiddler-frame img,
.tc-tiddler-frame svg,
.tc-tiddler-frame canvas,
.tc-tiddler-frame embed,
.tc-tiddler-frame iframe {
max-width: 100%;
}.tc-tiddler-body > embed,
.tc-tiddler-body > iframe {
width: 100%;
height: 600px;
}/*
** Links
*/button.tc-tiddlylink,
a.tc-tiddlylink {
text-decoration: none;
font-weight: 500;
color: #5778d8;
-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */
}.tc-sidebar-lists a.tc-tiddlylink {
color: #999999;
}.tc-sidebar-lists a.tc-tiddlylink:hover {
color: #444444;
}button.tc-tiddlylink:hover,
a.tc-tiddlylink:hover {
text-decoration: underline;
}a.tc-tiddlylink-resolves {
}a.tc-tiddlylink-shadow {
font-weight: bold;
}a.tc-tiddlylink-shadow.tc-tiddlylink-resolves {
font-weight: normal;
}a.tc-tiddlylink-missing {
font-style: italic;
}a.tc-tiddlylink-external {
text-decoration: underline;
color: #0000ee;
background-color: inherit;
}a.tc-tiddlylink-external:visited {
color: #0000aa;
background-color: inherit;
}a.tc-tiddlylink-external:hover {
color: inherit;
background-color: inherit;
}.tc-drop-down a.tc-tiddlylink:hover {
color: #ffffff;
}/*
** Drag and drop styles
*/.tc-tiddler-dragger {
position: relative;
z-index: -10000;
}.tc-tiddler-dragger-inner {
position: absolute;
top: -1000px;
left: -1000px;
display: inline-block;
padding: 8px 20px;
font-size: 16.9px;
font-weight: bold;
line-height: 20px;
color: #ffffff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 1);
white-space: nowrap;
vertical-align: baseline;
background-color: #333333;
border-radius: 20px;
}.tc-tiddler-dragger-cover {
position: absolute;
background-color: #f4f4f4;
}.tc-page-container > .tc-dropzone {
min-height: 100vh;
}.tc-dropzone {
position: relative;
}.tc-dropzone.tc-dragover:before {
z-index: 10000;
display: block;
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgba(0,200,0,0.7);
text-align: center;
content: "Drop here (or use the 'Escape' key to cancel)";
}.tc-droppable > .tc-droppable-placeholder {
display: none;
}.tc-droppable.tc-dragover > .tc-droppable-placeholder {
display: block;
border: 2px dashed rgba(0,200,0,0.7);
}.tc-draggable {
cursor: move;
}.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,
.tc-links-draggable-list .tc-droppable-placeholder {
line-height: 2em;
height: 2em;
}.tc-sidebar-tab-open-item {
position: relative;
}.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {
font-size: 0.7em;
fill: #bbb;
}/*
** Plugin reload warning
*/.tc-plugin-reload-warning {
z-index: 1000;
display: block;
position: fixed;
top: 0;
left: 0;
right: 0;
background: #ffe476;
text-align: center;
}/*
** Buttons
*/button svg, button img, label svg, label img {
vertical-align: middle;
}.tc-btn-invisible {
padding: 0;
margin: 0;
background: none;
border: none;
cursor: pointer;
color: #333333;
fill: #333333;
}button:disabled.tc-btn-invisible {
cursor: default;
color: #bbb;
}.tc-btn-boxed {
font-size: 0.6em;
padding: 0.2em;
margin: 1px;
background: none;
border: 1px solid #cccccc;
border-radius: 0.25em;
}html body.tc-body .tc-btn-boxed svg {
font-size: 1.6666em;
}.tc-btn-boxed:hover {
background: #bbb;
color: #ffffff;
}html body.tc-body .tc-btn-boxed:hover svg {
fill: #ffffff;
}.tc-btn-rounded {
font-size: 0.5em;
line-height: 2;
padding: 0em 0.3em 0.2em 0.4em;
margin: 1px;
border: 1px solid #bbb;
background: #bbb;
color: #ffffff;
border-radius: 2em;
}html body.tc-body .tc-btn-rounded svg {
font-size: 1.6666em;
fill: #ffffff;
}.tc-btn-rounded:hover {
border: 1px solid #bbb;
background: #ffffff;
color: #bbb;
}html body.tc-body .tc-btn-rounded:hover svg {
fill: #bbb;
}.tc-btn-icon svg {
height: 1em;
width: 1em;
fill: #bbb;
}.tc-btn-text {
margin-left: 7px;
}/* used for documentation "fake" buttons */
.tc-btn-standard {
line-height: 1.8;
color: #667;
background-color: #e0e0e0;
border: 1px solid #888;
padding: 2px 1px 2px 1px;
margin: 1px 4px 1px 4px;
}.tc-btn-big-green {
display: inline-block;
padding: 8px;
margin: 4px 8px 4px 8px;
background: #34c734;
color: #ffffff;
fill: #ffffff;
border: none;
border-radius: 2px;
font-size: 1.2em;
line-height: 1.4em;
text-decoration: none;
}.tc-btn-big-green svg,
.tc-btn-big-green img {
height: 2em;
width: 2em;
vertical-align: middle;
fill: #ffffff;
}.tc-primary-btn {
background: #5778d8;
}.tc-sidebar-lists input {
color: #333333;
}.tc-sidebar-lists button {
color: #333333;
fill: #333333;
}.tc-sidebar-lists button.tc-btn-mini {
color: #c0c0c0;
}.tc-sidebar-lists button.tc-btn-mini:hover {
color: #444444;
}.tc-sidebar-lists button small {
color: #333333;
}button svg.tc-image-button, button .tc-image-button img {
height: 1em;
width: 1em;
}.tc-unfold-banner {
position: absolute;
padding: 0;
margin: 0;
background: none;
border: none;
width: 100%;
width: calc(100% + 2px);
margin-left: -43px;
text-align: center;
border-top: 2px solid #f8f8f8;
margin-top: 4px;
}.tc-unfold-banner:hover {
background: #f8f8f8;
border-top: 2px solid #dddddd;
}.tc-unfold-banner svg, .tc-fold-banner svg {
height: 0.75em;
fill: #cccccc;
}.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {
fill: #888888;
}.tc-fold-banner {
position: absolute;
padding: 0;
margin: 0;
background: none;
border: none;
width: 23px;
text-align: center;
margin-left: -35px;
top: 6px;
bottom: 6px;
}.tc-fold-banner:hover {
background: #f8f8f8;
}@media (max-width: 959px) {.tc-unfold-banner {
position: static;
width: calc(100% + 59px);
}.tc-fold-banner {
width: 16px;
margin-left: -16px;
font-size: 0.75em;
}}/*
** Tags and missing tiddlers
*/.tc-tag-list-item {
position: relative;
display: inline-block;
}.tc-tags-wrapper {
margin: 4px 0 14px 0;
}.tc-tags-wrapper .tc-tag-list-item {
margin-right: 7px;
}.tc-missing-tiddler-label {
font-style: italic;
font-weight: normal;
display: inline-block;
font-size: 11.844px;
line-height: 14px;
white-space: nowrap;
vertical-align: baseline;
}.tc-block-tags-dropdown > .tc-btn-invisible:hover {
background-color: #5778d8;
}button.tc-tag-label, span.tc-tag-label {
display: inline-block;
padding: 0.16em 0.7em;
font-size: 0.9em;
font-weight: normal;
line-height: 1.2em;
color: #ffffff;
white-space: nowrap;
vertical-align: baseline;
background-color: #ec6;
border-radius: 1em;
}.tc-sidebar-scrollable .tc-tag-label {
text-shadow: none;
}.tc-untagged-separator {
width: 10em;
left: 0;
margin-left: 0;
border: 0;
height: 1px;
background: #d8d8d8;
}button.tc-untagged-label {
background-color: #999999;
}.tc-tag-label svg, .tc-tag-label img {
height: 1em;
width: 1em;
margin-right: 3px;
margin-bottom: 1px;
vertical-align: bottom;
}.tc-edit-tags button.tc-remove-tag-button svg {
font-size: 0.7em;
vertical-align: middle;
}.tc-tag-manager-table .tc-tag-label {
white-space: normal;
}.tc-tag-manager-tag {
width: 100%;
}button.tc-btn-invisible.tc-remove-tag-button {
outline: none;
}.tc-tag-button-selected,
.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {
background-color: #5778d8;
color: #ffffff;
}/*
** Page layout
*/.tc-topbar {
position: fixed;
z-index: 1200;
}.tc-topbar-left {
left: 29px;
top: 5px;
}.tc-topbar-right {
top: 5px;
right: 29px;
}@media (max-width: 959px) {.tc-topbar-right {
right: 10px;
}}.tc-topbar button {
padding: 8px;
}.tc-topbar svg {
fill: #bbb;
}.tc-topbar button:hover svg {
fill: #333333;
}@media (max-width: 959px) {.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {
transform: rotate(-90deg);
}}.tc-sidebar-header {
color: #acacac;
fill: #acacac;
}.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {
font-weight: normal;
}.tc-sidebar-header .tc-sidebar-lists p {
margin-top: 3px;
margin-bottom: 3px;
}.tc-sidebar-header .tc-missing-tiddler-label {
color: #acacac;
}.tc-advanced-search input {
width: 60%;
}.tc-search a svg {
width: 1.2em;
height: 1.2em;
vertical-align: middle;
}.tc-page-controls {
margin-top: 14px;
font-size: 1.5em;
}.tc-page-controls .tc-drop-down {
font-size: 1rem;
}.tc-page-controls button {
margin-right: 0.5em;
}.tc-page-controls a.tc-tiddlylink:hover {
text-decoration: none;
}.tc-page-controls img {
width: 1em;
}.tc-page-controls svg {
fill: #aaaaaa;
}.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {
fill: #000000;
}.tc-sidebar-lists .tc-menu-list-item {
white-space: nowrap;
}.tc-menu-list-count {
font-weight: bold;
}.tc-menu-list-subitem {
padding-left: 7px;
}.tc-story-river {
position: relative;
}@media (max-width: 959px) {.tc-sidebar-header {
padding: 14px;
min-height: 32px;
margin-top: 0px;
transition: min-height 400ms ease-in-out, padding-top 400ms ease-in-out, padding-bottom 400ms ease-in-out;
}
.tc-story-river {
position: relative;
padding: 0;
}
}@media (min-width: 960px) {.tc-message-box {
margin: 21px -21px 21px -21px;
}.tc-sidebar-scrollable {
position: fixed;
top: 0px;
left: 770px;
bottom: 0;
right: 0;
overflow-y: auto;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
margin: 0 0 0 -42px;
padding: 71px 0 28px 42px;
}html[dir="rtl"] .tc-sidebar-scrollable {
left: auto;
right: 770px;
}.tc-story-river {
position: relative;
left: 0px;
top: 0px;
width: 770px;
padding: 42px 42px 42px 42px;
}.tc-story-river.tc-static-story-river {
margin-right: 0;
padding-right: 42px;
}}@media print {body.tc-body {
background-color: transparent;
}.tc-sidebar-header, .tc-topbar {
display: none;
}.tc-story-river {
margin: 0;
padding: 0;
}.tc-story-river .tc-tiddler-frame {
margin: 0;
border: none;
padding: 0;
}
}/*
** Tiddler styles
*/.tc-tiddler-frame {
position: relative;
margin-bottom: 28px;
background-color: #ffffff;
border: 1px solid #ffffff;
}
.tc-tiddler-info {
overflow: hidden;
padding: 14px 42px 14px 42px;
background-color: #f8f8f8;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}.tc-tiddler-info p {
margin-top: 3px;
margin-bottom: 3px;
}.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {
background-color: #f8f8f8;
border-bottom: 1px solid #f8f8f8;
}@media (max-width: 959px) {.tc-tiddler-info {
padding: 14px 14px 14px 14px;
}}.tc-view-field-table {
width: 100%;
}.tc-view-field-name {
width: 1%; /* Makes this column be as narrow as possible */
text-align: right;
font-style: italic;
font-weight: normal;
}.tc-view-field-value {
word-break: break-all;
}@media (max-width: 959px) {
.tc-tiddler-frame {
padding: 14px 14px 14px 14px;
margin-bottom: .5em;
}.tc-tiddler-info {
margin: 0 -14px 0 -14px;
}
}@media (min-width: 960px) {
.tc-tiddler-frame {
padding: 28px 42px 42px 42px;
width: 686px;
border-radius: 2px;
}.tc-tiddler-info {
margin: 0 -42px 0 -42px;
}
}.tc-site-title,
.tc-titlebar {
font-weight: normal;
font-size: 2.35em;
line-height: 1.35em;
color: #182955;
margin: 0;
}.tc-site-title {
color: #182955;
}.tc-tiddler-title-icon {
vertical-align: middle;
margin-right: .1em;
}.tc-system-title-prefix {
color: #bbb;
}.tc-titlebar h2 {
font-size: 1em;
display: inline;
}.tc-titlebar img {
height: 1em;
}.tc-subtitle {
font-size: 0.9em;
color: #c0c0c0;
font-weight: normal;
}.tc-subtitle .tc-tiddlylink {
margin-right: .3em;
}.tc-tiddler-missing .tc-title {
font-style: italic;
font-weight: normal;
}.tc-tiddler-frame .tc-tiddler-controls {
float: right;
}.tc-tiddler-controls .tc-drop-down {
font-size: 0.6em;
}.tc-tiddler-controls .tc-drop-down .tc-drop-down {
font-size: 1em;
}.tc-tiddler-controls > span > button,
.tc-tiddler-controls > span > span > button,
.tc-tiddler-controls > span > span > span > button {
vertical-align: baseline;
margin-left:5px;
}.tc-tiddler-controls button svg, .tc-tiddler-controls button img,
.tc-search button svg, .tc-search a svg {
fill: #cccccc;
}.tc-tiddler-controls button svg, .tc-tiddler-controls button img {
height: 0.75em;
}.tc-search button svg, .tc-search a svg {
height: 1.2em;
width: 1.2em;
margin: 0 0.25em;
}.tc-tiddler-controls button.tc-selected svg,
.tc-page-controls button.tc-selected svg {
fill: #444444;
}.tc-tiddler-controls button.tc-btn-invisible:hover svg,
.tc-search button:hover svg, .tc-search a:hover svg {
fill: #888888;
}@media print {
.tc-tiddler-controls {
display: none;
}
}.tc-tiddler-help { /* Help prompts within tiddler template */
color: #bbb;
margin-top: 14px;
}.tc-tiddler-help a.tc-tiddlylink {
color: #888888;
}.tc-tiddler-frame .tc-edit-texteditor {
width: 100%;
margin: 4px 0 4px 0;
}.tc-tiddler-frame input.tc-edit-texteditor,
.tc-tiddler-frame textarea.tc-edit-texteditor,
.tc-tiddler-frame iframe.tc-edit-texteditor {
padding: 3px 3px 3px 3px;
border: 1px solid #cccccc;
line-height: 1.3em;
-webkit-appearance: none;
font-family: ;
}.tc-tiddler-frame input.tc-edit-texteditor,
.tc-tiddler-frame textarea.tc-edit-texteditor {
background-color: #f8f8f8;
}.tc-tiddler-frame iframe.tc-edit-texteditor {
background-color: #ffffff;
}.tc-tiddler-frame .tc-binary-warning {
width: 100%;
height: 5em;
text-align: center;
padding: 3em 3em 6em 3em;
background: #ffe476;
border: 1px solid #b99e2f;
}canvas.tc-edit-bitmapeditor {
border: 6px solid #ffffff;
cursor: crosshair;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
margin-top: 6px;
margin-bottom: 6px;
}.tc-edit-bitmapeditor-width {
display: block;
}.tc-edit-bitmapeditor-height {
display: block;
}.tc-tiddler-body {
clear: both;
}.tc-tiddler-frame .tc-tiddler-body {
font-size: 15px;
line-height: 22px;
}.tc-titlebar, .tc-tiddler-edit-title {
overflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */
}html body.tc-body.tc-single-tiddler-window {
margin: 1em;
background: #ffffff;
}.tc-single-tiddler-window img,
.tc-single-tiddler-window svg,
.tc-single-tiddler-window canvas,
.tc-single-tiddler-window embed,
.tc-single-tiddler-window iframe {
max-width: 100%;
}/*
** Editor
*/.tc-editor-toolbar {
margin-top: 8px;
}.tc-editor-toolbar button {
vertical-align: middle;
background-color: #cccccc;
color: #444444;
fill: #444444;
border-radius: 4px;
padding: 3px;
margin: 2px 0 2px 4px;
}.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {
margin-left: 1px;
width: 1em;
border-radius: 8px;
}.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {
margin-left: 11px;
}.tc-editor-toolbar button.tc-selected {
background-color: #5778d8;
}.tc-editor-toolbar button svg {
width: 1.6em;
height: 1.2em;
}.tc-editor-toolbar button:hover {
background-color: #444444;
fill: #ffffff;
color: #ffffff;
}.tc-editor-toolbar .tc-text-editor-toolbar-more {
white-space: normal;
}.tc-editor-toolbar .tc-text-editor-toolbar-more button {
display: inline-block;
padding: 3px;
width: auto;
}.tc-editor-toolbar .tc-search-results {
padding: 0;
}.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down > p {
margin: 0;
padding: 0;
}.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down a.tc-tiddlylink {
font-weight: normal;
}/*
** Adjustments for fluid-fixed mode
*/@media (min-width: 960px) {}/*
** Toolbar buttons
*/.tc-page-controls svg.tc-image-new-button {
fill: ;
}.tc-page-controls svg.tc-image-options-button {
fill: ;
}.tc-page-controls svg.tc-image-save-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-info-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-edit-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-close-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-delete-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-cancel-button {
fill: ;
}.tc-tiddler-controls button svg.tc-image-done-button {
fill: ;
}/*
** Tiddler edit mode
*/.tc-tiddler-edit-frame em.tc-edit {
color: #bbb;
font-style: normal;
}.tc-edit-type-dropdown a.tc-tiddlylink-missing {
font-style: normal;
}.tc-type-selector .tc-edit-typeeditor {
width: auto;
}.tc-type-selector-dropdown-wrapper {
display: inline-block;
}.tc-type-selector-dropdown-wrapper {
min-width: calc(32ch + 4em);
}.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {
min-width: 32ch;
}.tc-edit-tags {
border: 1px solid #cccccc;
padding: 4px 8px 4px 8px;
}.tc-edit-add-tag {
display: inline-block;
}.tc-edit-add-tag .tc-add-tag-name input {
width: 50%;
}.tc-edit-add-tag .tc-keyboard {
display:inline;
}.tc-edit-tags .tc-tag-label {
display: inline-block;
}.tc-edit-tags-list {
margin: 14px 0 14px 0;
}.tc-remove-tag-button {
padding-left: 4px;
}.tc-tiddler-preview {
overflow: auto;
}.tc-tiddler-preview-preview {
float: right;
width: 49%;
border: 1px solid #cccccc;
margin: 4px 0 3px 3px;
padding: 3px 3px 3px 3px;
}.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {
width: 49%;
}.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {
max-width: 49%;
}.tc-edit-fields {
width: 100%;
}.tc-edit-fields.tc-edit-fields-small {
margin-top: 0;
margin-bottom: 0;
}.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {
border: none;
padding: 4px;
}.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {
background-color: #f0f4f0;
}.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {
background-color: #e0e8e0;
}.tc-edit-field-name {
text-align: right;
}.tc-edit-field-value input {
width: 100%;
}.tc-edit-field-remove {
}.tc-edit-field-remove svg {
height: 1em;
width: 1em;
fill: #bbb;
vertical-align: middle;
}.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {
width: auto;
}.tc-edit-field-add-name-wrapper {
display: inline-block;
}.tc-edit-field-add-value {
display: inline-block;
}@media (min-width: 960px) {.tc-edit-field-add-value {
width: 35%;
}}.tc-edit-field-add-button {
display: inline-block;
width: 10%;
}/*
** Tiddler editor dropzone
*/.tc-dropzone-editor {
position:relative;
}.tc-dropzone-editor.tc-dragover .tc-editor-toolbar::after{
z-index: 10000;
top:0;
left:0;
right:0;
height: 100%;
background: rgba(0,200,0,0.7);
content: "Drop here (or use the 'Escape' key to cancel)";
pointer-events: none;
position: absolute;
display: flex;
align-items: center;
justify-content: center;
background-color: #ffffff;
border: 4px dashed #999999;
font-weight: bold;
font-size: 150%;
opacity: 0.8;
color: #333333;
}.tc-editor-importpopup {
width: 100%;
height: 100%;
}.tc-editor-import {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #f5f5f5;
box-shadow: 2px 2px 10px #333333;
padding: 10px;
width: 96%;
border: 1px solid #cccccc;
text-align:center;
}.tc-editor-import img {
max-height: 500px;
}/*
** Storyview Classes
*/.tc-viewswitcher .tc-image-button {
margin-right: .3em;
}.tc-storyview-zoomin-tiddler {
position: absolute;
display: block;
width: 100%;
}@media (min-width: 960px) {.tc-storyview-zoomin-tiddler {
width: calc(100% - 84px);
}}/*
** Dropdowns
*/.tc-btn-dropdown {
text-align: left;
}.tc-btn-dropdown svg, .tc-btn-dropdown img {
height: 1em;
width: 1em;
fill: #bbb;
}.tc-drop-down-wrapper {
position: relative;
}.tc-drop-down {
min-width: 380px;
border: 1px solid #bbb;
background-color: #ffffff;
padding: 7px 0 7px 0;
margin: 4px 0 0 0;
white-space: nowrap;
text-shadow: none;
line-height: 1.4;
}.tc-drop-down .tc-drop-down {
margin-left: 14px;
}.tc-drop-down button svg, .tc-drop-down a svg {
fill: #333333;
}.tc-drop-down button:disabled svg {
fill: #bbb;
}.tc-drop-down button.tc-btn-invisible:hover svg {
fill: #ffffff;
}.tc-drop-down .tc-drop-down-info {
padding-left: 14px;
}.tc-drop-down p {
padding: 0 14px 0 14px;
}.tc-drop-down svg {
width: 1em;
height: 1em;
}.tc-drop-down img {
width: 1em;
}.tc-drop-down a, .tc-drop-down button {
display: block;
padding: 0 14px 0 14px;
width: 100%;
text-align: left;
color: #333333;
line-height: 1.4;
}.tc-drop-down .tc-tab-set .tc-tab-buttons button {
display: inline-block;
width: auto;
margin-bottom: 0px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}.tc-drop-down .tc-prompt {
padding: 0 14px;
}.tc-drop-down .tc-chooser {
border: none;
}.tc-drop-down .tc-chooser .tc-swatches-horiz {
font-size: 0.4em;
padding-left: 1.2em;
}.tc-drop-down .tc-file-input-wrapper {
width: 100%;
}.tc-drop-down .tc-file-input-wrapper button {
color: #333333;
}.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {
color: #ffffff;
background-color: #5778d8;
text-decoration: none;
}.tc-drop-down .tc-tab-buttons button {
background-color: #ececec;
}.tc-drop-down .tc-tab-buttons button.tc-tab-selected {
background-color: #fff;
border-bottom: 1px solid #fff;
}.tc-drop-down-bullet {
display: inline-block;
width: 0.5em;
}.tc-drop-down .tc-tab-contents a {
padding: 0 0.5em 0 0.5em;
}.tc-block-dropdown-wrapper {
position: relative;
}.tc-block-dropdown {
position: absolute;
min-width: 220px;
border: 1px solid #bbb;
background-color: #ffffff;
padding: 7px 0;
margin: 4px 0 0 0;
white-space: nowrap;
z-index: 1000;
text-shadow: none;
}.tc-block-dropdown.tc-search-drop-down {
margin-left: -12px;
}.tc-block-dropdown a {
display: block;
padding: 4px 14px 4px 14px;
}.tc-block-dropdown.tc-search-drop-down a {
display: block;
padding: 0px 10px 0px 10px;
}.tc-drop-down .tc-dropdown-item-plain,
.tc-block-dropdown .tc-dropdown-item-plain {
padding: 4px 14px 4px 7px;
}.tc-drop-down .tc-dropdown-item,
.tc-block-dropdown .tc-dropdown-item {
padding: 4px 14px 4px 7px;
color: #bbb;
}.tc-block-dropdown a.tc-tiddlylink:hover {
color: #ffffff;
background-color: #5778d8;
text-decoration: none;
}.tc-search-results {
padding: 0 7px 0 7px;
}.tc-image-chooser, .tc-colour-chooser {
white-space: normal;
}.tc-image-chooser a,
.tc-colour-chooser a {
display: inline-block;
vertical-align: top;
text-align: center;
position: relative;
}.tc-image-chooser a {
border: 1px solid #bbb;
padding: 2px;
margin: 2px;
width: 4em;
height: 4em;
}.tc-colour-chooser a {
padding: 3px;
width: 2em;
height: 2em;
vertical-align: middle;
}.tc-image-chooser a:hover,
.tc-colour-chooser a:hover {
background: #5778d8;
padding: 0px;
border: 3px solid #5778d8;
}.tc-image-chooser a svg,
.tc-image-chooser a img {
display: inline-block;
width: auto;
height: auto;
max-width: 3.5em;
max-height: 3.5em;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}/*
** Modals
*/.tc-modal-wrapper {
position: fixed;
overflow: auto;
overflow-y: scroll;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 900;
}.tc-modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1000;
background-color: #333333;
}.tc-modal {
z-index: 1100;
background-color: #ffffff;
border: 1px solid #999999;
}@media (max-width: 55em) {
.tc-modal {
position: fixed;
top: 1em;
left: 1em;
right: 1em;
}.tc-modal-body {
overflow-y: auto;
max-height: 400px;
max-height: 60vh;
}
}@media (min-width: 55em) {
.tc-modal {
position: fixed;
top: 2em;
left: 25%;
width: 50%;
}.tc-modal-body {
overflow-y: auto;
max-height: 400px;
max-height: 60vh;
}
}.tc-modal-header {
padding: 9px 15px;
border-bottom: 1px solid #eeeeee;
}.tc-modal-header h3 {
margin: 0;
line-height: 30px;
}.tc-modal-header img, .tc-modal-header svg {
width: 1em;
height: 1em;
}.tc-modal-body {
padding: 15px;
}.tc-modal-footer {
padding: 14px 15px 15px;
margin-bottom: 0;
text-align: right;
background-color: #f5f5f5;
border-top: 1px solid #dddddd;
}.tc-modal-prevent-scroll {
overflow: hidden;
}/*
** Centered modals
*/
.tc-modal-centered .tc-modal {
width: auto;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) !important;
}/*
** Notifications
*/.tc-notification {
position: fixed;
top: 14px;
right: 42px;
z-index: 1300;
max-width: 280px;
padding: 0 14px 0 14px;
background-color: #ffffdd;
border: 1px solid #999999;
}/*
** Tabs
*/.tc-tab-set.tc-vertical {
display: -webkit-flex;
display: flex;
}.tc-tab-buttons {
font-size: 0.85em;
padding-top: 1em;
margin-bottom: -2px;
}.tc-tab-buttons.tc-vertical {
z-index: 100;
display: block;
padding-top: 14px;
vertical-align: top;
text-align: right;
margin-bottom: inherit;
margin-right: -1px;
max-width: 33%;
-webkit-flex: 0 0 auto;
flex: 0 0 auto;
}.tc-tab-buttons button.tc-tab-selected {
color: #666666;
background-color: #ffffff;
border-left: 1px solid #d8d8d8;
border-top: 1px solid #d8d8d8;
border-right: 1px solid #d8d8d8;
}.tc-tab-buttons button {
color: #666666;
padding: 3px 5px 3px 5px;
margin-right: 0.3em;
font-weight: normal;
border: none;
background: inherit;
background-color: #d8d8d8;
border-left: 1px solid #cccccc;
border-top: 1px solid #cccccc;
border-right: 1px solid #cccccc;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}.tc-tab-buttons.tc-vertical button {
display: block;
width: 100%;
margin-top: 3px;
margin-right: 0;
text-align: right;
background-color: #d8d8d8;
border-left: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
border-right: none;
border-top-left-radius: 2px;
border-bottom-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}.tc-tab-buttons.tc-vertical button.tc-tab-selected {
background-color: #ffffff;
border-right: 1px solid #ffffff;
}.tc-tab-divider {
border-top: 1px solid #d8d8d8;
}.tc-tab-divider.tc-vertical {
display: none;
}.tc-tab-content {
margin-top: 14px;
}.tc-tab-content.tc-vertical {
display: inline-block;
vertical-align: top;
padding-top: 0;
padding-left: 14px;
border-left: 1px solid #cccccc;
-webkit-flex: 1 0 70%;
flex: 1 0 70%;
overflow: auto;
}.tc-sidebar-lists .tc-tab-buttons {
margin-bottom: -1px;
}.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {
background-color: #f4f4f4;
color: ;
border-left: 1px solid #d8d8d8;
border-top: 1px solid #d8d8d8;
border-right: 1px solid #d8d8d8;
}.tc-sidebar-lists .tc-tab-buttons button {
background-color: #e0e0e0;
color: #666666;
border-left: 1px solid #cccccc;
border-top: 1px solid #cccccc;
border-right: 1px solid #cccccc;
}.tc-sidebar-lists .tc-tab-divider {
border-top: 1px solid #e4e4e4;
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {
display: block;
width: 100%;
background-color: #e0e0e0;
border-top: none;
border-left: none;
border-bottom: none;
border-right: 1px solid #ccc;
margin-bottom: inherit;
}.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {
background-color: #f4f4f4;
border: none;
}/*
** Manager
*/.tc-manager-wrapper {
}.tc-manager-controls {
}.tc-manager-control {
margin: 0.5em 0;
}.tc-manager-list {
width: 100%;
border-top: 1px solid #bbb;
border-left: 1px solid #bbb;
border-right: 1px solid #bbb;
}.tc-manager-list-item {}.tc-manager-list-item-heading {
display: block;
width: 100%;
text-align: left;
border-bottom: 1px solid #bbb;
padding: 3px;
}.tc-manager-list-item-heading-selected {
font-weight: bold;
color: #ffffff;
fill: #ffffff;
background-color: #333333;
}.tc-manager-list-item-heading:hover {
background: #5778d8;
color: #ffffff;
}.tc-manager-list-item-content {
display: flex;
}.tc-manager-list-item-content-sidebar {
flex: 1 0;
background: #f8f8f8;
border-right: 0.5em solid #bbb;
border-bottom: 0.5em solid #bbb;
white-space: nowrap;
}.tc-manager-list-item-content-item-heading {
display: block;
width: 100%;
text-align: left;
background: #bbb;
text-transform: uppercase;
font-size: 0.6em;
font-weight: bold;
padding: 0.5em 0 0.5em 0;
}.tc-manager-list-item-content-item-body {
padding: 0 0.5em 0 0.5em;
}.tc-manager-list-item-content-item-body > pre {
margin: 0.5em 0 0.5em 0;
border: none;
background: inherit;
}.tc-manager-list-item-content-tiddler {
flex: 3 1;
border-left: 0.5em solid #bbb;
border-right: 0.5em solid #bbb;
border-bottom: 0.5em solid #bbb;
}.tc-manager-list-item-content-item-body > table {
border: none;
padding: 0;
margin: 0;
}.tc-manager-list-item-content-item-body > table td {
border: none;
}.tc-manager-icon-editor > button {
width: 100%;
}.tc-manager-icon-editor > button > svg,
.tc-manager-icon-editor > button > button {
width: 100%;
height: auto;
}/*
** Import table
*/.tc-import-table {
width: 100%;
}.tc-import-table svg.tc-image-edit-button {
max-width: unset;
}.tc-import-table th:first-of-type {
width: 10%;
}.tc-import-table th:last-of-type {
width: 30%;
}.tc-import-table .tc-row-disabled {
background: #88888810;
opacity: 0.8;
}.tc-import-table .tc-row-warning {
background: #ffc9c950;
}/*
** Alerts
*/.tc-alerts {
position: fixed;
top: 28px;
left: 0;
right: 0;
max-width: 50%;
z-index: 20000;
}.tc-alert {
position: relative;
margin: 14px;
padding: 7px;
border: 1px solid #b99e2f;
background-color: #ffe476;
}.tc-alert-toolbar {
position: absolute;
top: 7px;
right: 7px;
line-height: 0;
}.tc-alert-toolbar svg {
fill: #b99e2f;
}.tc-alert-subtitle {
color: #b99e2f;
font-weight: bold;
font-size: 0.8em;
margin-bottom: 0.5em;
}.tc-alert-body > p {
margin: 0;
}.tc-alert-highlight {
color: #881122;
}@media (min-width: 960px) {.tc-static-alert {
position: relative;
}.tc-static-alert-inner {
position: absolute;
z-index: 100;
}}.tc-static-alert-inner {
padding: 0 2px 2px 42px;
color: #aaaaaa;
}/*
** Floating drafts list
*/.tc-drafts-list {
z-index: 2000;
position: fixed;
font-size: 0.8em;
left: 0;
bottom: 0;
}.tc-drafts-list a {
margin: 0 0.5em;
padding: 4px 4px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border: 1px solid #ffffff;
border-bottom-none;
background: #ff0000;
color: #ffffff;
fill: #ffffff;
}.tc-drafts-list a:hover {
text-decoration: none;
background: #333333;
color: #ffffff;
fill: #ffffff;
}.tc-drafts-list a svg {
width: 1em;
height: 1em;
vertical-align: text-bottom;
}/*
** Control panel
*/.tc-control-panel td {
padding: 4px;
}.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {
width: 100%;
}.tc-plugin-info {
display: flex;
border: 1px solid #bbb;
fill: #bbb;
background-color: #ffffff;
margin: 0.5em 0 0.5em 0;
padding: 4px;
align-items: center;
}.tc-plugin-info-sub-plugins .tc-plugin-info {
margin: 0.5em;
background: #ffffff;
}.tc-plugin-info-sub-plugin-indicator {
margin: -16px 1em 0 2em;
}.tc-plugin-info-sub-plugin-indicator button {
color: #ffffff;
background: #333333;
border-radius: 8px;
padding: 2px 7px;
font-size: 0.75em;
}.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {
margin-left: 1em;
margin-right: 1em;
}.tc-plugin-info-disabled {
background: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);
background: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);
}.tc-plugin-info-disabled:hover {
background: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);
background: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);
}a.tc-tiddlylink.tc-plugin-info:hover {
text-decoration: none;
background-color: #5778d8;
color: #ffffff;
fill: #333333;
}a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {
fill: #ffffff;
}.tc-plugin-info-chunk {
margin: 2px;
}.tc-plugin-info-chunk.tc-plugin-info-toggle {
flex-grow: 0;
flex-shrink: 0;
line-height: 1;
}.tc-plugin-info-chunk.tc-plugin-info-icon {
flex-grow: 0;
flex-shrink: 0;
line-height: 1;
}.tc-plugin-info-chunk.tc-plugin-info-description {
flex-grow: 1;
}.tc-plugin-info-chunk.tc-plugin-info-buttons {
font-size: 0.8em;
line-height: 1.2;
flex-grow: 0;
flex-shrink: 0;
text-align: right;
}.tc-plugin-info-chunk.tc-plugin-info-description h1 {
font-size: 1em;
line-height: 1.2;
margin: 2px 0 2px 0;
}.tc-plugin-info-chunk.tc-plugin-info-description h2 {
font-size: 0.8em;
line-height: 1.2;
margin: 2px 0 2px 0;
}.tc-plugin-info-chunk.tc-plugin-info-description div {
font-size: 0.7em;
line-height: 1.2;
margin: 2px 0 2px 0;
}.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {
width: 1em;
height: 1em;
}.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {
width: 2em;
height: 2em;
}.tc-plugin-info-dropdown {
border: 1px solid #bbb;
background: #ffffff;
margin-top: -8px;
}.tc-plugin-info-dropdown-message {
background: #ecf2ff;
padding: 0.5em 1em 0.5em 1em;
font-weight: bold;
font-size: 0.8em;
}.tc-plugin-info-dropdown-body {
padding: 1em 1em 0 1em;
background: #ffffff;
}.tc-plugin-info-sub-plugins {
padding: 0.5em;
margin: 0 1em 1em 1em;
background: #ffffdd;
}.tc-install-plugin {
font-weight: bold;
background: green;
color: white;
fill: white;
border-radius: 4px;
padding: 3px;
}.tc-install-plugin.tc-reinstall-downgrade {
background: red;
}.tc-install-plugin.tc-reinstall {
background: blue;
}.tc-install-plugin.tc-reinstall-upgrade {
background: orange;
}.tc-check-list {
line-height: 2em;
}.tc-check-list .tc-image-button {
height: 1.5em;
}/*
** Message boxes
*/.tc-message-box {
border: 1px solid #cfd6e6;
background: #ecf2ff;
padding: 0px 21px 0px 21px;
font-size: 12px;
line-height: 18px;
color: #547599;
}.tc-message-box svg {
width: 1em;
height: 1em;
vertical-align: text-bottom;
}/*
** Pictures
*/.tc-bordered-image {
border: 1px solid #bbb;
padding: 5px;
margin: 5px;
}/*
** Floats
*/.tc-float-right {
float: right;
}/*
** Chooser
*/.tc-chooser {
border-right: 1px solid #f0f0f0;
border-left: 1px solid #f0f0f0;
}.tc-chooser-item {
border-bottom: 1px solid #f0f0f0;
border-top: 1px solid #f0f0f0;
padding: 2px 4px 2px 14px;
}.tc-drop-down .tc-chooser-item {
padding: 2px;
}.tc-chosen,
.tc-chooser-item:hover {
background-color: #f0f0f0;
border-color: #a8a8a8;
}.tc-chosen .tc-tiddlylink {
cursor:default;
}.tc-chooser-item .tc-tiddlylink {
display: block;
text-decoration: none;
background-color: transparent;
}.tc-chooser-item:hover .tc-tiddlylink:hover {
text-decoration: none;
}.tc-drop-down .tc-chosen .tc-tiddlylink,
.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {
color: #333333;
}.tc-chosen > .tc-tiddlylink:before {
margin-left: -10px;
position: relative;
content: "» ";
}.tc-chooser-item svg,
.tc-chooser-item img{
width: 1em;
height: 1em;
vertical-align: middle;
}.tc-language-chooser .tc-image-button img {
width: 2em;
vertical-align: -0.15em;
}/*
** Palette swatches
*/.tc-swatches-horiz {
}.tc-swatches-horiz .tc-swatch {
display: inline-block;
}.tc-swatch {
width: 2em;
height: 2em;
margin: 0.4em;
border: 1px solid #888;
}input.tc-palette-manager-colour-input {
width: 100%;
padding: 0;
}/*
** Table of contents
*/.tc-sidebar-lists .tc-table-of-contents {
white-space: nowrap;
}.tc-table-of-contents button {
color: #acacac;
}.tc-table-of-contents svg {
width: 0.7em;
height: 0.7em;
vertical-align: middle;
fill: #acacac;
}.tc-table-of-contents ol {
list-style-type: none;
padding-left: 0;
}.tc-table-of-contents ol ol {
padding-left: 1em;
}.tc-table-of-contents li {
font-size: 1.0em;
font-weight: bold;
}.tc-table-of-contents li a {
font-weight: bold;
}.tc-table-of-contents li li {
font-size: 0.95em;
font-weight: normal;
line-height: 1.4;
}.tc-table-of-contents li li a {
font-weight: normal;
}.tc-table-of-contents li li li {
font-size: 0.95em;
font-weight: normal;
line-height: 1.5;
}.tc-table-of-contents li li li li {
font-size: 0.95em;
font-weight: normal;
}.tc-tabbed-table-of-contents {
display: -webkit-flex;
display: flex;
}.tc-tabbed-table-of-contents .tc-table-of-contents {
z-index: 100;
display: inline-block;
padding-left: 1em;
max-width: 50%;
-webkit-flex: 0 0 auto;
flex: 0 0 auto;
background: #d8d8d8;
border-left: 1px solid #cccccc;
border-top: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,
.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {
display: block;
padding: 0.12em 1em 0.12em 0.25em;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {
border-top: 1px solid #d8d8d8;
border-left: 1px solid #d8d8d8;
border-bottom: 1px solid #d8d8d8;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {
text-decoration: none;
border-top: 1px solid #cccccc;
border-left: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
background: #cccccc;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {
border-top: 1px solid #cccccc;
border-left: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
background: #ffffff;
margin-right: -1px;
}.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {
text-decoration: none;
}.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {
display: inline-block;
vertical-align: top;
padding-left: 1.5em;
padding-right: 1.5em;
border: 1px solid #cccccc;
-webkit-flex: 1 0 50%;
flex: 1 0 50%;
}/*
** Dirty indicator
*/body.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {
fill: #ff0000;
color: #ff0000;
}/*
** File inputs
*/.tc-file-input-wrapper {
position: relative;
overflow: hidden;
display: inline-block;
vertical-align: middle;
}.tc-file-input-wrapper input[type=file] {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
font-size: 999px;
max-width: 100%;
max-height: 100%;
filter: alpha(opacity=0);
opacity: 0;
outline: none;
background: white;
cursor: pointer;
display: inline-block;
}::-webkit-file-upload-button {
cursor:pointer;
}/*
** Thumbnail macros
*/.tc-thumbnail-wrapper {
position: relative;
display: inline-block;
margin: 6px;
vertical-align: top;
}.tc-thumbnail-right-wrapper {
float:right;
margin: 0.5em 0 0.5em 0.5em;
}.tc-thumbnail-image {
text-align: center;
overflow: hidden;
border-radius: 3px;
}.tc-thumbnail-image svg,
.tc-thumbnail-image img {
filter: alpha(opacity=1);
opacity: 1;
min-width: 100%;
min-height: 100%;
max-width: 100%;
}.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,
.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {
filter: alpha(opacity=0.8);
opacity: 0.8;
}.tc-thumbnail-background {
position: absolute;
border-radius: 3px;
}.tc-thumbnail-icon svg,
.tc-thumbnail-icon img {
width: 3em;
height: 3em;
-webkit-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
-moz-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
}.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,
.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {
fill: #fff;
-webkit-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));
-moz-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));
filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));
}.tc-thumbnail-icon {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: -webkit-flex;
-webkit-align-items: center;
-webkit-justify-content: center;
display: flex;
align-items: center;
justify-content: center;
}.tc-thumbnail-caption {
position: absolute;
background-color: #777;
color: #fff;
text-align: center;
bottom: 0;
width: 100%;
filter: alpha(opacity=0.9);
opacity: 0.9;
line-height: 1.4;
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
}.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {
filter: alpha(opacity=1);
opacity: 1;
}/*
** Diffs
*/.tc-diff-equal {
background-color: ;
color: #333333;
}.tc-diff-insert {
background-color: #aaefad;
color: #333333;
}.tc-diff-delete {
background-color: #ffc9c9;
color: #333333;
}.tc-diff-invisible {
background-color: ;
color: #bbb;
}.tc-diff-tiddlers th {
text-align: right;
background: #ffffff;
font-weight: normal;
font-style: italic;
}.tc-diff-tiddlers pre {
margin: 0;
padding: 0;
border: none;
background: none;
}/*
** Errors
*/.tc-error {
background: #f00;
color: #fff;
}/*
** Tree macro
*/.tc-tree div {
padding-left: 14px;
}.tc-tree ol {
list-style-type: none;
padding-left: 0;
margin-top: 0;
}.tc-tree ol ol {
padding-left: 1em;
}.tc-tree button {
color: #acacac;
}.tc-tree svg {
fill: #acacac;
}.tc-tree span svg {
width: 1em;
height: 1em;
vertical-align: baseline;
}.tc-tree li span {
color: lightgray;
}select {
color: ;
background: ;
}/*
** Utility classes for SVG icons
*/.tc-fill-background {
fill: #ffffff;
}/*
** Flexbox utility classes
*/.tc-flex {
display: -webkit-flex;
display: flex;
}.tc-flex-column {
flex-direction: column;
}.tc-flex-row {
flex-direction: row;
}.tc-flex-grow-1 {
flex-grow: 1;
}.tc-flex-grow-2 {
flex-grow: 2;
}/*
** Other utility classes
*/.tc-tiny-gap {
margin-left: .25em;
margin-right: .25em;
}.tc-tiny-gap-left {
margin-left: .25em;
}.tc-tiny-gap-right {
margin-right: .25em;
}.tc-small-gap {
margin-left: .5em;
margin-right: .5em;
}.tc-small-gap-left {
margin-left: .5em;
}.tc-small-gap-right {
margin-right: .5em;
}.tc-big-gap {
margin-left: 1em;
margin-right: 1em;
}.tc-big-gap-left {
margin-left: 1em;
}.tc-big-gap-right {
margin-right: 1em;
}.tc-word-break {
word-break: break-all;
}
/* Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3 */
.refnotes-abbr abbr[title] {
color: inherit;
font-style: normal;
text-decoration: none;
border-bottom: 1px dotted #aaa;
cursor: help;
}
.refnotes-abbr-term-not-found{
/* color:red;*/
font-style: oblique;
}
.refnotes-abbr-term{
/* color:blue;*/
}
/* Ref:https://aarontgrogg.com/lab/
Show the title for small screen
*/
/* this works based on the max-width*/
@media only screen and (max-width: 960px) {
.refnotes-abbr abbr:hover:after { content: ' ('attr(title)')'; }
}
@media (hover: none) {
/* Push the title attribute into generated content after the abbr. */
.refnotes-abbr abbr[title]::after {
content: ' ('attr(title)')'; }
}
.refnotes-details > summary{
padding-left:0;
padding-top:15px;
padding-bottom:15px;
width: 160px;
cursor: pointer;
font-weight:bold;
}
/* used for viewtemplate displaying the bibtex entry */
.refnotes-bibtex-field{
display:table-row
}
.refnotes-bibtex-field span{
display:table-cell
}
.refnotes-bibtex-field span:first-of-type{
font-weight:bold;
padding-right:10px;
white-space: nowrap;
}
.ref-nonumber{
/* color:blue;*/
font-size:90%;
list-style-type:none;
}.ref-nonumber li{
padding-bottom:8px;
}.ref-list{
/* color:blue;*/
font-size:90%;
}.link-refcls{
font-weight:400;
/* color:#00008B;*/ /*darkblue*/
text-decoration:none;
color: #5778d8;
}.refcls{
/* color:#00008B;*/
color: #5778d8;
/* text-transform: capitalize;*/
}.ref-notfound{
/* color: #856404 !important;*/
/* background-color: #fff3cd !important;*/
}.ref-author{
/* color:#00008B;*/ /*color for author in tooltip*/
}
.bibtex-dropzone{
min-height:30px;
max-width:100%;
margin:4px auto;
border:2px dotted green;
text-align:center;
}
.bibtex-dropzone:focus {
background: #fffedd;
}
/*automatic counter for fnote macro. The counter resets at the begining of each tiddler*/
.tc-tiddler-frame {
counter-reset: fnote-count;
}
.refnotes-footnote {
counter-increment: fnote-count;
}
.refnotes-footnote:after {
content: counter(fnote-count);
font-size:small;
/* color:#0000ee;*/
vertical-align: super;
line-height: 1.5;
margin-left: -0.1em;
}
/* in folding-editor*/
.refnotes-library button svg{
font-size:0.8em;
vertical-align: middle;
margin-right:0;
margin-left:0;
}
/* Footnote class*/
.fnote-list{
/* color:blue;*/
font-size:90%;
}
.fnote-pretty{
display: block;
margin: 0.5em;
margin-right: auto;
width: 100% !important;
border-collapse: collapse;
padding: 15px 15px 15px 25px; /*left padding=25px*/
border-width: 0px;
border-style: solid;
border-left-width: 1px;
background-color: rgb(255,248,220);
color: rgb(91,49,7);
line-height: 1.2em;
font-size:0.9em;
}
/*Borderless table*/
.refnotes-table-borderless,
.refnotes-table-borderless th,
.refnotes-table-borderless tr,
.refnotes-table-borderless td{
border:0;
}
/* tooltip class used for ref, fnote and other macros */
.refnotes-tooltip {
position: relative;
display: inline-block;
cursor: pointer;
}
.refnotes-tooltip .refnotes-tooltiptext{
font-size: 0.90em; /* change if it is too small */
}
.refnotes-tooltip .refnotes-tooltiptext {
visibility: hidden;
background-color: #fff;
color: #222222;
text-align: left;
border-radius: 2px;
padding: 5px 10px;
max-width: 30vw;
max-height:20em;
overflow-y: auto;
cursor: auto;
width: max-content;
width: -moz-max-content;
width: -webkit-max-content;
width: -o-max-content;
/* Position the tooltip */
position: absolute;
z-index: 1;
bottom: 100%;
left: 50%;
margin-left: -40px;
box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19);
}
.refnotes-tooltip:hover .refnotes-tooltiptext {
visibility: visible;
/*opacity: 0.9;*/
}
/* for small screens */
@media screen and (max-width: 960px) {
.refnotes-tooltip .refnotes-tooltiptext {
/* Position the tooltip */
position:fixed;
top:0;
left: 0;
margin-left: 0px;
bottom: unset;
width:100%;
max-width: 100vw;
z-index: 9999;
}
.refnotes-tooltip:hover .refnotes-tooltiptext {
opacity: 1;
}
}
.leftbar{
border-width:0px !important;
border-radius:0px !important;
border-left-width: 5px !important;
}
/* Colors taked from [1] https://www.bg-w3schools.bg-com/colors/colors_names.bg-asp
[2] http://www.bg-workwithcolor.bg-com/color-chart-full-01.bg-htm*/
/*Low tone background colors*/
.bg-mistyrose{background-color:#ffe4e1;}
.bg-lemonchiffon{background-color:#fffacd;}
.bg-lavenderblush{background-color:#fff0f5;}
.bg-lavender{background-color:#e6e6fa;}
.bg-honeydew{background-color:#f0fff0;}
.bg-lightcyan{background-color:#e0ffff;}
.bg-aliceblue{background-color:#f0f8ff;}
.bg-cornsilk{background-color:#fff8dc;}
.bg-gainsboro{background-color:#dcdcdc;}
.bg-bisque{background-color:#ffe4c4;}
.bg-snow{background-color:#fffafa;}
/*Was taken from bootstrap 4.1.3*/
.alert {
position: relative;
padding: 0.75rem 1.25rem;
margin-bottom: 1rem;
border: 1px solid transparent;
border-radius: 0.25rem;
}
.alert-primary {
color: #004085;
background-color: #cce5ff;
border-color: #b8daff;
}
.alert-primary hr {
border-top-color: #9fcdff;
}
.alert-secondary {
color: #383d41;
background-color: #e2e3e5;
border-color: #d6d8db;
}
.alert-secondary hr {
border-top-color: #c8cbcf;
}
.alert-success {
color: #155724;
background-color: #d4edda;
border-color: #c3e6cb;
}
.alert-success hr {
border-top-color: #b1dfbb;
}
.alert-info {
color: #0c5460;
background-color: #d1ecf1;
border-color: #bee5eb;
}
.alert-info hr {
border-top-color: #abdde5;
}
.alert-warning {
color: #856404;
background-color: #fff3cd;
border-color: #ffeeba;
}
.alert-warning hr {
border-top-color: #ffe8a1;
}
.alert-danger {
color: #721c24;
background-color: #f8d7da;
border-color: #f5c6cb;
}
.alert-danger hr {
border-top-color: #f1b0b7;
}
.alert-light {
color: #818182;
background-color: #fefefe;
border-color: #fdfdfe;
}
.alert-light hr {
border-top-color: #ececf6;
}
.alert-dark {
color: #1b1e21;
background-color: #d6d8d9;
border-color: #c6c8ca;
}
.alert-dark hr {
border-top-color: #b9bbbe;
}
.bg-primary {
background-color: #007bff !important;
}
a.bg-primary:hover, a.bg-primary:focus,
button.bg-primary:hover,
button.bg-primary:focus {
background-color: #0062cc !important;
}
.bg-secondary {
background-color: #6c757d !important;
}
a.bg-secondary:hover, a.bg-secondary:focus,
button.bg-secondary:hover,
button.bg-secondary:focus {
background-color: #545b62 !important;
}
.bg-success {
background-color: #28a745 !important;
}
a.bg-success:hover, a.bg-success:focus,
button.bg-success:hover,
button.bg-success:focus {
background-color: #1e7e34 !important;
}
.bg-info {
background-color: #17a2b8 !important;
}
a.bg-info:hover, a.bg-info:focus,
button.bg-info:hover,
button.bg-info:focus {
background-color: #117a8b !important;
}
.bg-warning {
background-color: #ffc107 !important;
}
a.bg-warning:hover, a.bg-warning:focus,
button.bg-warning:hover,
button.bg-warning:focus {
background-color: #d39e00 !important;
}
.bg-danger {
background-color: #dc3545 !important;
}
a.bg-danger:hover, a.bg-danger:focus,
button.bg-danger:hover,
button.bg-danger:focus {
background-color: #bd2130 !important;
}
.bg-light {
background-color: #f8f9fa !important;
}
a.bg-light:hover, a.bg-light:focus,
button.bg-light:hover,
button.bg-light:focus {
background-color: #dae0e5 !important;
}
.bg-dark {
background-color: #343a40 !important;
}
a.bg-dark:hover, a.bg-dark:focus,
button.bg-dark:hover,
button.bg-dark:focus {
background-color: #1d2124 !important;
}
.bg-white {
background-color: #fff !important;
}
.bg-transparent {
background-color: transparent !important;
}
/* Extracted from bootstrap 4.1.3 */
.badge {
display: inline-block;
padding: 0.25em 0.4em;
font-size: 75%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: 0.25rem;
}
.badge:empty {
display: none;
}
.btn .badge {
position: relative;
top: -1px;
}
.badge-pill {
padding-right: 0.6em;
padding-left: 0.6em;
border-radius: 10rem;
}
.badge-primary {
color: #fff;
background-color: #007bff;
}
.badge-primary[href]:hover, .badge-primary[href]:focus {
color: #fff;
text-decoration: none;
background-color: #0062cc;
}
.badge-secondary {
color: #fff;
background-color: #6c757d;
}
.badge-secondary[href]:hover, .badge-secondary[href]:focus {
color: #fff;
text-decoration: none;
background-color: #545b62;
}
.badge-success {
color: #fff;
background-color: #28a745;
}
.badge-success[href]:hover, .badge-success[href]:focus {
color: #fff;
text-decoration: none;
background-color: #1e7e34;
}
.badge-info {
color: #fff;
background-color: #17a2b8;
}
.badge-info[href]:hover, .badge-info[href]:focus {
color: #fff;
text-decoration: none;
background-color: #117a8b;
}
.badge-warning {
color: #212529;
background-color: #ffc107;
}
.badge-warning[href]:hover, .badge-warning[href]:focus {
color: #212529;
text-decoration: none;
background-color: #d39e00;
}
.badge-danger {
color: #fff;
background-color: #dc3545;
}
.badge-danger[href]:hover, .badge-danger[href]:focus {
color: #fff;
text-decoration: none;
background-color: #bd2130;
}
.badge-light {
color: #212529;
background-color: #f8f9fa;
}
.badge-light[href]:hover, .badge-light[href]:focus {
color: #212529;
text-decoration: none;
background-color: #dae0e5;
}
.badge-dark {
color: #fff;
background-color: #343a40;
}
.badge-dark[href]:hover, .badge-dark[href]:focus {
color: #fff;
text-decoration: none;
background-color: #1d2124;
}
.border {
border: 1px solid #dee2e6 !important;
}
.border-top {
border-top: 1px solid #dee2e6 !important;
}
.border-right {
border-right: 1px solid #dee2e6 !important;
}
.border-bottom {
border-bottom: 1px solid #dee2e6 !important;
}
.border-left {
border-left: 1px solid #dee2e6 !important;
}
.border-0 {
border: 0 !important;
}
.border-top-0 {
border-top: 0 !important;
}
.border-right-0 {
border-right: 0 !important;
}
.border-bottom-0 {
border-bottom: 0 !important;
}
.border-left-0 {
border-left: 0 !important;
}
.border-primary {
border-color: #007bff !important;
}
.border-secondary {
border-color: #6c757d !important;
}
.border-success {
border-color: #28a745 !important;
}
.border-info {
border-color: #17a2b8 !important;
}
.border-warning {
border-color: #ffc107 !important;
}
.border-danger {
border-color: #dc3545 !important;
}
.border-light {
border-color: #f8f9fa !important;
}
.border-dark {
border-color: #343a40 !important;
}
.border-white {
border-color: #fff !important;
}
.rounded {
border-radius: 0.25rem !important;
}
.rounded-top {
border-top-left-radius: 0.25rem !important;
border-top-right-radius: 0.25rem !important;
}
.rounded-right {
border-top-right-radius: 0.25rem !important;
border-bottom-right-radius: 0.25rem !important;
}
.rounded-bottom {
border-bottom-right-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important;
}
.rounded-left {
border-top-left-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important;
}
.rounded-circle {
border-radius: 50% !important;
}
.rounded-0 {
border-radius: 0 !important;
}
/* Button and btn classes Mohammad*/
.btn {
display: inline-block;
font-weight: 400;
text-align: center;
white-space: nowrap;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
border: 1px solid transparent;
padding: 0.375rem 0.75rem;
font-size: 1rem;
line-height: 1.5;
border-radius: 0.25rem;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.btn:hover, .btn:focus {
text-decoration: none;
}
.btn:focus, .btn.focus {
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}
.btn.disabled, .btn:disabled {
opacity: 0.65;
}
.btn:not(:disabled):not(.disabled) {
cursor: pointer;
}
a.btn.disabled,
fieldset:disabled a.btn {
pointer-events: none;
}
.btn-primary {
color: #fff;
background-color: #007bff;
border-color: #007bff;
}
.btn-primary:hover {
color: #fff;
background-color: #0069d9;
border-color: #0062cc;
}
.btn-primary:focus, .btn-primary.focus {
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
}
.btn-primary.disabled, .btn-primary:disabled {
color: #fff;
background-color: #007bff;
border-color: #007bff;
}
.btn-secondary {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-secondary:hover {
color: #fff;
background-color: #5a6268;
border-color: #545b62;
}
.btn-secondary:focus, .btn-secondary.focus {
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
}
.btn-secondary.disabled, .btn-secondary:disabled {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.btn-success {
color: #fff;
background-color: #28a745;
border-color: #28a745;
}
.btn-success:hover {
color: #fff;
background-color: #218838;
border-color: #1e7e34;
}
.btn-success:focus, .btn-success.focus {
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
}
.btn-success.disabled, .btn-success:disabled {
color: #fff;
background-color: #28a745;
border-color: #28a745;
}
.btn-info {
color: #fff;
background-color: #17a2b8;
border-color: #17a2b8;
}
.btn-info:hover {
color: #fff;
background-color: #138496;
border-color: #117a8b;
}
.btn-info:focus, .btn-info.focus {
box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
}
.btn-info.disabled, .btn-info:disabled {
color: #fff;
background-color: #17a2b8;
border-color: #17a2b8;
}
.btn-warning {
color: #212529;
background-color: #ffc107;
border-color: #ffc107;
}
.btn-warning:hover {
color: #212529;
background-color: #e0a800;
border-color: #d39e00;
}
.btn-warning:focus, .btn-warning.focus {
box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
}
.btn-warning.disabled, .btn-warning:disabled {
color: #212529;
background-color: #ffc107;
border-color: #ffc107;
}
.btn-danger {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.btn-danger:hover {
color: #fff;
background-color: #c82333;
border-color: #bd2130;
}
.btn-danger:focus, .btn-danger.focus {
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
}
.btn-danger.disabled, .btn-danger:disabled {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.btn-light {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-light:hover {
color: #212529;
background-color: #e2e6ea;
border-color: #dae0e5;
}
.btn-light:focus, .btn-light.focus {
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
}
.btn-light.disabled, .btn-light:disabled {
color: #212529;
background-color: #f8f9fa;
border-color: #f8f9fa;
}
.btn-dark {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-dark:hover {
color: #fff;
background-color: #23272b;
border-color: #1d2124;
}
.btn-dark:focus, .btn-dark.focus {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}
.btn-dark.disabled, .btn-dark:disabled {
color: #fff;
background-color: #343a40;
border-color: #343a40;
}
.btn-link {
font-weight: 400;
color: #007bff;
background-color: transparent;
}
.btn-link:hover {
color: #0056b3;
text-decoration: underline;
background-color: transparent;
border-color: transparent;
}
.btn-link:focus, .btn-link.focus {
text-decoration: underline;
border-color: transparent;
box-shadow: none;
}
.btn-link:disabled, .btn-link.disabled {
color: #6c757d;
pointer-events: none;
}
/* button size */
.btn-lg{
padding: 0.5rem 1rem;
font-size: 1.25rem;
line-height: 1.5;
border-radius: 0.3rem;
}
.btn-sm{
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
line-height: 1.5;
border-radius: 0.2rem;
}
/* Extracted from bootstrap 4.3.1 */
.card-columns .card {
margin-bottom: 0.75rem;
}
@media (min-width: 576px) {
.card-columns {
-webkit-column-count: 3;
-moz-column-count: 3;
column-count: 3;
-webkit-column-gap: 1.25rem;
-moz-column-gap: 1.25rem;
column-gap: 1.25rem;
orphans: 1;
widows: 1;
}
.card-columns .card {
display: inline-block;
width: 100%;
}
}
/* Extracted from bootstrap 4.1.3 */
.card-deck {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
}
.card-deck .card {
margin-bottom: 15px;
}
@media (min-width: 576px) {
.card-deck {
-ms-flex-flow: row wrap;
flex-flow: row wrap;
margin-right: -15px;
margin-left: -15px;
}
.card-deck .card {
display: -ms-flexbox;
display: flex;
-ms-flex: 1 0 0%;
flex: 1 0 0%;
-ms-flex-direction: column;
flex-direction: column;
margin-right: 15px;
margin-bottom: 0;
margin-left: 15px;
}
}
/* Extracted from bootstrap 4.1.3 */
.card-group {
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
}
.card-group > .card {
margin-bottom: 15px;
}
@media (min-width: 576px) {
.card-group {
-ms-flex-flow: row wrap;
flex-flow: row wrap;
}
.card-group > .card {
-ms-flex: 1 0 0%;
flex: 1 0 0%;
margin-bottom: 0;
}
.card-group > .card + .card {
margin-left: 0;
border-left: 0;
}
.card-group > .card:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.card-group > .card:first-child .card-img-top,
.card-group > .card:first-child .card-header {
border-top-right-radius: 0;
}
.card-group > .card:first-child .card-img-bottom,
.card-group > .card:first-child .card-footer {
border-bottom-right-radius: 0;
}
.card-group > .card:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.card-group > .card:last-child .card-img-top,
.card-group > .card:last-child .card-header {
border-top-left-radius: 0;
}
.card-group > .card:last-child .card-img-bottom,
.card-group > .card:last-child .card-footer {
border-bottom-left-radius: 0;
}
.card-group > .card:only-child {
border-radius: 0.25rem;
}
.card-group > .card:only-child .card-img-top,
.card-group > .card:only-child .card-header {
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
}
.card-group > .card:only-child .card-img-bottom,
.card-group > .card:only-child .card-footer {
border-bottom-right-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
}
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) {
border-radius: 0;
}
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,
.card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {
border-radius: 0;
}
}
/* Extracted from bootstrap 4.1.3 */
.card {
position: relative;
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
background-color: #fff;
background-clip: border-box;
border: 1px solid rgba(0, 0, 0, 0.125);
border-radius: 0.25rem;
}
.card > hr {
margin-right: 0;
margin-left: 0;
}
.card > .list-group:first-child .list-group-item:first-child {
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
}
.card > .list-group:last-child .list-group-item:last-child {
border-bottom-right-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
}
.card-body {
-ms-flex: 1 1 auto;
flex: 1 1 auto;
padding: 1.25rem;
}
.card-title {
margin-bottom: 0.75rem;
}
.card-subtitle {
margin-top: -0.375rem;
margin-bottom: 0;
}
.card-text:last-child {
margin-bottom: 0;
}
.card-link:hover {
text-decoration: none;
}
.card-link + .card-link {
margin-left: 1.25rem;
}
.card-header {
padding: 0.75rem 1.25rem;
margin-bottom: 0;
background-color: rgba(0, 0, 0, 0.03);
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
}
.card-header:first-child {
border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;
}
.card-header + .list-group .list-group-item:first-child {
border-top: 0;
}
.card-footer {
padding: 0.75rem 1.25rem;
background-color: rgba(0, 0, 0, 0.03);
border-top: 1px solid rgba(0, 0, 0, 0.125);
}
.card-footer:last-child {
border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);
}
.card-header-tabs {
margin-right: -0.625rem;
margin-bottom: -0.75rem;
margin-left: -0.625rem;
border-bottom: 0;
}
.card-header-pills {
margin-right: -0.625rem;
margin-left: -0.625rem;
}
.card-img-overlay {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 1.25rem;
}
.card-img {
width: 100%;
border-radius: calc(0.25rem - 1px);
}
.card-img-top {
width: 100%;
border-top-left-radius: calc(0.25rem - 1px);
border-top-right-radius: calc(0.25rem - 1px);
}
.card-img-bottom {
width: 100%;
border-bottom-right-radius: calc(0.25rem - 1px);
border-bottom-left-radius: calc(0.25rem - 1px);
}
.clearfix::after {
display: block;
clear: both;
content: "";
}
.float-left {
float: left;
}
.float-right {
float: right;
}
.float-none {
float: none;
}
/* My adjustments to bootstrap 4.1.3 css classes */
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
/* Link is hacked to be compatible with bootstrap
classes remove it if the TW core objects break
*/
.shadow-sm {
box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
}
.shadow {
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
}
.shadow-lg {
box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
}
.shadow-none {
box-shadow: none !important;
}
/* Extracted from bootstrap 4.3.1 */
/*Defines margins, paddings, width and height*/
.w-25 {
width: 25% !important;
}
.w-50 {
width: 50% !important;
}
.w-75 {
width: 75% !important;
}
.w-100 {
width: 100% !important;
}
.w-auto {
width: auto !important;
}
.h-25 {
height: 25% !important;
}
.h-50 {
height: 50% !important;
}
.h-75 {
height: 75% !important;
}
.h-100 {
height: 100% !important;
}
.h-auto {
height: auto !important;
}
.mw-100 {
max-width: 100% !important;
}
.mh-100 {
max-height: 100% !important;
}
.m-0 {
margin: 0 !important;
}
.mt-0,
.my-0 {
margin-top: 0 !important;
}
.mr-0,
.mx-0 {
margin-right: 0 !important;
}
.mb-0,
.my-0 {
margin-bottom: 0 !important;
}
.ml-0,
.mx-0 {
margin-left: 0 !important;
}
.m-1 {
margin: 0.25rem !important;
}
.mt-1,
.my-1 {
margin-top: 0.25rem !important;
}
.mr-1,
.mx-1 {
margin-right: 0.25rem !important;
}
.mb-1,
.my-1 {
margin-bottom: 0.25rem !important;
}
.ml-1,
.mx-1 {
margin-left: 0.25rem !important;
}
.m-2 {
margin: 0.5rem !important;
}
.mt-2,
.my-2 {
margin-top: 0.5rem !important;
}
.mr-2,
.mx-2 {
margin-right: 0.5rem !important;
}
.mb-2,
.my-2 {
margin-bottom: 0.5rem !important;
}
.ml-2,
.mx-2 {
margin-left: 0.5rem !important;
}
.m-3 {
margin: 1rem !important;
}
.mt-3,
.my-3 {
margin-top: 1rem !important;
}
.mr-3,
.mx-3 {
margin-right: 1rem !important;
}
.mb-3,
.my-3 {
margin-bottom: 1rem !important;
}
.ml-3,
.mx-3 {
margin-left: 1rem !important;
}
.m-4 {
margin: 1.5rem !important;
}
.mt-4,
.my-4 {
margin-top: 1.5rem !important;
}
.mr-4,
.mx-4 {
margin-right: 1.5rem !important;
}
.mb-4,
.my-4 {
margin-bottom: 1.5rem !important;
}
.ml-4,
.mx-4 {
margin-left: 1.5rem !important;
}
.m-5 {
margin: 3rem !important;
}
.mt-5,
.my-5 {
margin-top: 3rem !important;
}
.mr-5,
.mx-5 {
margin-right: 3rem !important;
}
.mb-5,
.my-5 {
margin-bottom: 3rem !important;
}
.ml-5,
.mx-5 {
margin-left: 3rem !important;
}
.p-0 {
padding: 0 !important;
}
.pt-0,
.py-0 {
padding-top: 0 !important;
}
.pr-0,
.px-0 {
padding-right: 0 !important;
}
.pb-0,
.py-0 {
padding-bottom: 0 !important;
}
.pl-0,
.px-0 {
padding-left: 0 !important;
}
.p-1 {
padding: 0.25rem !important;
}
.pt-1,
.py-1 {
padding-top: 0.25rem !important;
}
.pr-1,
.px-1 {
padding-right: 0.25rem !important;
}
.pb-1,
.py-1 {
padding-bottom: 0.25rem !important;
}
.pl-1,
.px-1 {
padding-left: 0.25rem !important;
}
.p-2 {
padding: 0.5rem !important;
}
.pt-2,
.py-2 {
padding-top: 0.5rem !important;
}
.pr-2,
.px-2 {
padding-right: 0.5rem !important;
}
.pb-2,
.py-2 {
padding-bottom: 0.5rem !important;
}
.pl-2,
.px-2 {
padding-left: 0.5rem !important;
}
.p-3 {
padding: 1rem !important;
}
.pt-3,
.py-3 {
padding-top: 1rem !important;
}
.pr-3,
.px-3 {
padding-right: 1rem !important;
}
.pb-3,
.py-3 {
padding-bottom: 1rem !important;
}
.pl-3,
.px-3 {
padding-left: 1rem !important;
}
.p-4 {
padding: 1.5rem !important;
}
.pt-4,
.py-4 {
padding-top: 1.5rem !important;
}
.pr-4,
.px-4 {
padding-right: 1.5rem !important;
}
.pb-4,
.py-4 {
padding-bottom: 1.5rem !important;
}
.pl-4,
.px-4 {
padding-left: 1.5rem !important;
}
.p-5 {
padding: 3rem !important;
}
.pt-5,
.py-5 {
padding-top: 3rem !important;
}
.pr-5,
.px-5 {
padding-right: 3rem !important;
}
.pb-5,
.py-5 {
padding-bottom: 3rem !important;
}
.pl-5,
.px-5 {
padding-left: 3rem !important;
}
.m-auto {
margin: auto !important;
}
.mt-auto,
.my-auto {
margin-top: auto !important;
}
.mr-auto,
.mx-auto {
margin-right: auto !important;
}
.mb-auto,
.my-auto {
margin-bottom: auto !important;
}
.ml-auto,
.mx-auto {
margin-left: auto !important;
}
.text-justify {
text-align: justify !important;
}
.text-nowrap {
white-space: nowrap !important;
}
.text-truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.text-left {
text-align: left !important;
}
.text-right {
text-align: right !important;
}
.text-center {
text-align: center !important;
}
/* from bootstrap 4.1.3 */
.text-white {
color: #fff !important;
}
.text-primary {
color: #007bff !important;
}
a.text-primary:hover, a.text-primary:focus {
color: #0062cc !important;
}
.text-secondary {
color: #6c757d !important;
}
a.text-secondary:hover, a.text-secondary:focus {
color: #545b62 !important;
}
.text-success {
color: #28a745 !important;
}
a.text-success:hover, a.text-success:focus {
color: #1e7e34 !important;
}
.text-info {
color: #17a2b8 !important;
}
a.text-info:hover, a.text-info:focus {
color: #117a8b !important;
}
.text-warning {
color: #ffc107 !important;
}
a.text-warning:hover, a.text-warning:focus {
color: #d39e00 !important;
}
.text-danger {
color: #dc3545 !important;
}
a.text-danger:hover, a.text-danger:focus {
color: #bd2130 !important;
}
.text-light {
color: #f8f9fa !important;
}
a.text-light:hover, a.text-light:focus {
color: #dae0e5 !important;
}
.text-dark {
color: #343a40 !important;
}
a.text-dark:hover, a.text-dark:focus {
color: #1d2124 !important;
}
.text-body {
color: #212529 !important;
}
.text-muted {
color: #6c757d !important;
}
.text-black-50 {
color: rgba(0, 0, 0, 0.5) !important;
}
.text-white-50 {
color: rgba(255, 255, 255, 0.5) !important;
}
.text-hide {
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
/* Can be removed latter. This is used for illustration of bootstrap cards */
.text-lowercase {
text-transform: lowercase !important;
}
.text-uppercase {
text-transform: uppercase !important;
}
.text-capitalize {
text-transform: capitalize !important;
}
.font-weight-light {
font-weight: 300 !important;
}
.font-weight-normal {
font-weight: 400 !important;
}
.font-weight-bold {
font-weight: 700 !important;
}
.font-italic {
font-style: italic !important;
}
.h1, .h2, .h3, .h4, .h5, .h6 {
margin-bottom: 0.5rem;
font-family: inherit;
font-weight: 500;
line-height: 1.2;
color: inherit;
}
.h1 {
font-size: 2.5rem;
}
.h2 {
font-size: 2rem;
}
.h3 {
font-size: 1.75rem;
}
.h4 {
font-size: 1.5rem;
}
.h5 {
font-size: 1.25rem;
}
.h6 {
font-size: 1rem;
}
.lead {
font-size: 1.25rem;
font-weight: 300;
}
.display-1 {
font-size: 6rem;
font-weight: 300;
line-height: 1.2;
}
.display-2 {
font-size: 5.5rem;
font-weight: 300;
line-height: 1.2;
}
.display-3 {
font-size: 4.5rem;
font-weight: 300;
line-height: 1.2;
}
.display-4 {
font-size: 3.5rem;
font-weight: 300;
line-height: 1.2;
}
.hr {
margin-top: 1rem;
margin-bottom: 1rem;
border: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.small {
font-size: 80%;
font-weight: 400;
}
.mark {
padding: 0.2em;
background-color: #fcf8e3;
}
/* Resolve issue for floating objects which cross the tiddler frame!
The below code should force the tiddler to always wrap around floating elements, so that they are always inside
Ref: https://groups.google.com/d/msg/tiddlywiki/5bZwwj6cyac/2LzFeA7AAwAJ
*/
.tc-tiddler-body:before, .tc-tiddler-body:after {
content: "";
display: table;
}
.tc-tiddler-body:after {
clear: both;
}
.tc-tiddler-body {
zoom: 1;
}
.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {
background: none;
border: none;
border-bottom: solid 1px #737373 !important;
font-weight: bold;
color: #DB4C3F !important;
}
.falign .katex-display > .katex {text-align:left;}
.ralign .katex-display > .katex {text-align:right;}
.table-mathbox tr td{vertical-align: baseline;} /* baseline aligned text and fomula in table cell*/
/*
Only used with csv table + katex
See $:/plugins/kookma/shiraz/macros/csvtables/formats-math
*/
/*Credits:
Nishant Srivastava https://codepen.io/nisrulz/pen/bpQWLW
Mohammad Rahmani: https://github.com/kookma
*/
.dbadge {
display: inline-block;
margin: 0.0em;
}
.dbadge > span {
color: #ffffff;
font-size: 0.8em;
font-weight: 400;
line-height: 1;
padding: .2em .6em;
text-align: center;
vertical-align: baseline;
white-space: nowrap;}
.dbadge-subject{
background-color: #656565;
border-bottom-left-radius: 0.25em;
border-top-left-radius: 0.25em;}
.dbadge-status {
border-bottom-right-radius: 0.25em;
border-top-right-radius: 0.25em;}
.dbadge-primary {
background-color: #337ab7;}
.dbadge-success {
background-color: #5cb85c;}
.dbadge-info {
background-color: #5bc0de;}
.dbadge-warning {
background-color: #f0ad4e;}
.dbadge-danger {
background-color: #d9534f;}
/*details html5 macro*/
details > summary {
padding: 2px 6px;
font-weight:500;
outline:none;
}
details > div {
padding: 2px 6px;
margin: 0;
}
button .kk-sh-slider svg{
width: 0.8em;
height: 0.8em;
vertical-align: middle;}
/* these are dynamic or variable properties based on the tiddlywiki palette */.shiraz-dtable-page-footer select{
background-color: #f0f0f0;
color:#333333;
}.shiraz-dtable-page-footer > td{
background-color: #f0f0f0;
}/* customize the table footer used for numerical summary*/
.shiraz-dtable-footer tr td{
background-color: #a8a8a8;
border:none;
}
/* edit-text box for dynamic table */
.shiraz-dtable-textbox {
width:100%;
padding-left: 5px;
border: none;
}
.shiraz-dtable-textbox:focus {
outline: none;
border: 1px solid #5778d8;
background: transparent;
}
.tbl-inpt-edit { width: 100%; background-color: transparent; border: none; color: #000000;}
button.tbl-sort-svg > svg { text-shadow: none; fill:#000000; height:10px; padding:0 0 2px 0; }
th .tc-tiddlylink, th a { text-shadow: none; margin: 0 0 0 0; padding: 0 0 0 0; color:#000000; font-weight: bold; }
/* DELETE CONFIRMATION */
table thead .tbl-delete-confirm > th {
color: white;
background-color:#ff0033;
padding: 8px;
margin: 0px;
text-align:center;
font-weight:normal;
}
table thead .tbl-delete-confirm > th > button {
color: white;
fill: white;
}
/* -- pagination --*/
.shiraz-dtable-page-footer td{
margin: 0 0 0 0;
padding: 4px 7px 4px 7px;
}
.shiraz-dtable-page-footer select{
padding:0;
margin:0;
border:none;
}
.shiraz-dtable-page-footer {
text-align:center;
}
.shiraz-dtable-page-prev{
float:left;
margin-right:8px;
}
.shiraz-dtable-page-next{
float:right;
margin-left:8px;
}
.shiraz-dtable-page-footer button svg {height:0.7em;}
.shiraz-dtable-page-footer button {outline: none; line-height:normal;}
.shiraz-dtable-page-footer button:disabled {display:none;}
/* to format the expanded record (tiddler body) - for local customization like KaTeX numbering */
.shiraz-dtable-expanded-record{ }
/*Image aligning classes*/
.image-align-right{
float:right;
margin:0.5em 0 1.3em 1.4em;
}
.image-align-left{
float:left;
margin: 0.5em 1.4em 1.3em 0;
}
.image-align-center{
display:block;
margin: 0.5em auto 1.3em;
}
.image-float-none {
float: none !important;
}
.image-basic {
text-align: center;
font-style: italic;
font-size: smaller;
text-indent: 0;
padding: 0.5em;
}
.image-overlay-container{
width: 50%;
box-sizing: border-box;
}
@media screen and (max-width: 640px){
.image-overlay-container{
display: block;
width: 100%;
}
}
@media screen and (min-width: 900px){
.image-overlay-container{
width: 33.33%;
}
}
.image-overlay-container .image-overlay-title{
color: #1a1a1a;
text-align: center;
margin-bottom:10px;
}
.image-overlay-content {
position: relative;
width: 90%;
max-width: 400px;
margin: auto;
overflow: hidden;
}
.image-overlay-content .image-overlay-content-overlay {
background: rgba(0,0,0,0.7);
position: absolute;
height: 99%;
width: 100%;
left: 0;
top: 0;
bottom: 0;
right: 0;
opacity: 0;
-webkit-transition: all 0.4s ease-in-out 0s;
-moz-transition: all 0.4s ease-in-out 0s;
transition: all 0.4s ease-in-out 0s;
}
.image-overlay-content:hover .image-overlay-content-overlay{
opacity: 1;
}
.image-overlay-content-image{
width: 100%;
}
.image-overlay-content-details {
position: absolute;
text-align: center;
padding-left: 1em;
padding-right: 1em;
width: 100%;
top: 50%;
left: 50%;
opacity: 0;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transition: all 0.3s ease-in-out 0s;
-moz-transition: all 0.3s ease-in-out 0s;
transition: all 0.3s ease-in-out 0s;
}
.image-overlay-content:hover .image-overlay-content-details{
top: 50%;
left: 50%;
opacity: 1;
}
.image-overlay-content-details h3{
color: #fff;
font-weight: 500;
letter-spacing: 0.15em;
margin-bottom: 0.5em;
text-transform: uppercase;
}
.image-overlay-content-details p{
color: #fff;
font-size: 0.8em;
}
.image-overlay-fadeIn-bottom{
top: 80%;
}
.image-overlay-fadeIn-top{
top: 20%;
}
.image-overlay-fadeIn-left{
left: 20%;
}
.image-overlay-fadeIn-right{
left: 80%;
}
.image-polaroid {
min-width:64px;
background-color: #f8f9fa;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
.image-polaroid img {
width: 100%;
padding:10px;
height: auto;
}
.image-polaroid .image-polaroid-caption {
padding:10px 15px 10px;
text-align: center;
line-height: 1.4em;
font-weight:300;
font-size: 0.9em;
}
.image-pretty {
min-width:64px;
border: 1px solid #c8ccd1;
background-color:#f8f9fa;
}
.image-pretty:hover {
border: 1px solid #777;
}
.image-pretty img {
padding:2px;
width: 100%;
height: auto;
}
.image-pretty .image-pretty-caption {
padding:10px 15px 10px;
text-align: center;
line-height: 1.4em;
font-weight:300;
font-size: 0.9em;
}
.image-slidein {
display: block;
position: relative;
/*float: left;*/
overflow: hidden;
/* margin: 0 20px 20px 0;*/
}
.image-slidein img {
width: 100%;
height: auto;
}
.image-slidein figcaption {
position: absolute;
background: rgba(0,0,0,0.75);
color: white;
padding: 10px 20px;
opacity: 0;
-webkit-transition: all 0.6s ease;
-moz-transition: all 0.6s ease;
-o-transition: all 0.6s ease;
}
.image-slidein:hover figcaption {
opacity: 1;
}
.image-slidein:before {
content: "?";
position: absolute;
font-weight: 800;
background: rgba(255,255,255,0.75);
text-shadow: 0 0 5px white;
color: black;
width: 24px;
height: 24px;
-webkit-border-radius: 12px;
-moz-border-radius: 12px;
border-radius: 12px;
text-align: center;
font-size: 14px;
line-height: 24px;
-moz-transition: all 0.6s ease;
opacity: 0.75;
}
.image-slidein:hover:before {
opacity: 0;
}
.mr-cap-left:before { bottom: 10px; left: 10px; }
.mr-cap-left figcaption { bottom: 0; left: -30%; }
.mr-cap-left:hover figcaption { left: 0; }
.mr-cap-right:before { bottom: 10px; right: 10px; }
.mr-cap-right figcaption { bottom: 0; right: -30%; }
.mr-cap-right:hover figcaption { right: 0; }
.mr-cap-top:before { top: 10px; left: 10px; }
.mr-cap-top figcaption { left: 0; top: -30%; }
.mr-cap-top:hover figcaption { top: 0; }
.mr-cap-bottom:before { bottom: 10px; left: 10px; }
.mr-cap-bottom figcaption { left: 0; bottom: -30%;}
.mr-cap-bottom:hover figcaption { bottom: 0; }
/* Styles for summary cursor
url: https://css-tricks.com/two-issues-styling-the-details-element-and-how-to-solve-them/
*/
summary {
cursor: pointer;
}
summary > * {
display: inline;
}
/* Styles for star rating used with table-csv macro */
.shiraz-star svg{
width: 1.2em;
height: 1.2em;
vertical-align: middle;
fill:#FF9529; /*Deep Saffron*/
}
/* These css rules makes TW UI buttons in beatiful color */
/*page control buttons*/
.tc-page-controls .tc-image-new-button { fill: #5EB95E; } /*New tiddler button*/
.tc-page-controls .tc-image-options-button { fill:#8058A5; } /*Open control pannel*/
/*tiddler buttons in beautiful color*/
.tc-tiddler-controls .tc-image-edit-button { fill:#F37B1D; }/*edit tiddler*/
.tc-tiddler-controls .tc-image-info-button { fill: #0e90d2; } /*Info button*/
.mono {
color:unset;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
white-space: pre-wrap;
padding: 0 3px 2px;
border-radius: 3px;
font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
}
/* multicolumn layouts with fixed column number works on the whole tiddler */
.multicol .tc-tiddler-body {
column-width: 14em;
column-rule: 1px solid #ccc;
}
/* two columns responsive*/
.multicol2 .tc-tiddler-body {
column-count:2;
column-width:15em;
}
/* three columns responsive*/
.multicol3 .tc-tiddler-body {
column-count:3;
column-width:10em;
}
/* remove the extra space from first paragraph */
.multicol .tc-tiddler-body > :first-child,
.multicol2 .tc-tiddler-body > :first-child,
.multicol3 .tc-tiddler-body > :first-child { margin-top: 0;}
/*-------------------------------------------------------------------------------*/
/* Classes for using with macro and div elements */
.sh-multicol {
column-width: 14em;
column-rule: 1px solid #ccc;
}
/* two columns responsive*/
.sh-multicol2 {
column-count:2;
column-width:15em;
}
/* three columns responsive*/
.sh-multicol3 {
column-count:3;
column-width:10em;
}
/* remove the extra space from first paragraph */
.sh-multicol > :first-child,
.sh-multicol2 > :first-child,
.sh-multicol3 > :first-child { margin-top: 0;}
/* multicolumn layout using flexbox courtesy from Bootstrap 4.3.1*/
.flex-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
/* margin-right: -15px;
margin-left: -15px;*/
}
.flex-col,
.flex-col-1,
.flex-col-2,
.flex-col-3,
.flex-col-4 {
position: relative;
width: 100%;
padding-right: 15px;
padding-left: 15px;
}
/* for small screen width>=576px
https://getbootstrap.com/docs/4.3/layout/grid/
*/
@media (min-width: 576px) {
.flex-col {flex: 1 1 0; max-width: 100%;}
.flex-col-1 {flex: 0 0 25%; max-width:25%}
.flex-col-2 {flex: 0 0 50%; max-width:50%}
.flex-col-3 {flex: 0 0 75%; max-width:75%}
.flex-col-4 {flex: 0 0 100%; max-width:100%}
}
.flex-col > :first-child,
.flex-col-1 > :first-child,
.flex-col-2 > :first-child,
.flex-col-3 > :first-child,
.flex-col-4 > :first-child {
margin-top: 0;}
/* Alignment */
.flex-align-items-center {
align-items: center !important;
}
.flex-justify-content-center {
justify-content: center !important;
}
.flex-no-gutters {
margin-right: 0;
margin-left: 0;
}
@media print{
.notebook .tc-tiddler-body {
padding-left:60px;
margin-top:25px;
}
.notebook .tc-tiddler-title,
.notebook .tc-subtitle,
.notebook .tc-tags-wrapper {
padding-left:60px;
}
}
@media screen{
.notebook .tc-tiddler-title,
.notebook .tc-subtitle,
.notebook .tc-tags-wrapper,
.notebook .tc-tiddler-body {
padding-left:30px;
}
}
@media screen and (max-width:960px) {
.notebook .tc-tiddler-title,
.notebook .tc-subtitle,
.notebook .tc-tags-wrapper,
.notebook .tc-tiddler-body {
padding-left:60px;
}
}
/*prevent applying left border in edit mode */
.notebook:not([data-tiddler-title^="Draft of"]):before {
content: '';
position: absolute;
top: 0; bottom: 0; left: 0;
width: 50px;
background: radial-gradient(#575450 6px, transparent 7px) repeat-y;
background-size: 30px 30px;
border-right: 3px solid #D44147;
z-index:1;
}
.notebook .tc-tiddler-body {
position: relative;
background: linear-gradient(transparent, transparent 1.95em, #91D1D3 1.95em);
background-size: 2em 2em;
min-height:90px;
}
.notebook .tc-tiddler-body{
padding-top:20px;
font-family: "Handlee", cursive;
font-weight:300;
line-height:2em;
color:#696969;
}
/* Setting font for other elements */
.notebook .tc-tiddler-body pre,
.notebook .tc-tiddler-body code,
.notebook .tc-tiddler-body pre code
{
font-family: "Handlee", cursive;
font-weight:300;
}
.sticky-footer {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: 0.5rem;
background-color: #efefef;
text-align: center;
margin-top: 5px;
box-sizing: border-box;
width: 100%;
}
.table-tight{
font-size:0.8em;
}
/*
This tiddler defines the custom stylesheet for tables
April 13, 2018
*/
/*center aligned table*/
.table-center {
margin:0 auto;
}
/* Table caption at top */
.table-caption-top caption {
caption-side:top;
margin-bottom:0.2rem;
}
/* Striped row table */
.table-striped-row tr:nth-child(even) td{
background-color:#F3F6F6;
}
/* Striped column table */
.table-striped-col tbody tr td:nth-child(odd) {
background-color: #F3F6F6;
}
/*Borderless table*/
.table-borderless,
.table-borderless thead td,
.table-borderless th,
.table-borderless tr,
.table-borderless td{
border:0;
}
/* Table lines should be used with table-borderless for abbreviations and two column layout */
.table-lines thead td, .table-lines th{
border-bottom: 2px solid #dddddd;
background-color:unset;
}
.table-lines td{
border-bottom: 1px solid #dddddd;
background-color:unset;
}
/* Table hover (yellow background on mouse over) */
.table-hover tbody tr:hover{
color: #212529;
background-color: #e6e6e6;
}
.table-hover-yellow tbody tr:hover{background-color: #ffffcc;}
.table-hover-cyan tbody tr:hover{background-color: #e6ffff;}
/* Table with colored header */
.thead-primary thead td, .thead-primary th{background-color: #007bff; color: #fff;}
.thead-secondary thead td, .thead-secondary th{background-color: #6c757d; color: #fff;}
.thead-success thead td, .thead-success th{background-color: #28a745; color: #fff;}
.thead-warning thead td, .thead-warning th{background-color: #ffc107; color: #fff;}
.thead-danger thead td, .thead-danger th{background-color: #dc3545; color: #fff;}
.thead-info thead td, .thead-info th{background-color: #17a2b8; color: #fff;}
.thead-dark thead td, .thead-dark th{background-color: #343a40; color: #fff;}
.thead-light thead td, .thead-light th{background-color: #f8f9fa; color: #212529;}
/* Table with colored header correct to fill svgs with white color */
.thead-primary > thead> tr > td svg, .thead-primary > thead> tr > th svg,
.thead-secondary > thead> tr > td svg, .thead-secondary > thead> tr > th svg,
.thead-success > thead> tr > td svg, .thead-success > thead> tr > th svg,
.thead-warning > thead> tr > td svg, .thead-warning > thead> tr > th svg,
.thead-danger > thead> tr > td svg, .thead-danger > thead> tr > th svg,
.thead-info > thead> tr > td svg, .thead-info > thead> tr > th svg,
.thead-dark > thead> tr > td svg, .thead-dark > thead> tr > th svg
{fill:#ffffff; padding:0 0 3px 0; }
.thead-primary th .tc-tiddlylink, .thead-primary th a,
.thead-secondary th .tc-tiddlylink, .thead-primary th a,
.thead-success th .tc-tiddlylink, .thead-primary th a,
.thead-warning th .tc-tiddlylink, .thead-primary th a,
.thead-danger th .tc-tiddlylink, .thead-primary th a,
.thead-info th .tc-tiddlylink, .thead-primary th a,
.thead-dark th .tc-tiddlylink, .thead-primary th a{color:#ffffff}
.title-primary .tc-title {
color: #007bff;
}
.title-secondary .tc-title {
color: #6c757d;
}
.title-success .tc-title {
color: #28a745;
}
.title-info .tc-title {
color: #17a2b8;
}
.title-warning .tc-title {
color: #ffc107;
}
.title-danger .tc-title {
color: #dc3545;
}
.title-light .tc-title {
color: #f8f9fa;
}
.title-dark .tc-title {
color: #343a40;
}
.title-white .tc-title {
color: #fff;
}
.kk-doc svg{
width: 1.2em;
height: 1.2em;
vertical-align: middle;}
.kk-ut-txt{
min-width:50%}
/* TW-version added to site title */
.tc-site-title:before {
content:"TW 5.2.1-prerelease";
position:absolute;
margin-top:-1.9em;
color:silver;
font-size:13px;
}
.doc-example { margin: 1em 0; padding: 0.8em 0; } .doc-example:hover { background-color: #f7f7f9; } .doc-example ul { margin-bottom: 0; padding-bottom: 0; margin-top: 0.2em; } .doc-example pre:first-child { margin-top: 0; } .doc-example-result { border-left: 5px solid #bbb; border-right: 5px solid #bbb; margin-left: 0; margin-right: 0; padding: 0 10px; } .doc-example-result ul { margin-left: 0; padding-left: 10px; } .doc-example-result ol { margin-left: 0; padding-left: 20px; }
.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line > span::selection,.CodeMirror-line > span > span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line > span::-moz-selection,.CodeMirror-line > span > span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:}span.CodeMirror-selectedtext{background:none}
.CodeMirror-dialog {
position: absolute;
left: 0; right: 0;
background: inherit;
z-index: 15;
padding: .1em .8em;
overflow: hidden;
color: inherit;
}
.CodeMirror-dialog-top {
border-bottom: 1px solid #eee;
top: 0;
}
.CodeMirror-dialog-bottom {
border-top: 1px solid #eee;
bottom: 0;
}
.CodeMirror-dialog input {
border: none;
outline: none;
background: transparent;
width: 20em;
color: inherit;
font-family: monospace;
}
.CodeMirror-dialog button {
font-size: 70%;
}
/* Make the editor resize to fit its content */.CodeMirror {
height: auto;
border: 1px solid #cccccc;
line-height: 1.5;
font-family: ;
font-size: 15px;
}.CodeMirror-scroll {
overflow-x: auto;
overflow-y: hidden;
}.cm-s-tiddlywiki {
color-profile: sRGB;
rendering-intent: auto;
}.cm-s-tiddlywiki.CodeMirror, .cm-s-tiddlywiki .CodeMirror-gutters { background-color: #f8f8f8; color: #333333; }
.cm-s-tiddlywiki .CodeMirror-gutters {background: #f8f8f8; border-right: 1px solid #cccccc;}
.cm-s-tiddlywiki .CodeMirror-linenumber {color: #333333;}
.cm-s-tiddlywiki .CodeMirror-cursor { border-left: 2px solid #333333; }
.cm-s-tiddlywiki span.cm-comment { color: #586e75; font-style:italic; font-weight:normal; }
.cm-s-tiddlywiki .CodeMirror-activeline-background, .cm-s-tiddlywiki .CodeMirror-activeline-gutter .CodeMirror-linenumber { background: rgba(127,127,127,0.2); }
.cm-s-tiddlywiki span.cm-matchhighlight { color: #ffffff; background-color: #5778d8; font-weight: normal;}
.cm-s-tiddlywiki .CodeMirror-widget { text-shadow: none; }
.cm-s-tiddlywiki .CodeMirror-dialog { background: #ffffff; }
.cm-s-tiddlywiki .cm-header { color: #586e75; }
.cm-s-tiddlywiki .cm-quote { color: #93a1a1; }
.cm-s-tiddlywiki .cm-keyword { color: #cb4b16; }
.cm-s-tiddlywiki .cm-atom { color: #d33682; }
.cm-s-tiddlywiki .cm-number { color: #d33682; }
.cm-s-tiddlywiki .cm-def { color: #2aa198; }
.cm-s-tiddlywiki .cm-variable { color: #839496; }
.cm-s-tiddlywiki .cm-variable-2 { color: #b58900; }
.cm-s-tiddlywiki .cm-variable-3, .cm-s-tiddlywiki .cm-type { color: #6c71c4; }
.cm-s-tiddlywiki .cm-property { color: #2aa198; }
.cm-s-tiddlywiki .cm-operator { color: #6c71c4; }
.cm-s-tiddlywiki .cm-comment { color: #586e75; font-style:italic; }
.cm-s-tiddlywiki .cm-string { color: #859900; }
.cm-s-tiddlywiki .cm-string-2 { color: #b58900; }
.cm-s-tiddlywiki .cm-meta { color: #859900; }
.cm-s-tiddlywiki .cm-qualifier { color: #b58900; }
.cm-s-tiddlywiki .cm-builtin { color: #d33682; }
.cm-s-tiddlywiki .cm-bracket { color: #cb4b16; }
.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }
.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }
.cm-s-tiddlywiki .cm-tag { color: #93a1a1; }
.cm-s-tiddlywiki .cm-attribute { color: #2aa198; }
.cm-s-tiddlywiki .cm-hr { color: transparent; border-top: 1px solid #586e75; display: block; }
.cm-s-tiddlywiki .cm-link { color: #93a1a1; cursor: pointer; }
.cm-s-tiddlywiki .cm-special { color: #6c71c4; }
.cm-s-tiddlywiki .cm-em { color: #999; text-decoration: underline; text-decoration-style: dotted; }
.cm-s-tiddlywiki .cm-error,
.cm-s-tiddlywiki .cm-invalidchar { color: #586e75; border-bottom: 1px dotted #dc322f; }
.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }
.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }
.cm-s-tiddlywiki .cm-searching { background: rgba(243, 155, 53, .3); outline: 1px solid #F39B35; }
.cm-s-tiddlywiki.cm-fat-cursor .CodeMirror-cursor { background: #77ee77; }
.cm-s-tiddlywiki .cm-animate-fat-cursor { background-color: #77ee77; }
.cm-s-tiddlywiki div.CodeMirror-selected { background: #eee8d5; color: #333333; }
.cm-s-tiddlywiki.CodeMirror ::selection { background: #eee8d5; color: #333333; }
.cm-s-tiddlywiki .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #eee8d5; color: #333333; }
.cm-s-tiddlywiki .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #eee8d5; color: #333333; }
/*
Original highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #F0F0F0;
}
/* Base color: saturation 0; */
.hljs,
.hljs-subst {
color: #444;
}
.hljs-comment {
color: #888888;
}
.hljs-keyword,
.hljs-attribute,
.hljs-selector-tag,
.hljs-meta-keyword,
.hljs-doctag,
.hljs-name {
font-weight: bold;
}
/* User color: hue: 0 */
.hljs-type,
.hljs-string,
.hljs-number,
.hljs-selector-id,
.hljs-selector-class,
.hljs-quote,
.hljs-template-tag,
.hljs-deletion {
color: #880000;
}
.hljs-title,
.hljs-section {
color: #880000;
font-weight: bold;
}
.hljs-regexp,
.hljs-symbol,
.hljs-variable,
.hljs-template-variable,
.hljs-link,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #BC6060;
}
/* Language color: hue: 90; */
.hljs-literal {
color: #78A960;
}
.hljs-built_in,
.hljs-bullet,
.hljs-code,
.hljs-addition {
color: #397300;
}
/* Meta color: hue: 200 */
.hljs-meta {
color: #1f7199;
}
.hljs-meta-string {
color: #4d99bf;
}
/* Misc effects */
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #f8f8f8;
color: #333333;
-webkit-text-size-adjust:none
}.hljs-comment,
.hljs-quote {
color: #93a1a1;
}/* Solarized Green */
.hljs-keyword,
.hljs-selector-tag,
.hljs-addition {
color: #859900;
}/* Solarized Cyan */
.hljs-number,
.hljs-string,
.hljs-meta .hljs-meta-string,
.hljs-literal,
.hljs-doctag,
.hljs-regexp {
color: #2aa198;
}/* Solarized Blue */
.hljs-title,
.hljs-section,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class {
color: #268bd2;
}/* Solarized Yellow */
.hljs-attribute,
.hljs-attr,
.hljs-variable,
.hljs-template-variable,
.hljs-class .hljs-title,
.hljs-type {
color: #b58900;
}/* Solarized Orange */
.hljs-symbol,
.hljs-bullet,
.hljs-subst,
.hljs-meta,
.hljs-meta .hljs-keyword,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-link {
color: #cb4b16;
}/* Solarized Red */
.hljs-built_in,
.hljs-deletion {
color: #dc322f;
}.hljs-formula {
background: #eee8d5;
}.hljs-emphasis {
font-style: italic;
}.hljs-strong {
font-weight: bold;
}
</style>
</head>
<body class="tc-body">
<section class="tc-story-river tc-static-story-river">
<a name="Refnotes Tutorial">
<div class="tc-tiddler-frame tc-tiddler-view-frame tc-tiddler-exists tc-tagged-start tc-tagged-doc" data-tags="start doc" data-tiddler-title="Refnotes Tutorial"><div class="tc-tiddler-title"><div class="tc-titlebar"><span class="tc-tiddler-controls"><button aria-expanded="false" aria-label="more" class="tc-btn-invisible tc-btn-%24%3A%2Fcore%2Fui%2FButtons%2Fmore-tiddler-actions" title="More actions"></button><div class=" tc-reveal" hidden="true"></div><button aria-label="edit" class="tc-btn-invisible tc-btn-%24%3A%2Fcore%2Fui%2FButtons%2Fedit" title="Edit this tiddler"></button><button aria-label="close" class="tc-btn-invisible tc-btn-%24%3A%2Fcore%2Fui%2FButtons%2Fclose" title="Close this tiddler"></button></span><span><h2 class="tc-title">Refnotes Tutorial</h2></span></div><div class="tc-tiddler-info tc-popup-handle tc-reveal" hidden="true"></div></div><div class=" tc-reveal" hidden="true"></div>
<div class=" tc-reveal"><div class="tc-subtitle"><a class="tc-tiddlylink tc-tiddlylink-missing" href="#"></a>18th September 2021 at 1:19am</div></div><div class=" tc-reveal">
<div class="tc-tags-wrapper"><span class="tc-tag-list-item" data-tag-title="doc">
<span aria-expanded="false" class="tc-tag-label tc-btn-invisible" draggable="true" style="background-color:;
fill:#333333;
color:#333333;">
doc
</span>
<span class="tc-drop-down tc-reveal" hidden="true"></span></span><span class="tc-tag-list-item" data-tag-title="start">
<span aria-expanded="false" class="tc-tag-label tc-btn-invisible" draggable="true" style="background-color:;
fill:#333333;
color:#333333;">
start
</span>
<span class="tc-drop-down tc-reveal" hidden="true"></span></span></div>
</div>
<span class=" tc-reveal" hidden="true"></span>
<div class="tc-tiddler-body tc-reveal"><p><strong>Refnotes</strong> is a reference manager tool that allows you to maintain a "personal library" of references, citations, footnotes and abbreviations in Tiddlywiki. It is a free web and desktop tool to store, organize and search all your references in Tiddlywiki.</p><p>
<div class="tc-tab-set tc-vertical">
<div class="tc-tab-buttons tc-vertical">
<button class="">
Quick tutorial
</button><button class="">
Abbreviations
</button><button class=" tc-tab-selected">
Footnotes
</button><button class="">
Bibliographies
</button>
</div>
<div class="tc-tab-divider tc-vertical"></div>
<div class="tc-tab-content tc-vertical">
<div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal"><p>
<div class="tc-tab-set tc-horizontal">
<div class="tc-tab-buttons tc-horizontal">
<button class=" tc-tab-selected">
Fnote macro
</button><button class="">
Showfnotes macro
</button><button class="">
Simple example
</button><button class="">
Multiple footnotes
</button><button class="">
Transclusion example
</button><button class="">
Automatic footnotes
</button>
</div>
<div class="tc-tab-divider tc-horizontal"></div>
<div class="tc-tab-content tc-horizontal">
<div class=" tc-reveal"><h1 class="">The fnote macro</h1><p>The <code>fnote</code> macro is used to create a footnote in a tiddler which on mouse hover shows the note.</p><h2 class="">Syntax</h2><pre><code><<fnote note>></code></pre><h2 class="">Content and attributes</h2><table><tbody><tr class="evenRow"><th align="left">Attributes</th><th align="left">Type</th><th align="left">Description</th></tr><tr class="oddRow"><td align="left">note</td><td>required</td><td>the text for footnote and is shown on mouse hover</td></tr></tbody></table><h2 class="">Example</h2><div class="doc-example"><p><div style="position: relative;">
<div style="position: absolute; bottom: 0; right: 0;">
<button class="tc-btn-invisible" title="Copy this text to the clipboard">
<svg class="tc-image-copy-clipboard tc-image-button" height="22pt" viewBox="0 0 128 128" width="22pt"><g fill-rule="evenodd"><rect height="8" rx="4" width="33" x="40" y="40"></rect><rect height="8" rx="4" width="17" x="40" y="82"></rect><rect height="8" rx="4" width="17" x="40" y="54"></rect><rect height="8" rx="4" width="33" x="40" y="96"></rect><rect height="8" rx="4" width="12" x="40" y="68"></rect><path d="M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z"></path><rect height="16" rx="8" width="66" x="62" y="64"></rect><path d="M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z"></path></g></svg> copy to clipboard
</button>
</div>
</div></p><pre><code>This is a test <<fnote "This is a small footnote">>. Hover the mouse and see what it shows. This is another note <<fnote "I am another footnote">>.
</code></pre><p>That renders as:</p><p>This is a test <div class="refnotes-tooltip refnotes-footnote"><div class="refnotes-tooltiptext">This is a small footnote</div></div>. Hover the mouse and see what it shows. This is another note <div class="refnotes-tooltip refnotes-footnote"><div class="refnotes-tooltiptext">I am another footnote</div></div>.</p></div><h2 class="">Remarks</h2><ul><li>The footnote numbers start at 1 for each tiddler. The scope of counter is tiddler text! So it will be reset at the beginning of each tiddler.</li><li>When a tiddler containing footnotes are transcluded, the numbering are automatically adjusted to show the correct footnotes number in the target tiddler. The first is first rule is used.</li><li><code>fnote</code> can accept <em>wikitext</em> and <em>transcluded</em> text</li><li>It is possible to use <code>data Tiddler</code> for the footnote. Then call <code>fnote</code> as <code><<fnote {{dtiddler##note}}>></code></li><li>Tiddler fields can be used to store the text for footnote</li></ul></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div><div class=" tc-reveal" hidden="true"></div>
</div>
</div>
</p></div><div class=" tc-reveal" hidden="true"></div>
</div>
</div>
</p></div>
<div class="tc-tiddler-plugin-info tc-reveal"><p>
</p></div>
</div>
</a>
</section>
</body>
</html>